📄 subject_38715.htm
字号:
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:朱慧 回复日期:2003-05-06 12:31:27
<br>内容:帮你改了一下:<BR><BR>/* SDK程序<BR>请问如何得到只画一条直线的动态效果,即鼠标按下后的点为起始点Point1,<BR>在不松开的情况下,随着鼠标的移动显示直线的效果(只显示当前),<BR>松开鼠标时连接Point1和松开点Point2<BR>*/<BR><BR>//主要增加了两个画笔,鼠标移动之后,擦除起始点与前一坐标之间的连线,重画<BR>//起始点与当前坐标之间的连线.<BR>#include <windows.h><BR><BR>LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;<BR>int ixFirst,iyFirst,xPrePos,yPrePos; //增加前一点坐标<BR>BOOL bFlag;<BR>HPEN hBlackPen,hWhitePen; //增加画笔<BR><BR>int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,<BR> PSTR szCmdLine, int iCmdShow)<BR>{<BR> static TCHAR szAppName[] = TEXT ("paintbrush") ;<BR> HWND hwnd ;<BR> MSG msg ;<BR> WNDCLASS wndclass ;<BR><BR> wndclass.style = CS_HREDRAW | CS_VREDRAW ;<BR> wndclass.lpfnWndProc = WndProc ;<BR> wndclass.cbClsExtra = 0 ;<BR> wndclass.cbWndExtra = 0 ;<BR> wndclass.hInstance = hInstance ;<BR> wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ;<BR> wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ;<BR> wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;<BR> wndclass.lpszMenuName = NULL ;<BR> wndclass.lpszClassName = szAppName ;<BR><BR> if (!RegisterClass (&wndclass))<BR> {<BR> MessageBox (NULL, TEXT ("This program requires Windows NT!"), <BR> szAppName, MB_ICONERROR) ;<BR> return 0 ;<BR> }<BR> <BR> hwnd = CreateWindow (szAppName, // window class name<BR> TEXT ("paintbrush"), // window caption<BR> WS_OVERLAPPEDWINDOW, // window style<BR> CW_USEDEFAULT, // initial x position<BR> CW_USEDEFAULT, // initial y position<BR> CW_USEDEFAULT, // initial x size<BR> CW_USEDEFAULT, // initial y size<BR> NULL, // parent window handle<BR> NULL, // window menu handle<BR> hInstance, // program instance handle<BR> NULL) ; // creation parameters<BR> <BR> ShowWindow (hwnd, iCmdShow) ;<BR> UpdateWindow (hwnd) ;<BR> <BR> while (GetMessage (&msg, NULL, 0, 0))<BR> {<BR> TranslateMessage (&msg) ;<BR> DispatchMessage (&msg) ;<BR> }<BR> return msg.wParam ;<BR>}<BR><BR>LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)<BR>{<BR> HDC hdc ;<BR> PAINTSTRUCT ps ;<BR> RECT rect ;<BR> int xPos,yPos;<BR> <BR><BR> switch (message)<BR> {<BR> case WM_CREATE:<BR> hBlackPen=CreatePen(PS_SOLID,1,RGB(0,0,0)); //增加创建黑画笔<BR> hWhitePen=CreatePen(PS_SOLID,1,RGB(255,255,255)); //增加创建白画笔<BR> return 0 ;<BR> <BR> case WM_PAINT:<BR> hdc = BeginPaint (hwnd, &ps) ;<BR> <BR> GetClientRect (hwnd, &rect) ;<BR> EndPaint (hwnd, &ps) ;<BR> return 0 ;<BR><BR> case WM_LBUTTONDOWN:<BR> hdc=GetDC(hwnd);<BR> InvalidateRect(hwnd,NULL,TRUE);<BR> bFlag=1;<BR> ixFirst=LOWORD(lParam);<BR> iyFirst=HIWORD(lParam);<BR> xPrePos=ixFirst; //增加<BR> yPrePos=iyFirst; //增加<BR> MoveToEx(hdc,ixFirst,iyFirst,NULL);<BR> ReleaseDC(hwnd,hdc);<BR> return 0;<BR> case WM_LBUTTONUP:<BR> hdc=GetDC(hwnd);<BR> bFlag=0;<BR> xPos=LOWORD(lParam);<BR> yPos=HIWORD(lParam);<BR> SelectObject(hdc,hBlackPen); //增加选择画黑笔<BR> MoveToEx(hdc,ixFirst,iyFirst,NULL);<BR> LineTo(hdc,xPos,yPos);<BR> ReleaseDC(hwnd,hdc);<BR> return 0;<BR> case WM_MOUSEMOVE:<BR> hdc=GetDC(hwnd);<BR> if(bFlag)<BR> {<BR> xPos=LOWORD(lParam);<BR> yPos=HIWORD(lParam);<BR> //删除鼠标移动前两点之间的直线<BR> SelectObject(hdc,hWhitePen);<BR> MoveToEx(hdc,ixFirst,iyFirst,NULL);<BR> LineTo(hdc,xPrePos,yPrePos);<BR> //鼠标移动之后重新连接起始点与当前点的直线<BR> SelectObject(hdc,hBlackPen);<BR> MoveToEx(hdc,ixFirst,iyFirst,NULL);<BR> LineTo(hdc,xPos,yPos);<BR> //保存上一点坐标<BR> xPrePos=xPos;<BR> yPrePos=yPos;<BR> }<BR> ReleaseDC(hwnd,hdc);<BR> return 0;<BR> case WM_DESTROY:<BR> DeleteObject(hBlackPen);<BR> DeleteObject(hWhitePen);<BR> PostQuitMessage (0) ;<BR> return 0 ;<BR> }<BR> return DefWindowProc (hwnd, message, wParam, lParam) ;<BR>}
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -