This example is composed of three files:
This example is composed of three files:
//============================================================================= //MODAL DIALOG - Copyright © 2000,2005 Ken Fitlike //============================================================================= //API functions used: DialogBox,EndDialog,LoadImage,MAKEINTRESOURCE,MessageBox, //PostMessage,SendMessage,WinMain. //============================================================================= //This demonstrates the creation of a modal dialog box. //============================================================================= #include <windows.h> //include all the basics #include <tchar.h> //string and other mapping macros #include <string> #include "resources.h" //define an unicode string type alias typedef std::basic_string<TCHAR> ustring; //============================================================================= //message processing function declarations INT_PTR CALLBACK DlgProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam); void OnCommand(const HWND,int,int,const HWND); INT_PTR OnInitDlg(const HWND,LPARAM); //non-message function declarations inline int ErrMsg(const ustring&); //============================================================================= int WINAPI WinMain(HINSTANCE hInst,HINSTANCE,LPSTR,int) { INT_PTR success=DialogBox(hInst,MAKEINTRESOURCE(IDD_DIALOG1),0,DlgProc); if (success==-1) { ErrMsg(_T("DialogBox failed.")); } return 0; } //============================================================================= INT_PTR CALLBACK DlgProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam) { switch (uMsg) { case WM_COMMAND: { OnCommand(hwnd,LOWORD(wParam),HIWORD(wParam), reinterpret_cast<HWND>(lParam)); return 0; } case WM_INITDIALOG: { return OnInitDlg(hwnd,lParam); } default: return FALSE; //let system deal with msg } } //============================================================================= void OnCommand(const HWND hwnd,int id,int notifycode,const HWND hCntrl) { //handles WM_COMMAND message of the modal dialogbox switch (id) { case IDOK: //RETURN key pressed or 'ok' button selected case IDCANCEL: //ESC key pressed or 'cancel' button selected EndDialog(hwnd,id); } } //============================================================================= INT_PTR OnInitDlg(const HWND hwnd,LPARAM lParam) { //set the small icon for the dialog. IDI_APPLICATION icon is set by default //for winxp SendMessage(hwnd,WM_SETICON,ICON_SMALL, reinterpret_cast<LPARAM>(LoadImage(0,IDI_APPLICATION,IMAGE_ICON, 0,0,LR_SHARED))); //ensure focus rectangle is properly draw around control with focus PostMessage(hwnd,WM_KEYDOWN,VK_TAB,0); return TRUE; } //============================================================================= inline int ErrMsg(const ustring& s) { return MessageBox(0,s.c_str(),_T("ERROR"),MB_OK|MB_ICONEXCLAMATION); } //=============================================================================
//============================================================================= //Resource script constants for Modal Dialog example. //============================================================================= #define IDD_DIALOG1 200
//============================================================================= //MODAL DIALOG - Copyright (c) 2000,2005 Ken Fitlike //resource script //============================================================================= #if !defined __BORLANDC__ #include <afxres.h> #endif #include "resources.h" //============================================================================= //Resource languages: Codes for languages and sub-languages are declared in //winnt.h eg. for US english replace SUBLANG_ENGLISH_UK with SUBLANG_ENGLISH_US //eg. for FRENCH replace LANG_ENGLISH with LANG_FRENCH and then replace //SUBLANG_ENGLISH_UK with either SUBLANG_FRENCH,SUBLANG_FRENCH_BELGIAN, //SUBLANG_FRENCH_CANADIAN,SUBLANG_FRENCH_SWISS,SUBLANG_FRENCH_LUXEMBOURG, //SUBLANG_FRENCH_MONACO depending on which national or regional variation of //the language corresponds best with your requirements. // LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_UK //============================================================================= //Dialog //============================================================================= IDD_DIALOG1 DIALOGEX 0, 0, 252, 149 STYLE DS_CENTER | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME CAPTION "Dialog Box: Modal" FONT 8, "MS Sans Serif" { DEFPUSHBUTTON "OK",IDOK,22,62,50,14 PUSHBUTTON "Cancel",IDCANCEL,111,63,50,14 } //=============================================================================