25.08.2009, 11:21
общий
это ответ
Здравствуйте, AkaProc.
Ваша программа написана на чистом WinAPI, поэтому и ответ на WinAPI.
Необходимые изменения в Вашей программе смотрите в приложении.
Добавлю только, что кроме создания органов управления "ручками" (как в этой программе),
можно создать диалог по заранее описанному шаблону диалога в ресурсах.
Приложение:
#include <windows.h>
//Зададит идентификатор кнопки
#define IDC_BUTTON 100
//Здесь будем хранить код экземпляра программы
HINSTANCE hInst;
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM);
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
{
HWND hwnd;
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 = hInst = hInstance; // сохраним код экземпляра программы в hInst !!!!!!!!!!!!!!
wndclass.hIcon = LoadIcon (NULL, IDI_WINLOGO);
wndclass.hCursor = LoadCursor (NULL, IDC_ARROW);
wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH);
wndclass.lpszMenuName = NULL;
wndclass.lpszClassName = "Window Class 1";
wndclass.hIconSm = LoadIcon (NULL, IDI_WINLOGO);
RegisterClassEx (&wndclass);
hwnd = CreateWindow ("Window Class 1", // имя класса окна
"My First Window", // заголовок окна
WS_OVERLAPPEDWINDOW, // стиль окна
CW_USEDEFAULT, // начальное положение x
CW_USEDEFAULT, // начальное положение y
CW_USEDEFAULT, // начальная ширина !!!!!!!!!!!!!!!!
CW_USEDEFAULT, // начальная высота !!!!!!!!!!!!!!!!
NULL, // ссылка на родительское окно
NULL, // ссылка на меню окна
hInstance, // ссылка на экземпляр программы
NULL); // для WndProc
ShowWindow (hwnd, iCmdShow);
UpdateWindow (hwnd);
while (GetMessage (&msg, NULL, 0, 0))
{
TranslateMessage (&msg);
DispatchMessage (&msg);
}
UnregisterClass("Window Class 1", hInstance);
return msg.wParam ;
}
LRESULT CALLBACK WndProc (HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
{
HWND hButton;
switch (iMsg)
{
case WM_CREATE:
//создадим кнопку, как окно класса button
hButton = CreateWindow ("button", // имя класса окна
"Нажми меня", // заголовок окна
BS_DEFPUSHBUTTON | WS_VISIBLE | WS_CHILD, // стиль окна кнопки
50, // x
50, // y
100, // ширина
30, // высота
hwnd, // handle родительского окна (кому будут посылаться сообщения)
(HMENU)IDC_BUTTON, // идентификатор кнопки
hInst, // ссылка на экземпляр программы
NULL); // ф-я окна не нужна для кнопки
if (hButton) //на всякий случай проверим создалась кнопка
SetFocus(hButton) ; //дадим кнопке фокус клавиатурного ввода
break;
case WM_SIZE:
break;
case WM_PAINT:
break;
case WM_COMMAND:
//нажатие на кнопку приходит, как сообщение WM_COMMAND, параметром wParam идентификатор дочернего окна (кнопки)
if (wParam == IDC_BUTTON)
{
//что-то делаем
MessageBox(hwnd, "Нажали на кнопку", "My First Window", MB_OK);
SendMessage(hwnd, WM_CLOSE, NULL, NULL); //посылаем себе команду завершения
break;
}
return 1;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc (hwnd, iMsg, wParam, lParam); //все остальные - по-умолчанию
}
return 0; //возвращаем код, говорящий, что мы отработали сообщение
}
5
Спасибо!!! Отличный ответ!
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен