首页 > Linux操作系统 > Linux操作系统 > Windows程序内部运行原理
1.输入输出设备<---->操作系统
2.操作系统<---->应用程序
3.应用程序----消息队列
句柄(资源的标识,类似于指针)
1.图标句柄(HICON)
2.光标句柄(HCURSOR)
3.窗口句柄(HWND)
4.应用程序实例句柄(HINSTANCE)
typedef struct tagMSG{
HWND hwnd; //窗口句柄
UINT message; //消息本身
WPARAM wParam; //first 消息的附加信息
LPARAM lParam; //second 消息的附加信息
DWORD time; //消息被传递出去的时间
POINT pt; //点的结构体,光标的位置
}MSG, *PMSG;
Windows程序的入口函数
int WINAPI WinMain(
HINSTANCE hInstance; //当前应用程序实例句柄
HINSTANCE hPrevInstance; //下一个应用程序实例句柄
LPSTR lpCmdLine; //命令行参数
int nCmdShow; //窗口显示的状态
){};
创建一个完整的窗口:
1.设计一个窗口类
2.注册窗口类
3.创建窗口
4.显示及更新窗口
窗口类
typedef struct _WNDCLASS{
UINT style; //窗口类型
WNDPROC lpfnWndProc; //指定了这一类型窗口的过程函数
int cbClsExtra; //窗口类的附加内存
int cbWndEXtra; //窗口的附加内存
HINSTANCE hInstance;
HICON hIcon;
HCURSOR hCursor;
HBRUSH hbrBackground; //话刷句柄
LPCTSTR lpszMenuName; //菜单的名字
LPCTSTR lpszClassName; //类的名字
}WNDCLASS, *PWNDCLASS;
WNDCLASS wndclass;
wndclass.style=CS_HREDRAW | CS_VREDRAW; //窗口水平重画和垂直重画
wndclass.lpfnWndProc=WinSunProc; //回调函数
wndclass.cbClsExtra=0;
wndclass.cbWndExtra=0;
wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION); //Windows的标准图标
wndclass.hInstance=hInstance;
wndclass.hCursor=LoadCursor(NULL,IDC_ARROW); //Windows的标准光标
wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH); //窗口背景颜色
wndclass.lpszMenuName=NULL;
wndclass.lpszClassName="maliang";
RegisterClass(&wndclass);//注册窗口类
HWND hwnd;
hwnd=CreateWindow("maliang","上海易宝软件公司(南京分公司)",WS_OVERLAPPEDWINDOW,
CW_USEDDEFAULT,NULL,NULL,hInstance,NULL);
ShowWindow(hwnd,SW_SHOWNORMAL);
UpdateWindow(hwnd);
MSG msg; //定义一个消息变量
while(GetMessage(&msg,NULL,0,0)) //从消息队列取出一条一条具体消息
{
TranslateMessage(&msg); //捕获WM_CHAR消息
DispatchMessage(&msg); //将消息路由给操作系统,操作系统调用回调函数对消息进行处理
}
return 0;
LRESULT CALLBACK WindowProc(
HWND hwnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam
)
{
HDC hdc; //设备上下文,也是一个句柄
PAINTSTRUCT ps;
switch(uMsg){
case WM_PAINT: //窗口重画
hdc=BeginPaint(hwnd,&ps);
TextOut(hdc,0,0,"上海易宝软件公司(南京分公司)",strlen("上海易宝软件公司(南京分公司)"));
EndPaint(hwnd,&ps);
break;
case WM_CHAR: //KEYDOWN or KEYUP
char szChar[20];
sprintf(szChar,"char is %d",wParam);
MessageBox(hwnd,szChar,"maliang",MB_OK);
break;
case WM_LBUTTONDOWN: //捕获鼠标左键单击
MessageBox(hwnd,"mouse click","maliang",MB_OK);
hdc=GetDC(hwnd);
TextOut(hdc,0,50,"鼠标左键单击窗口",strlen("鼠标左键单击窗口"));
ReleaseDC(hwnd,hdc);
case WM_CLOSE:
if(IDYES==MessageBpx(hwnd,"你是否退出程序?","maliang",MB_YESNO)){
DestroyWindow(hwnd);
}
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default: //必不可少的,将不感兴趣的消息交给系统进行默认处理
return DefWindowProc(hwnd,uMsg,wParam,lParam);
}
return 0;
};
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/23366483/viewspace-668846/ ,如需转载,请注明出处,否则将追究法律责任。