Есть стандартный код win32 минимального win32 приложения.
| Код | #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; HINSTANCE hInst = hInstance;
wndclass.cbSize = sizeof(wndclass); wndclass.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC; 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)COLOR_WINDOW; //(HBRUSH) GetStockObject(WHITE_BRUSH); wndclass.lpszMenuName = NULL; wndclass.lpszClassName = szAppName; wndclass.hIconSm = LoadIcon(NULL, IDI_APPLICATION); RegisterClassEx(&wndclass); hwnd = CreateWindow( szAppName, // window class name "The Hello Program", // window caption WS_OVERLAPPEDWINDOW ^ WS_THICKFRAME ^WS_MAXIMIZEBOX, // window style CW_USEDEFAULT, // initial x position CW_USEDEFAULT, // initial y position 500, // initial x size 410, // initial y size NULL, // parent window handle NULL, // window menu handle hInstance, // program instance handle NULL ); // creation parameters 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; static HWND hwndBut1, hwndList, hwndStat;
switch(iMsg) { case WM_CREATE: hwndBut1 = CreateWindow("button", "Test", WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON, 10, 10, 50, 25, hwnd, NULL, ((LPCREATESTRUCT) lParam) -> hInstance, NULL); hwndList = CreateWindow("listbox", "", WS_CHILD|WS_VISIBLE|LBS_STANDARD^WS_VSCROLL|LBS_MULTIPLESEL, 70, 40, 420, 350, hwnd, NULL, ((LPCREATESTRUCT) lParam) -> hInstance, NULL); hwndStat = CreateWindow("static", "Searching files in catalog C:", WS_CHILD|WS_VISIBLE|SS_LEFTNOWORDWRAP, 70, 10, 230, 20, hwnd, NULL, ((LPCREATESTRUCT) lParam) -> hInstance, NULL); return 0;
case WM_PAINT: hdc = BeginPaint(hwnd, &ps); GetClientRect(hwnd, &rect); EndPaint(hwnd, &ps); return 0;
case WM_DESTROY: PostQuitMessage(0); return 0;
} return DefWindowProc(hwnd, iMsg, wParam, lParam); }
|
Как можно это все запихнуть в свой объект? Если сделать класс WinClass и объявить вышеуказанные процедуры, как public методы, то компилятор начинает ругаться на переменные:
HWND hwnd; MSG msg; WNDCLASSEX wndclass; HINSTANCE hInst = hInstance;
даже если я их выношу из методов и делаю public членами класса. Может я не правильно описываю класс? Я хочу сделать окно именно так - своими руками по Ч. Петзольду (и иже с ними), но при этом хочу стройности ООП. Помогите, пожалуйста, только по существу, а не философией на тему "пользуй мэфээс, нах нуна" и т.д. |