1 #include<tchar.h> 2 #include"WindowProc.h" 3 #include"Constants.h" 4 #include"MenuBar.h" 5 6 7 void MyOpenFile(HWND hWnd, HDC hDc); 8 9 /* 10 主窗口回调函数:接收Windows发过来的各种消息并处理这些消息 11 用户对窗口的输入以消息的形式传递给窗口,而窗口也借助于消息来与其他窗口进行通信。 12 13 例如用户调整窗口的尺寸时,Windows便向应用程序发送一条带新窗口尺寸相关信息的消息, 14 接着应用程序对自身的内容进行调整以反映出窗口尺寸的变化。 15 16 Windows是一个消息驱动的操作系统,它使用两种方式把各种事件通知给应用程序: 17 1、把消息放到应用程序的消息队列里 18 2、向窗口过程直接发送消息(Windows调用该窗口过程函数) 19 20 应用程序有很多窗口,每一个窗口都有一个与之相关联的窗口过程函数,这个窗口过程可以是 21 应用程序中的某一个函数,也可以位于一个动态链接库中。Windows是通过调用该窗口过程来向窗口传递 22 消息,窗口过程根据这些消息作出相应的处理,然后将控制权返还给Windows。 23 24 当应用程序开始执行时,Windows首先为该程序创建一个消息队列,该消息队列中存放着应用程序可能创建的所有 25 窗口的消息。 26 27 应用程序中一般都会包含一小段称为消息循环的代码,该代码用于从消息队列中检索消息,并将其分发给相应的 28 窗口过程,不在消息队列的消息不经过消息队列直接发送给窗口过程。 29 30 */ 31 32 33 34 LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) 35 { 36 /******************************************************************************************************* 37 设备环境(DC): 38 39 在Windows中,一切能在显示器上看到的都是图形,不但包括点,线,矩形,圆等,也包括文字,字体。 40 对用户来说文字和图片是不同的,但对计算机来说其本质都是图形,都需要在显示器上画出来。这就是 41 Windows被称为图形操作系统的原因。 42 43 Windows不允许我们直接访问硬件,如硬盘,显示器,打印机,键盘等,在使用这些硬件通信前要获得 44 设备环境(Device Context,简称DC),间接访问硬件。 45 46 所谓设备环境,就是与当前硬件设备有关的各种信息,他是硬件设备的抽象,也就是说,设备环境就代表 47 当前的硬件。 48 49 与文字输出,图形绘制有关的函数,在使用时大都需要传入一个参数,就是设备环境句柄。获取设备环境 50 句柄有多种方式,常用的就是BeginPaint和EndPaint函数。 51 52 比如:当产生WM_PAINT消息时,应用程序开始绘图。在绘图之前要先调用BeginPaint函数通知Windows,告诉他当 53 前程序需要使用显示器,你安排一下吧。BeginPaint函数执行完毕就返回显示器设备句柄,接下来就可以 54 使用GDI函数绘图了。 55 56 绘图结束后,也需要调用EndPaint函数通知Windows,告诉它我绘图完成了,不需要再占用显示器了,你可以 57 收回。 58 ********************************************************************************************************/ 59 60 61 HDC hDC; 62 PAINTSTRUCT ps; 63 64 hDC = GetDC(hWnd); 65 66 switch (message) 67 { 68 69 //////////////////////////////////////////////窗口创建时相关操作 70 case WM_CREATE: 71 { 72 HMENU hMenu = CreateMenuBar(); 73 SetMenu(hWnd, hMenu); //以上只是创建了菜单,需要设置,给hWnd窗口设置hMenu 74 } 75 return 0; 76 77 //////////////////////////////////////////////鼠标右键单击相关操作 78 case WM_RBUTTONUP: 79 { 80 POINT point; 81 point.x = LOWORD(lParam); 82 point.y = HIWORD(lParam); 83 ClientToScreen(hWnd, &point); //这里的坐标是相对于屏幕的,需要转换为客户坐标 84 HMENU hSubMenu = GetSubMenu(GetMenu(hWnd), 0); //获取菜单的第0个子菜单,用这个菜单来演示弹出菜单 85 TrackPopupMenu(hSubMenu, TPM_RIGHTBUTTON, point.x, point.y, 0, hWnd, NULL); 86 } 87 return 0; 88 89 //////////////////////////////////////////////窗口菜单相关操作 90 case WM_COMMAND: 91 { 92 93 switch (LOWORD(wParam)) 94 { 95 ////////////////////新建文件 96 case IDM_FILE_NEW: 97 { 98 MyOpenFile(hWnd, hDC); 99 break; 100 } 101 102 ////////////////////保存文件 103 case IDM_FILE_SAVE: 104 { 105 MessageBox(hWnd, TEXT("您点击了保存文件菜单"), TEXT("提示"), MB_OK); 106 break; 107 } 108 109 ///////////////////默认操作 110 default: 111 { 112 break; 113 return 0; 114 } 115 116 } 117 118 119 } 120 121 //////////////////////////////////////////////客户区重绘相关操作 122 case WM_PAINT: 123 { 124 hDC = BeginPaint(hWnd, &ps); 125 126 EndPaint(hWnd, &ps); 127 128 return 0; 129 } 130 131 //////////////////////////////////////////////窗口销毁相关操作 132 case WM_DESTROY: 133 { 134 PostQuitMessage(0); 135 return 0; 136 } 137 138 } 139 140 //////////////////////////////////////////////返回默认窗口过程函数 141 return DefWindowProc(hWnd, message, wParam, lParam); 142 143 144 }
Windows程序设计(第五版) 一
猜你喜欢
转载自www.cnblogs.com/mytcm/p/9493354.html
今日推荐
周排行