Вот что-то собрал. Хотел получить простое окно (Win API in C++). Точно есть ошибки. Помогите пожалуйста исправить. Код (Text): #include "windows.h" LRESULT __stdcall WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam); int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { WNDCLASS wc; wc.style = WS_VISIBLE; wc.lpfnWndProc = WndProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hInstance; wc.hIcon = LoadIcon(NULL, IDI_APPLICATION); wc.hCursor = LoadCursor(NULL, IDC_ARROW); wc.hbrBackground = (HBRUSH)(6); wc.lpszMenuName = NULL; wc.lpszClassName = "claass"; RegisterClass(&wc); HWND hWnd = CreateWindow(L"class",L"Zagotovka", WS_OVERLAPPEDWINDOW, 150,100,500,400, NULL,NULL,hInstance,NULL); ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd); return 0; }
Ты только прототип указал. Пиши процедуру обработки обратного вызова. Вместо CALLBACK или APIENTRY пиши __stdacall это станд соглашение о вызовах
WNDCLASS wc; а в обычной стурктуру что поля для подсчета её размера что нету? Ээээээээ....... Чет не помню, влом на микрософт идти, должна быть полюбасу
Mark Также нет цикла сообщений. Вот сюда загляни: книга Петзольда на FTP. ftp://ftp.charlespetzold.com/ProgWin5 В части 03 -- простое окно: ftp://ftp.charlespetzold.com/ProgWin5/Chap03/HelloWin/HelloWin.c
------------------------------------------------------------*/ #include <windows.h> LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ; int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { static TCHAR szAppName[] = TEXT ("HelloWin") ; HWND hwnd ; MSG msg ; WNDCLASS 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 ; if (!RegisterClass (&wndclass)) { MessageBox (NULL, TEXT ("This program requires Windows NT!"), szAppName, MB_ICONERROR) ; return 0 ; } hwnd = CreateWindow (szAppName, // window class name TEXT ("The Hello Program"), // window caption WS_OVERLAPPEDWINDOW, // window style CW_USEDEFAULT, // initial x position CW_USEDEFAULT, // initial y position CW_USEDEFAULT, // initial x size CW_USEDEFAULT, // 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 message, WPARAM wParam, LPARAM lParam) { HDC hdc ; PAINTSTRUCT ps ; RECT rect ; switch (message) { case WM_CREATE: PlaySound (TEXT ("hellowin.wav"), NULL, SND_FILENAME | SND_ASYNC) ; return 0 ; case WM_PAINT: hdc = BeginPaint (hwnd, &ps) ; GetClientRect (hwnd, &rect) ; DrawText (hdc, TEXT ("Hello, Windows 98!"), -1, &rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER) ; EndPaint (hwnd, &ps) ; return 0 ; case WM_DESTROY: PostQuitMessage (0) ; return 0 ; } return DefWindowProc (hwnd, message, wParam, lParam) ; }
#include <windows.h> LRESULT __stdcall WndProc (HWND, UINT, WPARAM, LPARAM) ; int __stdcall WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { char *szAppName = "HelloWin" ; HWND hwnd ; MSG msg ; WNDCLASS 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 ; if (!RegisterClass (&wndclass)) { MessageBox (0,0,"Fuck off",0) ; return 0 ; } hwnd = CreateWindow (szAppName, // window class name "The Hello Program", // window caption WS_OVERLAPPEDWINDOW, // window style 0, // initial x position 0, // initial y position 0, // initial x size 0, // 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 message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_CREATE: MessageBeep(0); return 0 ; case WM_DESTROY: PostQuitMessage (0) ; return 0 ; } return DefWindowProc (hwnd, message, wParam, lParam) ; }
Вот, наконец собрал программу. Сделал для себя комментарии. Но подскажите, что это за действие где комментарии /* ????? */ Код (Text): #include <windows.h> HINSTANCE hInst; HWND hwnd; /* Переменные */ LRESULT CALLBACK WndProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam) { switch (msg) /* Обработчик событий*/ { case WM_DESTROY: /* Если сообщ. О выходе */ PostQuitMessage(0); /* ВЫХОДИМ */ break; default: return DefWindowProc(hwnd,msg,wParam,lParam); /* ????? */ } return 0; } BOOL InitClass(void) { WNDCLASS wc; /* Структура */ memset(&wc,0,sizeof(WNDCLASS)); /* Выделяем байты по размеру WNDCLASS */ wc.style = CS_OWNDC | CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS; /*СТИЛЬ */ wc.lpfnWndProc = (WNDPROC)WndProc; /* Процедура*/ wc.hInstance = hInst; /* ????? */ wc.hbrBackground = (HBRUSH)(30); /* ФОН */ wc.lpszClassName = "WndClass"; /* ИМЯ КЛАССА */ wc.hCursor = LoadCursor(NULL,IDC_ARROW); /* Курсор */ wc.hIcon = LoadIcon(NULL, IDI_APPLICATION); /* Иконка */ if (!RegisterClass(&wc)) return 0; /* Если ошибка сохраняем 0 */ return 1; } int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, INT nCmdShow) { MSG msg; /* Переменная для хранения событий */ hInst = hInstance; /* ???? */ if (!InitClass()) /* Если ошибка - выходим. */ { MessageBox(NULL, "Error", "Niiauaiea", 0); /* Сообщение об ошибке */ return 0; /* ВЫХОД */ } hwnd = CreateWindow("WndClass","ПРОГА WinAPI.", /* Окно */ WS_MINIMIZEBOX|WS_VISIBLE|WS_CLIPSIBLINGS|WS_CLIPCHILDREN| /* Параметры */ WS_MAXIMIZEBOX|WS_CAPTION|WS_BORDER|WS_SYSMENU|WS_THICKFRAME, CW_USEDEFAULT,0,CW_USEDEFAULT,0, NULL, /* ???? */ NULL, /* ???? */ hInst, /* ???? */ NULL); /* ???? */ ShowWindow(hwnd, SW_SHOW); /* Показываем окно */ while (GetMessage(&msg,NULL,0,0)) /*???? */ { TranslateMessage(&msg); /* ???? */ DispatchMessage(&msg); /* ???? */ } return msg.wParam; /* ???? */ }