Диалог как главное окно приложения WinAPI создание диалогового окна HANDLE_MSG DialogBox | Блог программиста C# .Net, C++

dialogwinapi-3840080

Сегодня я хотел бы привести пример создания модального диалога, как главного окна приложения, на WinAPI.

Конечно описывать всё нет смысла(это можно прочитать в книгах по WinAPI), но всё же основные принципы и код выложу.

Итак, для создания диалогового окна и работе с ним нужно выполнить следующую последовательность действий: 1. Определение шаблона диалогового окна. 2. Определение диалоговой процедуры. 3. Вызов функции создания диалогового окна.

4. Обмен данными между диалоговой процедурой и вызывающей функцией окна.

Определяем шаблон, в файле ресурсов. Добавим кнопку и Static Text, который заполним при инициализации диалога.

//res.rc
#include 
#include 
#include "main.h"
 
DIALOGS DIALOGEX 100, 100, 236, 46
STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Заголовок"
FONT 8, "MS Sans Serif", 0, 0, 0x0
BEGIN
LTEXT           "", IDC_STATIC,6,6,218,8
PUSHBUTTON      "Закрыть",IDCANCEL,180,26,50,14
END

Далее создадим файл, содержащий: — Главную функцию программы, которая и вызовет функцию создания диалога. — Оконную процедуру диалогового окна. — Функцию обработки сообщений об инициализации диалога.

— Функцию обработки сообщений от элементов управления.

//main.cpp:
#include 
#include 
#include "main.h"
 
/*Главная функция WinMain*/
int WINAPI WinMain(HINSTANCE hInst, HINSTANCE, LPSTR, int)
{ DialogBox(hInst, "Dialogs", NULL, DlgProc); //Создание диалогового окна return 0;
}
 
/*Оконная процедура диалогового окна*/
BOOL CALLBACK DlgProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{ switch(msg) { HANDLE_MSG(hwnd, WM_INITDIALOG, DlgOnInitDialog); HANDLE_MSG(hwnd, WM_COMMAND, DlgOnCommand); default: return FALSE; }
}
 
/*Функция обработки сообщений об инициализации диалога*/
BOOL DlgOnInitDialog(HWND hwnd, HWND, LPARAM)
{ SetWindowText(GetDlgItem(hwnd, IDC_STATIC), "Инициализация диалога"); return TRUE;
}
 
/*Функция обработки сообщений от элементов управления*/
void DlgOnCommand(HWND hwnd, int id, HWND, UINT)
{ switch(id) { case IDCANCEL: EndDialog(hwnd,0); }
}

Кстати, нам нужно определить константу IDC_STATIC для текста.

//main.h
#define IDC_STATIC 100
 
BOOL CALLBACK DlgProc(HWND, UINT, WPARAM, LPARAM);
void DlgOnCommand(HWND, int, HWND, UINT);
BOOL DlgOnInitDialog(HWND, HWND, LPARAM);

Возможно вам покажется интересным макрос HANDLE_MSG, про него подробно написано в книжке Win32. Основы программирования(К.Г. Финогенов). Да и вообще в этой книжке можно более подробно почитать про создания диалоговых окон, да и не только.

Исходный код:  Диалоговое окно на WinAPI (1.3 Кб, 934 скачиваний)

Пост написан при поддержке:
pereezd-5677106

google_bmarks-9794801 bobrdobr-3042106 delicious-4871899 technorati-2062348 linkstore-9632732 news2-ru-2714934 rumark-1221535 memori-4355766 moemesto-5225657 Что можно ещё почитать:

Запись опубликована в рубрике Без рубрики. Добавьте в закладки постоянную ссылку.