Win32 tehtäviä syventävät vastaus5

Mureakuha

Loikkaa: valikkoon, hakuun

Tehtävä:

Kirjoita ohjelma, jossa on valikko ja sitä kautta mahdollisuus avata modaalinen dialogi 'Tietoja ohjelmasta'. Tee valikko ja dialogi kääntäjän resurssieditorilla.

DIALOGI.CPP

#include <windows.h>
#include "resource.h"
 
LRESULT CALLBACK WndProc        (HWND, UINT, WPARAM, LPARAM);
BOOL    CALLBACK TietojaDlgProc (HWND, UINT, WPARAM, LPARAM);
HINSTANCE hInstance;
 
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
{
    MSG msg;
    WNDCLASSEX wndclass;
 
    wndclass.cbSize = sizeof (wndclass);
    wndclass.style = CS_HREDRAW | CS_VREDRAW;
    wndclass.lpfnWndProc = WndProc;
    wndclass.cbClsExtra = 0;
    wndclass.cbWndExtra = 0;
    wndclass.hInstance = hInstance;
    wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION);
    wndclass.hCursor = LoadCursor (NULL, IDC_ARROW);
    wndclass.hbrBackground = (HBRUSH) COLOR_WINDOW;
    wndclass.lpszMenuName = MAKEINTRESOURCE(IDR_PAAMENU);
    wndclass.lpszClassName = "OmaLuokka";
    wndclass.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
 
    RegisterClassEx (&wndclass);
 
    HWND hwnd = CreateWindow ("OmaLuokka", "Dialogi", WS_OVERLAPPED | WS_SYSMENU | WS_CAPTION, CW_USEDEFAULT, CW_USEDEFAULT, 500, 300, NULL, NULL, hInstance, NULL);
 
    ShowWindow (hwnd, iCmdShow);
    UpdateWindow (hwnd);
 
    while (GetMessage (&msg, NULL, 0, 0))
    {
        TranslateMessage (&msg);
        DispatchMessage (&msg);
    }
 
    return msg.wParam;
}
 
LRESULT CALLBACK WndProc (HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
{
    switch (iMsg) // sanomien käsittelyrakenne
    {
 
    case WM_CREATE : // initialisaatio
        CreateWindowEx(NULL, "button", NULL, WS_CHILD | WS_VISIBLE | BS_GROUPBOX, 10, 0, 472, 245, hwnd, (HMENU) 0, hInstance, NULL); // kehys
        return 0; // pois ikkunaproseduurista
 
    case WM_COMMAND: // kontrollien sanomat
        switch (LOWORD(wParam))
        {
        case ID_OHJE_TIETOJAOHJELMASTA: // menukohta
            DialogBox (hInstance, MAKEINTRESOURCE(IDD_DIALOGI), hwnd, TietojaDlgProc); // dialogin näyttö
        }
        return 0; // pois ikkunaproseduurista
 
    case WM_DESTROY: // lopetus
        PostQuitMessage (0); // lopetusviesti
        return 0; // pois ikkunaproseduurista
 
    }
 
    return DefWindowProc (hwnd, iMsg, wParam, lParam); // sanomien oletuskäsittely
}
 
BOOL CALLBACK TietojaDlgProc (HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
{
    switch (iMsg)
    {
    case WM_INITDIALOG: // initialisaatio
        SetFocus(GetDlgItem(hwnd, IDOK)); // fokus painonappiin
        return TRUE;
 
    case WM_COMMAND:
        EndDialog(hwnd, 0); // dialogi pois
        return TRUE;
    }
 
    return FALSE;
}

RESOURCE.H

//{{NO_DEPENDENCIES}}
// Microsoft Developer Studio generated include file.
// Used by resurssit.rc
//
#define IDR_PAAMENU                     101
#define IDD_DIALOGI                     102
#define ID_OHJE_TIETOJAOHJELMASTA       40001
 
// Next default values for new objects
// 
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE        103
#define _APS_NEXT_COMMAND_VALUE         40002
#define _APS_NEXT_CONTROL_VALUE         1000
#define _APS_NEXT_SYMED_VALUE           101
#endif
#endif 
 

RESURSSIT.RC

//Microsoft Developer Studio generated resource script.
//
#include "resource.h"
 
#define APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 2 resource.
//
#include "afxres.h"
 
/////////////////////////////////////////////////////////////////////////////
#undef APSTUDIO_READONLY_SYMBOLS
 
/////////////////////////////////////////////////////////////////////////////
// Finnish resources
 
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_FIN)
#ifdef _WIN32
LANGUAGE LANG_FINNISH, SUBLANG_DEFAULT
#pragma code_page(1252)
#endif //_WIN32
 
/////////////////////////////////////////////////////////////////////////////
//
// Menu
//
 
IDR_PAAMENU MENU DISCARDABLE 
BEGIN
    POPUP "&Ohje"
    BEGIN
        MENUITEM "&Tietoja ohjelmasta...",      ID_OHJE_TIETOJAOHJELMASTA
    END
END
 
 
#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// TEXTINCLUDE
//
 
1 TEXTINCLUDE DISCARDABLE 
BEGIN
    "resource.h\0"
END
 
2 TEXTINCLUDE DISCARDABLE 
BEGIN
    "#include ""afxres.h""\r\n"
    "\0"
END
 
3 TEXTINCLUDE DISCARDABLE 
BEGIN
    "\r\n"
    "\0"
END
 
#endif    // APSTUDIO_INVOKED
 
 
/////////////////////////////////////////////////////////////////////////////
//
// Dialog
//
 
IDD_DIALOGI DIALOG DISCARDABLE  20, 20, 138, 61
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Tietoja ohjelmasta"
FONT 8, "MS Sans Serif"
BEGIN
    DEFPUSHBUTTON   "OK",IDOK,43,40,50,14
    LTEXT           "Modaalinen dialogi.\n\nCopyright © 1999 Petteri Hämäläinen.",
                    IDC_STATIC,7,7,124,26
END
 
 
/////////////////////////////////////////////////////////////////////////////
//
// DESIGNINFO
//
 
#ifdef APSTUDIO_INVOKED
GUIDELINES DESIGNINFO DISCARDABLE 
BEGIN
    IDD_DIALOGI, DIALOG
    BEGIN
        LEFTMARGIN, 7
        RIGHTMARGIN, 131
        TOPMARGIN, 7
        BOTTOMMARGIN, 54
    END
END
#endif    // APSTUDIO_INVOKED
 
#endif    // Finnish resources
/////////////////////////////////////////////////////////////////////////////
 
 
 
#ifndef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 3 resource.
//
 
 
/////////////////////////////////////////////////////////////////////////////
#endif    // not APSTUDIO_INVOKED 
 
Tämän dokumentin kopiointi, levittäminen sekä muokkaaminen on sallittua GNU Free Documentation Licensen version 1.2 tai uudemman Free Software Foundationin julkaiseman version mukaisesti, ilman muuttumattomuuslauseketta tai kansitekstejä. Tätä koskee vastuuvapaus.
Kopio lisenssistä (englanniksi) löytyy täältä.

Alkuperäinen (c) Petteri Hämäläinen

Henkilökohtaiset työkalut