直線繪制沒問題,但總是直接出現在螢屏上,怎么才能在左鍵點擊后顯示它呢?剛學windows編程,有很多不懂,如果有教程推薦就更好了。
uj5u.com熱心網友回復:
左鍵點擊 ?點擊 哪里 ? 按鈕 ?uj5u.com熱心網友回復:
直接左鍵點視窗,然后讓直線出現。
uj5u.com熱心網友回復:
// case WM_LBUTTONDOWN:// OutputDebugString("Main WM_LBUTTONDOWN\n");
// break;
case WM_LBUTTONDBLCLK:
// MessageBeep(110);
// break;
回應 訊息
uj5u.com熱心網友回復:
用一個全域變數記住是否繪制過直線。uj5u.com熱心網友回復:
繪制之后沒有清除,當然會一直顯示uj5u.com熱心網友回復:
孫鑫的 《VC++深入詳解》,如果再想詳細理解,侯捷的《深入淺出MFC》不買書學的人是蠢蛋
uj5u.com熱心網友回復:
如果Resize視窗或其他視窗操作后,無需保留繪制后的直線,可以在WM_LBUTTONUP里繪制否則,需要在LBUTTONDOWN時將繪制引數保存到一個陣列(或其他資料結構),然后呼叫InvalidateRect,繪制操作統一在WM_PAINT里進行
uj5u.com熱心網友回復:
明白了。這門課真的無聊,上課想睡書也看不進去,有什么深入淺出的教程么?
uj5u.com熱心網友回復:
學會了基礎的知識去寫代碼,由簡單的開始,向難的寫,就是深入淺出uj5u.com熱心網友回復:

Talk is cheap, show me the code!
#pragma comment(lib,"user32")
#pragma comment(lib,"gdi32")
#include <stdio.h>
#include <windows.h>
int flag=0;
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) {
PAINTSTRUCT ps;
HDC hdc;
RECT r;
HPEN hpen,op;
switch(message) {
case WM_CLOSE://按Alt+F4退出
PostQuitMessage(0);
break;
case WM_LBUTTONUP:
if (flag==0) {
flag=1;
InvalidateRect(hWnd,NULL,TRUE);
}
case WM_PAINT:
BeginPaint(hWnd, &ps);
hdc = ps.hdc; // the device context to draw in
GetClientRect(hWnd, &r); // Obtain the window's client rectangle
if (flag==1) {
hpen=CreatePen(PS_SOLID,0,0x00FF0000);
op=(HPEN)SelectObject(hdc,hpen);
MoveToEx(hdc,r.left+10,r.top+100,NULL);
LineTo(hdc,r.right-10,r.bottom-100);
SelectObject(hdc,op);
DeleteObject(hpen);
}
EndPaint(hWnd, &ps);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
MSG msg = {0};
WNDCLASS wc = {0};
HBRUSH hbrh;
hbrh=CreateSolidBrush(0x00FFFFFF);
wc.lpfnWndProc = WndProc;
wc.hInstance = hInstance;
wc.hbrBackground = hbrh;
wc.lpszClassName = "minwindowsapp";
wc.hCursor = LoadCursor(NULL,IDC_ARROW);
if( FAILED(RegisterClass(&wc)) ) return 1;
if(FAILED(CreateWindow(wc.lpszClassName,
"Minimal Windows Application",
WS_SYSMENU|WS_CAPTION|WS_VISIBLE,
CW_USEDEFAULT,
CW_USEDEFAULT,
400,
300,
0,
0,
hInstance,
NULL)))
return 2;
while( GetMessage( &msg, NULL, 0, 0 ) > 0 ) {
DispatchMessage( &msg );
}
DeleteObject(hbrh);
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/61008.html
標籤:基礎類
上一篇:C++讀取組態檔改變界面數量
