MFC创建窗口时的问题

jidushan12 2010-07-21 11:02:00
最近在学习使用MFC,想要创建一个窗口,结果运行以后不显示窗口,但是任务管理器中有这个程序。。。。我好郁闷啊,不知道哪的问题,哪位大哥帮忙找一下啊,谢谢了。代码如下: (只有一个cpp文件,用的是VC7.1中文版,建立的是个空项目,往里面添加的cpp文件)

#include <windows.h>
#include <stdio.h>

LRESULT CALLBACK WinSunProc(
HWND hwnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam
);



int WINAPI WinMain(
HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nShowCmd
)
{
WNDCLASS wndclass;
wndclass.cbClsExtra = 0;
wndclass.cbWndExtra = 0;
wndclass.hbrBackground=(HBRUSH)(GetStockObject(BLACK_BRUSH));
wndclass.hCursor = LoadCursor(NULL ,IDC_CROSS);
wndclass.hIcon = LoadIcon(NULL ,IDI_ERROR);
wndclass.hInstance = hInstance;
wndclass.lpfnWndProc = WinSunProc;
wndclass.lpszClassName = "My window";
wndclass.lpszMenuName=NULL;
wndclass.style = CS_HREDRAW | CS_VREDRAW;
RegisterClass(&wndclass);

HWND hWnd;
hWnd = CreateWindow("My window" ,"my MFC" , WS_OVERLAPPEDWINDOW | WS_VISIBLE,
0 ,0 ,600 ,400 ,NULL ,NULL ,hInstance ,NULL);

ShowWindow(hWnd ,SW_SHOWNORMAL);
UpdateWindow(hWnd);

MSG msg;
while (GetMessageA(&msg ,NULL ,0 ,0))
{
TranslateMessage(&msg);
DispatchMessageA(&msg);
}

return 0;
}


LRESULT CALLBACK WinSunProc(
HWND hwnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam
)
{
switch (uMsg)
{
case WM_PAINT:
HDC hdc;
PAINTSTRUCT ps;
hdc = BeginPaint(hwnd ,&ps);
TextOut(hdc ,0 ,50 ,"wm_paint !!" ,strlen("wm_paint !!"));
EndPaint(hwnd ,&ps);
break;
case WM_CHAR:
char szChar[20];
sprintf(szChar ,"char is %d !!" ,wParam);
MessageBox(hwnd ,szChar ,"WM_CHAR" ,0);
break;
case WM_CLOSE:
if (IDYES == MessageBox(hwnd ,"是否真的结束 !!" ,"close" ,0))
{
//SendMessage(HWND ,WM_DESTROY ,wParam ,lParam);
DestroyWindow(hwnd);
}
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
case WM_LBUTTONDOWN:
MessageBox(hwnd ,"mouse clicked !!" ,"WM_LBUTTONDOWN" ,0);
HDC hDc;
hDc = GetDC(hwnd);
TextOut(hDc ,0 ,0 ,"wm_lbuttondown" ,strlen("wm_lbuttondown"));
ReleaseDC(hwnd ,hDc);
break;
default:
DefWindowProc(hwnd ,uMsg ,wParam ,lParam);
break;
}
return 0;
}
...全文
140 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Eleven 2010-07-21
  • 打赏
  • 举报
回复
default:
DefWindowProc(hwnd ,uMsg ,wParam ,lParam);
break;
}
return 0;
-->
default:
break;
}
return ::DefWindowProc(hwnd ,uMsg ,wParam ,lParam);
MFC_ipsu 2010-07-21
  • 打赏
  • 举报
回复
你的窗口过过程函数书写不对:请这样写
switch(iMsg)
{
case WM_CREATE:
return 0;
case WM_PAINT:
return 0;
case WM_DESTROY:
return 0;
}
return DefWindowProc(hwnd,iMsg,wParam,lParam);你要将默认的DefWindowProc放在外面就好,你错就错到这个地方,它要对默认的消息进行处理。
gold_water 2010-07-21
  • 打赏
  • 举报
回复
看起来这些代码非常类似于SDK整个过程,你可以换个编译环境试下,比如VC6.0
偶像罗斯福 2010-07-21
  • 打赏
  • 举报
回复
alt+F7->将所有console改为windows
jidushan12 2010-07-21
  • 打赏
  • 举报
回复
谢谢最下面的两位了 我把分给你们

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧