简单的WINDOWS程序问题 为啥没有显示窗口? CREATEWINDOW的第一个参数“已注册的窗口类名”该写啥啊?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了简单的WINDOWS程序问题 为啥没有显示窗口? CREATEWINDOW的第一个参数“已注册的窗口类名”该写啥啊?相关的知识,希望对你有一定的参考价值。

#include<stdio.h>
#include<windows.h>
int WINAPI WinMain(HINSTANCE A,HINSTANCE B,LPSTR C,INT M)

HWND hwnd = FindWindow(NULL,"百度一下,你就知道");
if(hwnd==NULL)

printf("error");
exit(0);

SendMessage(hwnd,WM_CLOSE,0,0);//关闭 向它发送窗口结束消息
WNDCLASSEX MM;
RegisterClassEx(&MM);
HWND FF;
FF=CreateWindow("MM","xx",WS_BORDER,1,1,2,4,NULL,NULL,NULL,NULL);
ShowWindow(FF,SW_MAXIMIZE);
return 0;
还有ATOM什么数据类型呢??还有就是我看有的函数可以省略一部分参数,这是为什么呢?

要填充MM结构体才能正确的注册啊
给你1个完整的WinMain函数
#include <windows.h>
#include <tchar.h>
//程序入口函数
int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)

MSG msg;//消息结构体

//注册窗口类
WNDCLASS wndclass;
wndclass.style=CS_HREDRAW|CS_VREDRAW;
wndclass.lpfnWndProc=(WNDPROC)WndProc;//窗口的消息处理函数
wndclass.cbClsExtra=0;
wndclass.cbWndExtra=0;
wndclass.hInstance=hInstance;
wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION); wndclass.hCursor=LoadCursor(NULL,IDC_CROSS);
wndclass.hbrBackground=(HBRUSH)(COLOR_WINDOW+1);
wndclass.lpszMenuName=NULL;
wndclass.lpszClassName=TEXT("javanetwork");//类名
if(!RegisterClass(&wndclass))

MessageBox(NULL,TEXT("程序要求在Windows NT下运行!"),TEXT("ERROR!"),MB_ICONERROR);
return 0;


//创建和显示窗口
HWND hwnd;

//参数:类名-窗口标题-窗口样式-x-y-width-height-父窗口-菜单ID-实例句柄-CREATESTURCT指针
hwnd=CreateWindow(TEXT("javanetwork"),TEXT("未命名"),WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,250,400,NULL,NULL,hInstance,NULL);

if (!hwnd)

return FALSE;

ShowWindow(hwnd,nCmdShow);
UpdateWindow(hwnd);

//消息循环
while (1)

if(PeekMessage(&msg,NULL,0,0,PM_REMOVE))//第二个参数不能为NULL,否则关闭窗口无法正常退出

if(msg.message==WM_QUIT)

break;

TranslateMessage(&msg);
DispatchMessage(&msg);

else

//空闲时间,做其他事情


return msg.wParam;
追问

wndclass.lpfnWndProc=(WNDPROC)WndProc;//窗口的消息处理函数
你这行是不是错了?
还有我不弄消息机制,就为了显示个窗口行不?

追答

我是从我的模板上拷过来的,你要自己定义消息处理函数WndProc。
因为CreateWindow的时候就产生了WM_CREATE消息了,肯定要有消息循环,必须指定消息处理函数,消息处理函数可以只是简单的一行return DefWindowProc();。
//回调函数,处理"javanetwork"类名创建的窗口的消息
LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)

return DefWindowProc(hwnd,message,wParam,lParam);//调用系统定义的缺省的消息处理函数

追问

饿,有了
好神奇啊。。。
谢谢啊,真是非常感谢,为这个郁闷两天了。。

参考技术A 你没注册窗口类,所以创建窗口失败了
atom就是int类型
省略参数是有默认值的函数追问

我不是有个RegisterClassex和WNDCLASSEX吗?

参考技术B 最后,控件没有自己独立的菜单,第九个参数应该是 NULL,即使要指定菜单,第创建后要显示才行。CreateWindow Showwindow 为什么应用程序创建窗口时,即追问

啥?

以上是关于简单的WINDOWS程序问题 为啥没有显示窗口? CREATEWINDOW的第一个参数“已注册的窗口类名”该写啥啊?的主要内容,如果未能解决你的问题,请参考以下文章

为啥任务管理器的进程条不见了?

为啥输入mvn后仍提示不是内部命令

为啥 PyGame 在延迟或睡眠之前没有在窗口中绘制?

从 Windows 服务启动 GUI 应用程序 - 窗口不出现

显示窗口服务的弹出窗口

electron 在windows下窗口为啥不能拖动