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