区别:
DOS应用程序,按照函数顺序进行
Windows程序执行,按照事件发生顺序执行
执行顺序:
事件发生->对应的消息标识发送到消息队列->应用程序取出消息标识->相应处理消息响应
Windows编程方法:
1.API函数
2.MFC类函数库,对API进行加工组合,包装,方便使用
Windows应用程序结构
两大部分:
主函数 winMain():作用:建立窗口(创建,注册,显示)建立消息队列
窗口过程函数 WndProc():作用:窗口消息处理函数
结构
WinMain()
{
定义窗口类;
注册窗口类;
创建窗口类;
显示窗口类;
建立消息循环;
}
WndProc()
{
消息处理;
}
附注程序:
#include <windows.h>
#include <stdio.h>
//预定义回调函数
LRESULT CALLBACK wndproc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam);
//入口函数
int WINAPI WinMain(
//H开头表示句柄
HINSTANCE hInstance,//当前应用程序实例句柄
HINSTANCE hPreInstance,//前一个应用程序实例句柄
//LP开头表示指针
LPSTR lpCmdLine,//指向程序命令行参数的指针
int nCmdShow//窗口的初始状态
)
{
HWND hwnd;
MSG msg;
//define the window class
WNDCLASS wndclass;
//窗口式样
wndclass.style=0;
//指向窗口处理函数的指针,即为指向WndProc的指针
wndclass.lpfnWndProc=wndproc;
//窗口类结构分配的额外字节数
wndclass.cbClsExtra=0;
//本窗口类建立的窗口结构分配的额外字节数
wndclass.cbWndExtra=0;
//本窗口类的应用程序实例
wndclass.hInstance=hInstance;
//窗口类最小化时的图标
wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);
//窗口类的光标
wndclass.hCursor=LoadIcon(NULL,IDI_HAND);
//窗口式样窗口类的背景颜色
wndclass.hbrBackground=(HBRUSH)GetStockObject(BLACK_BRUSH);
//窗口类的资源菜单
wndclass.lpszMenuName=NULL;
//窗口类名
wndclass.lpszClassName="weixin";
//Register CLASS
if(!RegisterClass(&wndclass))
{
MessageBeep(0);
return false;
}
//Create the window
hwnd=CreateWindow(
wndclass.lpszClassName,
"hello window",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
NULL,
hInstance,
NULL);
//show window
ShowWindow(hwnd,SW_SHOWNORMAL);
//update window
UpdateWindow(hwnd);
//receive message
while(GetMessage(&msg,hwnd,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
LRESULT CALLBACK wndproc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam)
{
switch(msg)
{
case WM_LBUTTONDOWN:
MessageBox(hwnd,"left button down","tips",MB_OK); break;
case WM_RBUTTONDOWN:
MessageBox(hwnd,"Right button down","tips",MB_OK); break;
case WM_DESTROY:
PostQuitMessage(0); break;
default:
return DefWindowProc(hwnd,msg,wParam,lParam);
}
return 0;
}