Создание сайта, дизайн, web дизайн
Главная Работы Услуги Цены Контакты

 Главная
 Работы
 Услуги
 Цены
 Контакты
 

Поехали,,,

Диалоговые окна предназначены для организации диалога с пользователем. С помощью диалоговых окон можно быстро разработать необходимую программу. В диалоговых окнах могут быть такие элементы (дочерние окна) как: кнопки, полоски прокрутки, списки, поля редактирования и др. Сами диалоги хранятся в ресурсах приложения. У любого окна в Windows есть оконная процедура (функция обработки сообщений). У диалога тоже должна быть оконная процедура. В окне диалога могут быть различные органы управления и чтобы осуществить перемещение фокуса между этими элементами мы изменим

цикл обработки сообщений:

// Цикл обработки сообщений

while(GetMessage(&msg,0,0,0))

{

if(!IsDialogMessage(hWnd,&msg))

{

TranslateMessage(&msg);

DispatchMessage(&msg);

}

}

В цикл обработки добавилась функция IsDialogMessage(). В данном случае эта функция анализирует текущее сообщение MSG и, если сообщение содержит информацию о нажатии стандартной комбинации клавиш, служащей для перемещения фокуса между органами управления диалога, обрабатывает его.

*Замечание. Стандартная комбинация клавиш для перемещения фокуса: TAB, Shift+TAB.

В ходе выполнения функции IsDialogMessage Windows проверяет, есть ли в окне с указанным хэндлом (hWnd) оконные органы управления вообще, и если они есть, то выполняется последовательная посылка ряда сообщений им для смены текущего органа управления.

Оконная процедура диалога

Оконная процедура диалога (диалоговая процедура) похожа на оконную процедуру обычного окна, но всё же есть различия:

Оконная процедура возвращает значение типа LRESULT; а процедура диалогового окна - значение типа BOOL (определяемое в заголовочных файлах Windows как int).

Если оконная процедура не обрабатывает какое-то сообщение, она вызывает DefWindowProc; процедура диалога, если она не обрабатывает сообщение, возвращает FALSE (0), а если обрабатывает, то TRUE (ненулевое значение).

Процедура диалога не обрабатывает сообщения WM_PAINT и WM_DESTROY. Процедура диалога не получит сообщения WM_CREATE; вместо этого она вы-полняет инициализацию при обработке специального сообщения WM_INITDIALOG.

Программа написанная в этой статье будет выводить путь к директории X:\WINDOWS\SYSTEM. Вывод будет производиться в дочернее окно Edit.

Исходный текст

Файл main.cpp

#include <windows.h>

#include "resource.h"

BOOL CALLBACK DlgProc(HWND hWnd,UINT msg,

WPARAM wParam,LPARAM lParam);

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,

LPSTR lpCmdLine, int iCmdShow)

{

MSG msg;

HWND hWnd;

char str[100];

// Получаем сис директорию

GetSystemDirectory(str,100);

hWnd=CreateDialog(hInstance,(LPCTSTR)IDD_DIALOG1,0,DlgProc);

ShowWindow(hWnd,SW_SHOW);

SetWindowText(GetDlgItem(hWnd,IDC_EDIT1),(LPCTSTR)str);

UpdateWindow(hWnd);

// Цикл обработки сообщений

while(GetMessage(&msg,0,0,0))

{

if(!IsDialogMessage(hWnd,&msg))

{

TranslateMessage(&msg);

DispatchMessage(&msg);

}

}

DestroyWindow(hWnd);

return 0;

}

BOOL CALLBACK DlgProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam)

{

switch(msg)

{

case WM_COMMAND:

{

// Если была нажата какая-либо кнопка

if(HIWORD(wParam)==BN_CLICKED)

{

switch(LOWORD(wParam))

{

case IDOK:

EndDialog(hWnd,0);

PostQuitMessage(0);

return true;

case IDCANCEL:

MessageBox(NULL,"Вы нажали Cancel","Dialog",MB_OK);

return true;

}

}

return true;

}

break;

} // End of switch(msg)

return false;

}

Файл resource.h

//{{NO_DEPENDENCIES}}

// Microsoft Developer Studio generated include file.

// Used by res.rc

//

#define IDD_DIALOG1 101

#define IDC_EDIT1 1003

// Next default values for new objects

//

#ifdef APSTUDIO_INVOKED

#ifndef APSTUDIO_READONLY_SYMBOLS

#define _APS_NEXT_RESOURCE_VALUE 102

#define _APS_NEXT_COMMAND_VALUE 40001

#define _APS_NEXT_CONTROL_VALUE 1007

#define _APS_NEXT_SYMED_VALUE 101

#endif

#endif

Файл res.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

/////////////////////////////////////////////////////////////////////////////

// Russian resources

#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_RUS)

#ifdef _WIN32

LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT

#pragma code_page(1251)

#endif //_WIN32

/////////////////////////////////////////////////////////////////////////////

//

// Dialog

//

IDD_DIALOG1 DIALOG DISCARDABLE 0, 0, 269, 125

STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU

CAPTION "Dialog"

FONT 8, "MS Sans Serif"

BEGIN

DEFPUSHBUTTON "OK",IDOK,212,104,50,14

LTEXT "Системная директория:",IDC_STATIC,7,7,255,10

EDITTEXT IDC_EDIT1,7,18,255,14,ES_AUTOHSCROLL | ES_READONLY

PUSHBUTTON "Cancel",IDCANCEL,7,104,198,14

END

/////////////////////////////////////////////////////////////////////////////

//

// DESIGNINFO

//

#ifdef APSTUDIO_INVOKED

GUIDELINES DESIGNINFO DISCARDABLE

BEGIN

IDD_DIALOG1, DIALOG

BEGIN

LEFTMARGIN, 7

RIGHTMARGIN, 262

TOPMARGIN, 7

BOTTOMMARGIN, 118

END

END

#endif // APSTUDIO_INVOKED

#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

#endif // Russian resources

/////////////////////////////////////////////////////////////////////////////

#ifndef APSTUDIO_INVOKED

/////////////////////////////////////////////////////////////////////////////

//

// Generated from the TEXTINCLUDE 3 resource.

//

/////////////////////////////////////////////////////////////////////////////

#endif // not APSTUDIO_INVOKED

 

Исходник к статье (Приложение на базе диалога). Visual C 6.0.




Бардин П.Б. http://proger.ru/
Состояние воздуха:
Мониторинг загрязнения атмосферы в режиме реального времени
© 2004-2017 LABDESIGN.RU   e-mail: