windows程序设计--鼠标消息---程序击中测试
来源:互联网 发布:淘宝网棉被单人多少钱 编辑:程序博客网 时间:2024/05/16 08:58
Windows程序设计 第五版 Charles PetZold
P232
/*------------------------------------------------- CHECKER1.C -- Mouse Hit-Test Demo Program No. 1 (c) Charles Petzold, 1998 -------------------------------------------------*/#include <windows.h>#define DIVISIONS 5int flag =0;//测试看看InvalidateRect怎么工作的.LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow){ static TCHAR szAppName[] = TEXT ("Checker1") ; HWND hwnd ; MSG msg ; WNDCLASS wndclass ; wndclass.style = CS_HREDRAW | CS_VREDRAW ; wndclass.lpfnWndProc = WndProc ; wndclass.cbClsExtra = 0 ; wndclass.cbWndExtra = 0 ; wndclass.hInstance = hInstance ; wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ; wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ; wndclass.hbrBackground = (HBRUSH) GetStockObject (GRAY_BRUSH); wndclass.lpszMenuName = NULL ; wndclass.lpszClassName = szAppName ; if (!RegisterClass (&wndclass)) { MessageBox (NULL, TEXT ("Program requires Windows NT!"), szAppName, MB_ICONERROR) ; return 0 ; } hwnd = CreateWindow (szAppName, TEXT ("Checker1 Mouse Hit-Test Demo"), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL) ; ShowWindow (hwnd, iCmdShow) ; UpdateWindow (hwnd) ; while (GetMessage (&msg, NULL, 0, 0)) { TranslateMessage (&msg) ; DispatchMessage (&msg) ; } return msg.wParam ;}LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam){ static BOOL fState[DIVISIONS][DIVISIONS] ; static int cxBlock, cyBlock ; HDC hdc ; int x, y ; PAINTSTRUCT ps ; RECT rect ; switch (message) { case WM_SIZE : //在WM_SIZE 中 lParam 保存的是客户区的宽与高 cxBlock = LOWORD (lParam) / DIVISIONS ; cyBlock = HIWORD (lParam) / DIVISIONS ; return 0 ; case WM_LBUTTONDOWN :// 在鼠标消息中,lParam保存的是鼠标相对于客户区的坐标 x = LOWORD (lParam) / cxBlock ; y = HIWORD (lParam) / cyBlock ; if (x < DIVISIONS && y < DIVISIONS) { //异或运算,与1进行异或,等于是把fState [x][y]取反,起到交替绘画的效果. // 第一次点击鼠标时,这个fState [x][y]被取反,就变成了1,这样WM_PAINT消息中就画了对角线 // 当再次单击鼠标时,对角线消失了,而fState [x][y]就由1变成0,WM_PAINT就不会重绘对角线 fState [x][y] ^= 1 ; // 计算矩形大小 rect.left = x * cxBlock ; rect.top = y * cyBlock ; rect.right = (x + 1) * cxBlock ; rect.bottom = (y + 1) * cyBlock ; // 使得该矩形区无效,这个动作会产生WM_PAINT消息. // 并使得该区域画的对角线消失,也就是第二次单击鼠标时, // 已经绘好的对角线会消失,而此时fState [x][y]=FALSE,WM_PAINT不会重绘该区域. // 因此第二次单击鼠标时,对角线就消失了且没有重绘. InvalidateRect (hwnd, &rect, FALSE); /* if(flag==0) { InvalidateRect (hwnd, &rect, FALSE); flag =1; } */ } else MessageBeep (0) ; return 0 ; case WM_PAINT : hdc = BeginPaint (hwnd, &ps) ; for (x = 0 ; x < DIVISIONS ; x++) for (y = 0 ; y < DIVISIONS ; y++) { Rectangle (hdc, x * cxBlock, y * cyBlock, (x + 1) * cxBlock, (y + 1) * cyBlock) ; if (fState [x][y]) { MoveToEx (hdc, x * cxBlock, y * cyBlock, NULL) ; LineTo (hdc, (x+1) * cxBlock, (y+1) * cyBlock) ; MoveToEx (hdc, x * cxBlock, (y+1) * cyBlock, NULL) ; LineTo (hdc, (x+1) * cxBlock, y * cyBlock) ; } } EndPaint (hwnd, &ps) ; return 0 ; case WM_DESTROY : PostQuitMessage (0) ; return 0 ; } return DefWindowProc (hwnd, message, wParam, lParam) ;}
- windows程序设计--鼠标消息---程序击中测试
- windows程序设计,第七章鼠标,用子窗口做击中测试,模拟键盘
- Win32 鼠标消息 - 客户区鼠标消息、非客户区鼠标消息、击中测试、鼠标滚轮
- Windows学习心得【程序中的击中测试】
- 鼠标击中测试码
- 鼠标击中测试码
- 7.4 程序中的击中测试
- 7.4 程序中的击中测试
- [Win32]鼠标的基本概念以及击中测试
- windows程序设计(14):鼠标消息详解
- 《Windows程序设计》读书笔记------------->>鼠标基础和显示区域鼠标消息<<
- windows程序设计之鼠标之客户区鼠标消息
- 击中测试
- windows程序设计(15):对比两种鼠标命中测试
- windows 程序设计第七章 鼠标命中测试的心得
- Windows程序设计 -鼠标
- 《Windows程序设计》之鼠标
- Windows程序设计--鼠标
- system1之:文件和目录管理
- 分割字符串:strtok()函数
- 【Android 应用开发】对Android体系结构的理解--后续会补充
- RF Algorithm(随机森林算法)与欧氏距离
- MAX Reactor 之角度阻尼器(Angular Dashpot)
- windows程序设计--鼠标消息---程序击中测试
- C语言计时 及 system()用法
- CGridCtrl m_gridctrl用法总结
- C++ find()函数用法(一般用于vector的查找)
- 网页游戏--贪吃蛇游戏
- vs2010 DX 环境配置
- VC链接库
- Ubuntu 12.04 LTS 安装 MATLAB2012a
- 这段代码很无奈