《Windows程序设计》之BLOKOUT1
来源:互联网 发布:58上的网络销售可靠吗 编辑:程序博客网 时间:2024/06/15 20:46
LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){static BOOL fBlocking,fValidBox;static POINT ptBeg,ptEnd,ptBoxBeg,ptBoxEnd;HDC hdc;PAINTSTRUCT ps;switch(message){case WM_LBUTTONDOWN:ptBeg.x=ptEnd.x=LOWORD(lParam);ptBeg.y=ptEnd.y=HIWORD(lParam);DrawBoxOutline(hwnd,ptBeg,ptEnd);//设置光标为IDC_CROSS,表示正在画矩形SetCursor(LoadCursor(NULL,IDC_CROSS));//标志,TRUE表示正在画fBlocking=TRUE;return 0;case WM_MOUSEMOVE:if(fBlocking){//当鼠标移动时,设置光标为IDC_CROSSSetCursor(LoadCursor(NULL,IDC_CROSS));//当下面这一行注释点时,移动鼠标会出现下面图片的效果DrawBoxOutline(hwnd,ptBeg,ptEnd);ptEnd.x=LOWORD(lParam);ptEnd.y=HIWORD(lParam);//下面这一行也是会出现下面图片的效果DrawBoxOutline(hwnd,ptBeg,ptEnd);}return 0;case WM_LBUTTONUP:if(fBlocking){DrawBoxOutline(hwnd,ptBeg,ptEnd);//用来保存最终的矩形ptBoxBeg=ptBeg;ptBoxEnd.x=LOWORD(lParam);ptBoxEnd.y=HIWORD(lParam);//光标还原SetCursor(LoadCursor(NULL,IDC_ARROW));fBlocking=FALSE;fValidBox=TRUE;//下面后调用WM_PAINTInvalidateRect(hwnd,NULL,TRUE);}return 0;case WM_CHAR://x1b是esc,实现效果,当正在画时,点一个esc会取消if(fBlocking & (wParam=='\x1B')){DrawBoxOutline(hwnd,ptBeg,ptEnd);SetCursor(LoadCursor(NULL,IDC_ARROW));fBlocking=FALSE;}return 0;case WM_PAINT:hdc=BeginPaint(hwnd,&ps);//这个是用来画鼠标松开时最终的矩形if(fValidBox){SelectObject(hdc,GetStockObject(BLACK_BRUSH));Rectangle(hdc,ptBoxBeg.x,ptBoxBeg.y,ptBoxEnd.x,ptBoxEnd.y);}//这个是实现鼠标点下左键后,移动时候的效果,但是鼠标移动时没有调用这个,我认识无用/*if(fBlocking){SetROP2(hdc,R2_NOT);SelectObject(hdc,GetStockObject(NULL_BRUSH));Rectangle(hdc,ptBeg.x,ptBeg.y,ptEnd.x,ptEnd.y);}*/EndPaint(hwnd,&ps);return 0;case WM_DESTROY:PostQuitMessage(0);return 0;}return DefWindowProc(hwnd,message,wParam,lParam);}
上面代码有两个问题还没有搞清楚:
25---30行中有两个DrawBoxOutline,我试着去掉任何一个,但是效果都会变成下图这样。
我想应该跟WM_MOUSEMOVE有关,不能做到时时的来相应。
66-----72行的代码让我去掉了,我认识没有用,因为在WM_MOUSEMOVE中没有调用WM_PAINT,那段代码应该不会被执行。
- 《Windows程序设计》之BLOKOUT1
- windows程序设计-第七章 BLOKOUT1 备注
- Windows程序设计之计时器
- Windows程序设计之对话框
- 《Windows程序设计》之键盘
- 《Windows程序设计》之鼠标
- 《Windows程序设计》之BLOKOUT2
- 《Windows程序设计》之WHATCLR
- 《Windows程序设计》之按钮
- 《Windows程序设计》之图标
- 《Windows程序设计》之菜单
- 《Windows程序设计》之POPUP2
- 《Windows程序设计》之对话框
- 《Windows程序设计》之HEXCALC
- 《Windows程序设计》之剪贴板
- 《Windows程序设计》之BITMAP
- 《Windows程序设计》之BITMASK
- 《Windows程序设计》之BOUNCE
- Linux ALSA声卡驱动之二:声卡的创建
- 读取、回收和重用:使用 Excel、XML 和 Java 技术轻松搞定报告使用 Java 和 XML 技术读取 Excel 文件并写入新文件(1)
- ArcGIS Server 10.1在Windows Server 2008中的机器名问题
- FetchType.EAGER与FetchType.LAZY的区别
- Linux ALSA声卡驱动之三:PCM设备的创建
- 《Windows程序设计》之BLOKOUT1
- SVN错误---Authorization failed
- Linux目录架构详解
- python&Ruby
- 2012.4.24.小结
- 一周最新示例代码回顾 (4/16–4/22)
- Access Connecions 连接方案变灰不能点击后的恢复办法
- Linux ALSA声卡驱动之四:Control设备的创建
- vpn原理及实现--tcp还是udp