PDA

View Full Version : عدم نمایش فرم



mostafa_cpp
چهارشنبه 10 اسفند 1384, 09:52 صبح
سلام

چرا کد زیر باعث پنجره رو نشون نمیده ؟


#include <windows.h>


int WINAPI WinMain (HINSTANCE hInstance,HINSTANCE hPrevInstance,PSTR cmdline,int showcmd)
{
WNDCLASS wc;
wc.cbClsExtra =0;
wc.cbWndExtra =0;
wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
wc.hInstance =hInstance;
wc.lpszClassName ="mywindow";
wc.lpszMenuName =0;
wc.style =CS_VREDRAW | CS_HREDRAW;
RegisterClass(&wc);

HWND hwnd=0;

hwnd=CreateWindow("mywindow","my own first window ",WS_EX_TOPMOST ,0,0,640,480,
0,0,hInstance,0);
ShowWindow(hwnd,SW_SHOW);
UpdateWindow(hwnd);

return 0;

}

C++Lover
پنج شنبه 11 اسفند 1384, 06:18 صبح
اگر کل تابع WinMain شما همین است پنجره درست می شود اما برنامه به سرعت خاتمه می یابد. به خاطر داشته باشید که تابع winmain نقطه ورودی thread اصلی برنامه است.
باید یک حلقه پیام (message loop) در این thread تشکیل دهید تا پنجره های درست شده در این thread بتوانند پیامهای مربوطه را دریافت کنند.
این کد را به انتهای تابع WinMain تان اضافه کنید


MSG msg;
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}

return (int) msg.wParam;

C++Lover
پنج شنبه 11 اسفند 1384, 06:24 صبح
در ضمن من تازه متوجه شدم که اصلا برای کلاس پنجره window procedure تعریف نکرده اید.
این خط را هم اضافه کنید.


wc.lpfnWndProc = WndProc;


این تابع را هم اضافه کنید.


LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
PAINTSTRUCT ps;
switch (message)
{
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
EndPaint(hWnd, &ps);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}

mostafa_cpp
پنج شنبه 11 اسفند 1384, 19:26 عصر
ممنون دوست من