Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
Гость Гость
|
Добавлено: Ср Сен 22 2004 16:27 Заголовок сообщения: Гремучий winapi |
|
|
не работает следующий код на C++:
#include <windows.h>
HINSTANCE hin;
WINAPI WinMain(HINSTANCE hinstance, HINSTANCE prepinstance, LPSTR cmdline,int showcmd)
{
hin=hinstance;
WNDCLASSEX winex;
winex.cbClsExtra=sizeof(WNDCLASSEX);
winex.lpfnWndProc=DefWindowProc;
winex.hInstance=hin;
winex.lpszClassName="exclass";
return RegisterClassEx (&winex);
HWND winhandler=CreateWindowEx
(WS_EX_OVERLAPPEDWINDOW,"exclass","first win",WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hin, NULL);
ShowWindow(winhandler,SW_SHOW);
return 0;
}
хотя запускается нормально - а вот окошка нету.
я уж совсем начинающий - сильно не пинайте. |
|
Вернуться к началу |
|
|
Sharkky
Зарегистрирован: 10.01.2004 Сообщения: 72
|
Добавлено: Ср Сен 22 2004 19:01 Заголовок сообщения: |
|
|
Я бы попробовал всунуть UpdateWindow, после ShowWindow. А ещё полезно посмотреть чему равен handler окна. |
|
Вернуться к началу |
|
|
Bad Lamer Гость
|
Добавлено: Ср Сен 22 2004 21:31 Заголовок сообщения: |
|
|
Да тут ( в коде) много чего не хватает: нет цикла обработки сообщений, нет процедуры окна... да и структура WNDCLASS не полностью заполнена (хотя конечно это не обязательно...).
А вот тут должна быть не DefWindowProc, а процедура окна:
winex.lpfnWndProc=DefWindowProc;
Вобщем привожу код минимального приложения...
#include <windows.h>
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
HINSTANCE hInst;
char szClassName[]="WindowAppClass";
/////////////////////////////////////////
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdLine, int nCmdShow)
{ MSG msg; HWND hwnd; hInst = hInstance;
WNDCLASS wc;
wc.style=wc.cbClsExtra=wc.cbWndExtra=0;
wc.lpfnWndProc=WndProc;
wc.hInstance=hInst;
wc.hIcon=LoadIcon(NULL, IDI_APPLICATION);
wc.hCursor=LoadCursor(NULL,IDC_ARROW);
wc.hbrBackground=(HBRUSH)(COLOR_APPWORKSPACE);
wc.lpszMenuName=NULL;
wc.lpszClassName=szClassName;
RegisterClass(&wc);
hwnd = CreateWindow(szClassName, "Bad Lamer's Application", WS_OVERLAPPEDWINDOW|WS_VISIBLE,250,250,350,150,0,0,hInstance,NULL);
if (!hwnd) return FALSE;
while (GetMessage(&msg,0,0,0)) DispatchMessage(&msg);
return msg.wParam;
}
///////////////////////////////////////////////////////////////////
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch (msg)
{
case WM_DESTROY:
{PostQuitMessage(0); return 0;}
}
return DefWindowProc(hwnd,msg,wParam, lParam);
} |
|
Вернуться к началу |
|
|
Гость Гость
|
Добавлено: Ср Сен 22 2004 23:41 Заголовок сообщения: |
|
|
Bad Lamer писал(а): | Да тут ( в коде) много чего не хватает: нет цикла обработки сообщений, нет процедуры окна... да и структура WNDCLASS не полностью заполнена (хотя конечно это не обязательно...).
А вот тут должна быть не DefWindowProc, а процедура окна:
winex.lpfnWndProc=DefWindowProc;
Большое спасибо за помощь! Приведенный вами код дейтвительно работает - значит буду учиться дальше..=)))
|
|
|
Вернуться к началу |
|
|
FUKS
Зарегистрирован: 14.04.2002 Сообщения: 148 Откуда: Москва
|
Добавлено: Чт Сен 23 2004 11:03 Заголовок сообщения: Re: Гремучий winapi |
|
|
Цитата: |
WINAPI WinMain(...)
{
...
return RegisterClassEx (&winex);
HWND winhandler=CreateWindowEx ...
}
хотя запускается нормально - а вот окошка нету.
я уж совсем начинающий - сильно не пинайте. |
Ну так откуда ж оно возьмётся, если return из WinMain делается ещё до создания окна . Этот кусок явно скроен из примера, где подготовительный код оформлен в виде функции, а здесь в WinMain засунут без "переваривания". |
|
Вернуться к началу |
|
|
|