Dr.Wing

心翼的技术笔记本

  :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

1、OS同应用程序之间的联系,是通过消息机制来完成的。OS提供出各种API函数,提供给应用程序“控制”操作系统去做事情的接口。可以将操作系统比喻成一个万能的手下,而应用程序是它的主人。当有事件发生时(如用户在计算机前的输入、输出操作),然后由OS感知到这个事件(就像这个手下知晓了有事发生),然后需要OS将信息通过“回调函数”WindowProc来通知应用程序,有哪些事件发生了。(手下禀报主人有事),然后由应用程序编写好的回调函数中的代码,来决定如何处理事件。其中,应用程序是通过消息结构体,就是MSG的消息结构体,通过GetMessage()来从消息队列中取得消息

 

本章代码详细分析如下

①、代码部分

 1 #include <Windows.h>
2 #include <stdio.h>
3
4 LRESULT CALLBACK WindowProc( //这里是窗口回调函数,前置声明了。注意声明要有分号
5 HWND hwnd,
6 UINT uMsg,
7 WPARAM wParam,
8 LPARAM lParam
9 );
10
11 int WINAPI WinMain( //这里是WinMain函数,注意所有的函数都在这里面写好,这可是Main函数哦!
12 HINSTANCE hInstance,
13 HINSTANCE hPrevInstance,
14 LPSTR lpCmdLine,
15 int nCmdShow
16 )
17 {
18 WNDCLASS mywin; //窗口过程函数,像填空一样,把这个结构体填写好,设计好这个窗体
19 mywin.cbClsExtra=0;
20 mywin.cbWndExtra=0;
21 mywin.hbrBackground=(HBRUSH)GetStockObject(GRAY_BRUSH);
22 mywin.hCursor=LoadCursor(NULL,IDC_HAND);
23 mywin.hIcon=LoadIcon(NULL,IDI_ERROR);
24 mywin.hInstance=hInstance;
25 mywin.lpfnWndProc=WindowProc;
26 mywin.lpszClassName="self_1";
27 mywin.lpszMenuName=NULL;
28 mywin.style=CS_VREDRAW | CS_HREDRAW;
29
30 RegisterClass(&mywin); //设计完以后,要注册,就好像我们设计好汽车了,要注册准备批量生产了
31
32 HWND hwnd; //定义一个窗体句柄HWND,然后用下面的CreateWindow()函数来“生产”了
33 hwnd=CreateWindow("self_1","my window",WS_OVERLAPPEDWINDOW,100,200,300,400,NULL,NULL,hInstance,NULL);
34
35 ShowWindow(hwnd,SW_SHOWNORMAL); //生产完以后,要推出产品,就是要Show出去
36 UpdateWindow(hwnd); //然后就是更新窗体了
37
38 MSG msg; //下面几行是消息结构体的循环
39 //BOOL flag;
40
41 while((/*flag=*/GetMessage(&msg,NULL,0,0)/*)!=0*/)) //注意这个消息处理函数,为什么参数要NULL
42 {
43 //if(-1==flag)
44 //{
45 // return -1;
46 //}
47 //else
48 //{
49 TranslateMessage(&msg);
50 DispatchMessage(&msg);
51 //}
52 }
53 return0;
54 }
55
56 LRESULT CALLBACK WindowProc( //这里便是窗口回调函数的实现部分了
57 HWND hwnd, // handle to window
58 UINT uMsg, // message identifier
59 WPARAM wParam, // first message parameter
60 LPARAM lParam // second message parameter
61 )
62 {
63 switch (uMsg) //用switch开关来处理各种消息
64 {
65 case WM_CHAR:
66 char szChar[20];
67 sprintf(szChar,"char code is: %d",wParam); //要掌握这个sprinft()函数的用法,注意字符数组的地址就是szChar
68 MessageBox(NULL,szChar,"按键ASCII值",0);
69 break;
70 case WM_CLOSE:
71 if(IDYES==MessageBox(hwnd,"是否要关闭","确认",MB_YESNO))
72 {
73 DestroyWindow(hwnd);
74 }
75 break;
76 case WM_DESTROY:
77 PostQuitMessage(wParam); //PostQuitMessage()函数的参数指明要wParam
78 break;
79 default: //注意!!!一定要写上这个default的处理,否则窗体不会显示!
80 return DefWindowProc(hwnd,uMsg,wParam,lParam);
81 }
82 return0;
83 }

 

2、总体结构是两个函数

①、Main()函数,这个函数要写绝大多数东西进去

②、窗口回调函数

posted on 2011-07-01 15:25  心翼  阅读(298)  评论(0编辑  收藏  举报