用鼠标画矩形的win32代码
2014-04-13 21:54
399 查看
题目:用鼠标画矩形。
核心代码:
(在1208000514.cpp中的)
核心代码:
(在1208000514.cpp中的)
// 1208000514.cpp : 定义应用程序的入口点。 // #include "stdafx.h" #include "1208000514.h" #define MAX_LOADSTRING 100 // 全局变量: HINSTANCE hInst; // 当前实例 TCHAR szTitle[MAX_LOADSTRING]; // 标题栏文本 TCHAR szWindowClass[MAX_LOADSTRING]; // 主窗口类名 // 此代码模块中包含的函数的前向声明: ATOM MyRegisterClass(HINSTANCE hInstance); BOOL InitInstance(HINSTANCE, int); LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); INT_PTR CALLBACK About(HWND, UINT, WPARAM, LPARAM); int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) { UNREFERENCED_PARAMETER(hPrevInstance); UNREFERENCED_PARAMETER(lpCmdLine); // TODO: 在此放置代码。 MSG msg; HACCEL hAccelTable; // 初始化全局字符串 LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING); LoadString(hInstance, IDC_MY1208000514, szWindowClass, MAX_LOADSTRING); MyRegisterClass(hInstance); // 执行应用程序初始化: if (!InitInstance (hInstance, nCmdShow)) { return FALSE; } hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_MY1208000514)); // 主消息循环: while (GetMessage(&msg, NULL, 0, 0)) { if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)) { TranslateMessage(&msg); DispatchMessage(&msg); } } return (int) msg.wParam; } // // 函数: MyRegisterClass() // // 目的: 注册窗口类。 // // 注释: // // 仅当希望 // 此代码与添加到 Windows 95 中的“RegisterClassEx” // 函数之前的 Win32 系统兼容时,才需要此函数及其用法。调用此函数十分重要, // 这样应用程序就可以获得关联的 // “格式正确的”小图标。 // ATOM MyRegisterClass(HINSTANCE hInstance) { WNDCLASSEX wcex; wcex.cbSize = sizeof(WNDCLASSEX); wcex.style = CS_HREDRAW | CS_VREDRAW; wcex.lpfnWndProc= WndProc; wcex.cbClsExtra= 0; wcex.cbWndExtra= 0; wcex.hInstance= hInstance; wcex.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_MY1208000514)); wcex.hCursor = LoadCursor(NULL, IDC_ARROW); wcex.hbrBackground= (HBRUSH)(COLOR_WINDOW+1); wcex.lpszMenuName= MAKEINTRESOURCE(IDC_MY1208000514); wcex.lpszClassName= szWindowClass; wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL)); return RegisterClassEx(&wcex); } // // 函数: InitInstance(HINSTANCE, int) // // 目的: 保存实例句柄并创建主窗口 // // 注释: // // 在此函数中,我们在全局变量中保存实例句柄并 // 创建和显示主程序窗口。 // BOOL InitInstance(HINSTANCE hInstance, int nCmdShow) { HWND hWnd; hInst = hInstance; // 将实例句柄存储在全局变量中 hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL); if (!hWnd) { return FALSE; } ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd); return TRUE; } // // 函数: WndProc(HWND, UINT, WPARAM, LPARAM) // // 目的: 处理主窗口的消息。 // // WM_COMMAND - 处理应用程序菜单 // WM_PAINT - 绘制主窗口 // WM_DESTROY - 发送退出消息并返回 // // RECT g_aryRect[1024];//用一个数据表示矩形的坐标位置 int g_nRectNum=0;//记录矩形的个数 BOOL g_flag1=FALSE;//标记左边鼠标是否被按下,默认值为未被按下 LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { int wmId, wmEvent; PAINTSTRUCT ps; HDC hdc; switch (message) { case WM_LBUTTONDOWN://左边鼠标按下 g_nRectNum++;//个数加一 g_aryRect[g_nRectNum-1].left=LOWORD(lParam); g_aryRect[g_nRectNum-1].top=HIWORD(lParam);//记录起点坐标位置 g_flag1=TRUE;//标记左边鼠标有被按下 break; case WM_LBUTTONUP://左边鼠标松开 g_flag1=FALSE;//标记左边鼠标被松开了 break; case WM_MOUSEMOVE://鼠标移动,即画矩形的过程 if(g_flag1)//如果左边鼠标有被按下 { g_aryRect[g_nRectNum-1].right=LOWORD(lParam); g_aryRect[g_nRectNum-1].bottom=HIWORD(lParam);//记录重点坐标位置 } InvalidateRect(hWnd,NULL,FALSE);//重新刷新下(该函数向指定的窗体更新区域添加一个矩形,然后窗口客户区域的这一部分并被重新绘制) break; case WM_COMMAND: wmId = LOWORD(wParam); wmEvent = HIWORD(wParam); // 分析菜单选择: switch (wmId) { case IDM_ABOUT: DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About); break; case IDM_EXIT: DestroyWindow(hWnd); break; default: return DefWindowProc(hWnd, message, wParam, lParam); } break; case WM_PAINT: hdc = BeginPaint(hWnd, &ps); // TODO: 在此添加任意绘图代码... for(int i=0;i<g_nRectNum;i++) { Rectangle(hdc,g_aryRect[i].left,g_aryRect[i].top,g_aryRect[i].right,g_aryRect[i].bottom);//画矩形 } EndPaint(hWnd, &ps); break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hWnd, message, wParam, lParam); } return 0; } // “关于”框的消息处理程序。 INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { UNREFERENCED_PARAMETER(lParam); switch (message) { case WM_INITDIALOG: return (INT_PTR)TRUE; case WM_COMMAND: if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL) { EndDialog(hDlg, LOWORD(wParam)); return (INT_PTR)TRUE; } break; } return (INT_PTR)FALSE; }
相关文章推荐
- OpenCV的鼠标操作——用鼠标画矩形(代码解读)
- matlab 用鼠标拖曳画矩形的代码
- Win32 鼠标绘图代码研究
- C++ WIN32(鼠标画点击放下矩形)
- unity3d用鼠标拖动物体的一段代码 .
- python代码实现键盘鼠标事件的捕获(可能盗取QQ号,身份证信息等)
- 微信鼠标点击显示二维码代码
- 最简单最原始的模拟鼠标键盘的测试代码
- 利用鼠标绘制矩形和截取图像的矩形区域并保存(OpenCV2.4.5)
- 二维数组内 求最大矩形范围和 代码 李士广 徐晓勋
- 鼠标滑过,实现下拉菜单弹出的示例代码
- js 绑定键盘鼠标事件示例代码
- Js鼠标跟随代码小手点击实例方法
- VB6.0代码窗口不支持鼠标中键操作滚动条解决方法
- 用canvas实现鼠标拖动绘制矩形框
- 通过JS 获取Mouse Position(鼠标坐标)的代码
- JS打造的一款响应鼠标变化很炫的图片特效代码
- win32 鼠标点击及消息管理系统
- js获取鼠标位置杂谈附多浏览器兼容代码
- WIN32学习——鼠标消息