Window编程主函数详解

来源:互联网 发布:数据库监控 开源 编辑:程序博客网 时间:2024/06/07 01:25

Windows编程中主函数是非常重要的,但是却在编写上非常简单(可能我这个初学者还不是很理解),有的时候我们。总体上可以分为这几个部分。

第一个是主函数的生命 WinMain(),这个含函数在百度上是这样定义的,这个函数是被系统调用的,是一个32位的应用程序的入口点,这个函数应初始化应用程序,显示一个主窗口,进入一个消息的接受,发送循环,这个循环是应用程序执行其余的部分的顶级的控制结构。

hInstance应用程序是当前实例的句柄

hprevInstancey应用程序先前实例的句柄,对于同一个应用程序打开两次,,出现的两个窗口第一个打开的实例也就是先前的实例。

lpCmdLine指向应用程序命令行的字符串的指针。

nCmdShow是指定窗口如何的显示。可以为这些值:

SW_HIDE:隐藏窗口并且激活另外一个窗口。

SW_MINIMIZE:最小化指定的窗口,并且激活在系统表中的顶层窗口。

SW_RESTORE:激活并显示窗口。如果窗口已经最小化或最大化,系统将以恢复到原来的尺寸和位置显示窗口(与SW_SHOWNORMAL相同)。

SW_SHOW:激活一个窗口并以原来的尺寸和位置显示窗口。

SW_SHOWMAXIMIZED:激活窗口并且将其最大化。

SW_SHOWMINIMIZED:激活窗口并将其最小化(以图标显示)。

SW_SHOWMINNOACTIVE:将一个窗口显示为图标。激活窗口维持活动状态。

SW_SHOWNA:以窗口的当前状态显示窗口。激活窗口保持活动状态。

SW_SHOWNOACTIVATE:以窗口的最近一次的尺寸和位置显示窗口。激活窗口维持激活状态。

SW_SHOWNORMAL:激活并显示窗口。如果窗口最大化或最小化,系统将其恢复到原来的尺寸和位置(与SW_RESTORE相同)。

然后我们定义一个消息的结构体:MSG Message;一个句柄HWND hWnd,和一个窗口的模板类WNDCLASS wndclass。接着我们给窗口结构体的每一个成员进行赋值。

        wndclass.cbClsExtra=0;
wndclass.cbWndExtra=0;
wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);
wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);
wndclass.hInstance=hInstance;
wndclass.lpfnWndProc=WndProc;
wndclass.lpszClassName="DlgInstance";
wndclass.lpszMenuName="Menu";
wndclass.style=0;

然后注册该窗口 RegisterClass(&wndclass).

接着我们创建一个窗口,用到的函数是CreateWindow(),并且这个函数的返回值是一个窗口的句柄,显示窗口,

ShowWindow(),刷新窗口,UpdateWindow,最后一个消息的循环,用来处理传递过来的消息

while(GetMessage(&Message,0,0,0))
{
if(!IsDialogMessage(hDlg,&Message))
{
TranslateMessage(&Message);
DispatchMessage(&Message);
}
}
return Message.wParam;

源代码:

int WINAPI WinMain(HINSTANCE hInstance,
  HINSTANCE hPrevInstance,
  LPSTR lpCmdLine,
  int nShowCmd)
{
MSG Message;
HWND hWnd;
WNDCLASS wndclass;
wndclass.cbClsExtra=0;
wndclass.cbWndExtra=0;
wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);
wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);
wndclass.hInstance=hInstance;
wndclass.lpfnWndProc=WndProc;
wndclass.lpszClassName="DlgInstance";
wndclass.lpszMenuName="Menu";
wndclass.style=0;
if(!RegisterClass(&wndclass))
{
MessageBeep(0);
return FALSE;
}
hWnd=CreateWindow("DlgInstance",
            "虚拟存储器",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
0,
CW_USEDEFAULT,
0,
NULL,
NULL,
hInstance,
NULL);
ShowWindow(hWnd,nShowCmd);
UpdateWindow(hWnd);
hInst=hInstance;
while(GetMessage(&Message,0,0,0))
{
if(!IsDialogMessage(hDlg,&Message))
{
TranslateMessage(&Message);
DispatchMessage(&Message);
}
}
return Message.wParam;
}


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 摔到了腿受伤了怎么办 骑车摔倒了肿了怎么办 生活大冒险老婆失踪了怎么办 手机qq图裂了怎么办 qq发的图裂了怎么办 抖音账号搬运多怎么办 别人搜不到我QQ怎么办 qq号被限制解封怎么办 买的桌子会晃怎么办 车子座椅皮坏了怎么办 裤子被椅子刮了怎么办 脚麻了被别人动怎么办 毛孔又粗又黑怎么办 手臂睡觉压麻了怎么办 睡觉压的胳膊麻怎么办 摔跤摔到腰肿了怎么办 牛奶喝多了拉稀怎么办 doc文档下载是乱码怎么办 家人被教练技术骗了怎么办 十个月宝宝不爱喝水怎么办 离婚后孩子找爸爸怎么办 离婚后孩子要找爸爸怎么办 断奶期间胸涨的难受怎么办 断奶胸涨的很疼怎么办 过了麦季身上老痒怎么办 过麦时候皮肤痒怎么办 颈部起红疙瘩痒怎么办 脚底痒身上痒该怎么办 生完孩子屁股疼怎么办 pr打开工程文件无响应怎么办 娃娃和老师有隔阂了怎么办 大人字写得不好怎么办 不会写好看的字怎么办 无限量流量限速了怎么办 长期化妆后皮肤变黄怎么办 手机密码忘记了打不开怎么办 手机解压包不知道密码怎么办 手机屏图标没了怎么办 b站页面卡顿怎么办 被全景视觉骗了怎么办? 逆战进去没声音怎么办