СообЧа > База Знаний > Программирование > C, С++

Вопрос

Подскажите, пожалуйста, как на С/С++ написать программу, выводящую на экран окно (например, с традиционной надписью «Hello, World!»).
Каким образом определить и зарегистрировать класс окна, создать и отобразить окно этого класса, а также запустить цикл обращений к системе и обрабатывать эти сообщения?

Ответ

Вот код. Он громоздкий, но несложный. Описание всех функий найдешь в MSDN. Тут я указал очень малую часть сообщений, за всем списком придется тоже лезть в документацию.
© Charlz Petsold (если правильно написал ;-)

//---------------------------------------------------
#include <windows.h>
//---------------------------------------------------
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
//---------------------------------------------------
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) {
static char szAppName[] = "HelloWin";
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 = hInstance;
wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
wndclass.lpszMenuName = NULL;
wndclass.lpszClassName = szAppName;
wndclass.hIconSm = LoadIcon(NULL, IDI_APPLICATION);

RegisterClassEx(&wndclass);

hwnd = CreateWindow(szAppName,
"The Hello Program",
WS_OVERLAPPED,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
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) {
HDC hdc;
PAINTSTRUCT ps;
RECT rect;

switch(iMsg) {
case WM_CREATE:
// здесь можешь вставлять код, который должен выполняться при создании окна
return(0);

case WM_PAINT:
hdc = BeginPaint(hwnd, &ps);
GetClientRect(hwnd, &rect);
DrawText(hdc, "Hello, Windows 95!", -1, &rect, DT_SINGLELINE |
DT_CENTER | DT_VCENTER);
EndPaint(hwnd, &ps);
return(0);

case WM_LBUTTONDOWN:
//код, выполняемый при клике левой кнопкой мыши
return(0);

case WM_DESTROY:
//код, выполняемый при удалении окна
PostQuitMessage(0);
return(0);
}

return(DefWindowProc(hwnd, iMsg, wParam, lParam));
}



Copyright © 2000-2004 Сообщество Чайников
Контактная информация