Window编程主函数详解

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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值