这个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);

首先,你这不是一个MFC程序,这是一个SDK窗口程序,或者叫win32API窗口程序,和MFC没有一点关系。
其次,你这个程序的代码没有问题,在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

参考技术A 试试在"工程名App::InitInstance()"里的DoModal()前调用AfxEnableControlContainer();本回答被提问者采纳 参考技术B 可能控件需要初始化
AfxOleInit( );
等等,看你是什么控件了。
就像Rich Edit控件前一定要初始化AfxInitRichEdit()一样。

以上是关于这个MFC程序为啥无法显示窗口?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Xcode 显示“此时无法安装此应用程序”。弹出窗口?

vs2013中用MFC和C++创建程序后,工具箱中的控件全部显示灰色,无法拖进对话框。

在MFC里面添加个自定义控件,为啥程序自动退出,不显示窗口等待用户操作了?

MFC/VC 在多文档MDI程序中 子窗口初始最大化显示 如何去掉菜单栏右侧的最小化及向下还原按钮

为啥我无法在 CListBox 中获取所选项目? MFC

MFC无法运行的原因?我在MFC中加入了一个CWebBrowser的控件后,运行没有出错,但是点击运行是却没有弹出窗