15986766051 15986766051
关注数: 66 粉丝数: 36 发帖数: 1,049 关注贴吧数: 19
有一段代码总是出现问题,麻烦大神看下 是一个涂鸦的小程序,刚学的 #include<Windows.h>#include#include LRESULT CALLBACK WndProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam); const TCHAR szWindowClass[]=L"第一个窗口"; const TCHAR szWindowTitle[]=L"涂鸦程序"; int WINAPI_tWinMain(HINSTANCE hInstance,HINSTANCE hpreinstance,LPTSTR lpcmdline,int ncmdshow) {WNDCLASSEX wcex={0}; wcex.cbSize=sizeof(WNDCLASSEX); wcex.style=CS_HREDRAW|CS_VREDRAW; wcex.lpfnWndProc=(WNDPROC)WndProc; wcex.hInstance=hInstance; wcex.hIcon=LoadIcon(NULL,IDI_APPLICATION); wcex.hCursor=LoadCursor(NULL,IDC_ARROW); wcex.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH); wcex.lpszClassName=szWindowClass;RegisterClassEx(&wcex); HWND hWnd=CreateWindow(szWindowClass,szWindowTitle,WS_OVERLAPPED,100,200,500,500,HWND_DESKTOP,NULL,hInstance,NULL); if(!hWnd) return FALSE;ShowWindow(hWnd,ncmdshow);UpdateWindow(hWnd); MSG msg ; while(GetMessage(&msg,NULL,0,0)) { TranslateMessage(& msg);DispatchMessage(&msg); } return msg.wParam;} enum SCRAWLTYPE{SCRAWLINE,SCRAWLRECTANGLE,SCRAWLELLIPSE,SCRAWLCIRCLE}; //使用7,8,9,0来选择图形的类型,包括直线,矩形,椭圆,圆形,默认是直线 TCHAR typeText[SCRAWLCIRCLE+1][10]={L"直线",L"矩形",L"椭圆",L"正圆"}; void Draw(HDC hdc,POINTS begin,POINTS end,COLORREF penColor,SCRAWLTYPE type)//在指定设备(hdc)用指定颜色在矩形内绘制指定类型的图形 {HPEN pen=CreatePen(PS_SOLID,1,penColor); HPEN oldpen=(HPEN)SelectObject(hdc,pen); switch(type) { case SCRAWLINE: MoveToEx(hdc,begin.x,begin.y,NULL); LineTo(hdc,end.x,end.y); break; case SCRAWLRECTANGLE: Rectangle(hdc,begin.x,begin.y,end.x,end.y); break; case SCRAWLELLIPSE: Ellipse(hdc,begin.x,begin.y,end.x,end.y); break; case SCRAWLCIRCLE: float r=sqrtf((end.x-begin.x)*(end.x-begin.x)+(end.y-begin.y)*(end.y-begin.y))/2;end.x=(begin.x+end.x)/2;end.y=(begin.y+end.y)/2; Ellipse(hdc,end.x-r,end.y-r,end.x+r,end.y+r); break; } SelectObject(hdc,oldpen); }LRESULT CALLBACK WndProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam) //窗口函数 { static SCRAWLTYPE type =SCRAWLINE; static POINTS begin={0,0}; static COLORREF penColor=RGB(0,0,0); switch (msg)//处理消息 {case WM_KEYDOWN: {switch (wParam) {case 55:type=SCRAWLINE; break; case 56:type=SCRAWLRECTANGLE; break; case 57:type=SCRAWLELLIPSE; break; case 48:type=SCRAWLCIRCLE; break; case 0x52:penColor=RGB(255,0,0); break; case 0x47:penColor=RGB(0,255,0); break; case 0x42:penColor=RGB(0,0,255); break; case 0x48:penColor=RGB(0,0,0); break; } HDC hdc=GetDC(hWnd); TCHAR str[20]; _stprintf(str,L"当前绘制的是%s",typeText[type]); SetTextColor(hdc,penColor); TextOut(hdc,0,0,str,_tcslen(str)); ReleaseDC(hWnd,hdc); return 0; } case WM_LBUTTONDOWN: {begin=MAKEPOINTS(lParam);return 0;} case WM_LBUTTONUP: {POINTS end=MAKEPOINTS(lParam); if(wParam&MK_CONTROL) {begin.x=begin.x-(end.x-begin.x); begin.y=begin.y-(end.y-begin.y);} HDC hdc=GetDC(hWnd); HBRUSH brush=(HBRUSH)SelectObject(hdc,(HBRUSH)GetStockObject(HOLLOW_BRUSH)); Draw(hdc,begin,end,penColor,type); SelectObject(hdc,brush); ReleaseDC(hWnd,hdc); return 0;} case WM_DESTROY: {PostQuitMessage(0);return 0;} default: return DefWindowProc(hWnd,msg,wParam,lParam); } }
1 下一页