这个MFC程序为啥无法显示窗口?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了这个MFC程序为啥无法显示窗口?相关的知识,希望对你有一定的参考价值。
以下是一个用来显示一个窗口的MFC程序,编译什么的都没有问题,运行后任务管理器中也显示有这个进程,但是没有显示出窗口,请问是什么原因?
#include<windows.h>
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
WNDCLASS wndclass;
HWND hwnd;
MSG msg;
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="test";
if(!RegisterClass(&wndclass))return FALSE;
hwnd=CreateWindow(
"test",
"test",
WS_OVERLAPPEDWINDOW,
0,0,100,200,
NULL,
NULL,
hInstance,
NULL);
ShowWindow(hwnd,nCmdShow);
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_PAINT:
HDC hdc;
PAINTSTRUCT ps;
hdc=BeginPaint(hwnd,&ps);
TextOut(hdc,0,0,"hahaha",100);
EndPaint(hwnd,&ps);
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
return DefWindowProc(hwnd,message,wParam,lParam);
其次,你这个程序的代码没有问题,在VC6多字节字符集方式下可以运行成功并显示一个窗口。追问
谢谢指教!我是一个初学者。
请问您说的“在VC6多字节字符集方式下可以运行成功并显示一个窗口”是什么意思呢?我使用的是VisualC++6.0,为什么显示不出来?有什么解决方法吗?
谢谢!
也就是说,代码是没有问题的,有问题的,要么是你的系统,要么是VC6的配置或工程配置。
因为没有更多信息,无法判别具体问题,建议你将工程放到其它机器上执行或者建立新的工程试试。
谢谢 我刚试了一下 发现我以上的程序确实没有问题 但是如果把窗口名称改成其它的好像就不行了……
追答修改窗口名注意不能改class名,class名在代码中两个地方要一致。
参考技术A 试一试添加窗口可见的风格。追问怎么做呢?
追答wndclass.style=WS_OVERLAPPEDWINDOW|WS_VISIBLE
参考技术B 说要改变窗口标题?我给函数便:SetTitle(标题);(引号内内容自想加入标题)行追问
谢谢 函数使用格式看不太懂 能写清楚一些吗
在MFC里面添加个自定义控件,为啥程序自动退出,不显示窗口等待用户操作了?
就是向导创建一个MFC对话框程序,添加一个custom cortorl,其他什么也不做,程序就自动退出了。
在网上折腾了一天,还是我自己来回答了。自定义控件要和控件类绑定,控件类要继承Win类或其他控件类。控件类要完成自己的注册,在控件属性上要填入注册的控件名称,控件还要响应需要的windows消息函数。参考http://www.codeproject.com/KB/static/CustomControl.aspx
AfxOleInit( );
等等,看你是什么控件了。
就像Rich Edit控件前一定要初始化AfxInitRichEdit()一样。
以上是关于这个MFC程序为啥无法显示窗口?的主要内容,如果未能解决你的问题,请参考以下文章
为啥 Xcode 显示“此时无法安装此应用程序”。弹出窗口?
vs2013中用MFC和C++创建程序后,工具箱中的控件全部显示灰色,无法拖进对话框。
在MFC里面添加个自定义控件,为啥程序自动退出,不显示窗口等待用户操作了?