我試圖寫在屏幕上
文本按我的鼠標的左按鈕時(HOLD),客戶端區域應顯示
L-BUTTON-DOWN
,當我放開,屏幕應該顯示
L-Button-UP
WM_LBUTTONDOWN和WM_LBUTTNUP之間是否存在任何消息?
這是我迄今所做的(這是窗口過程)
LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
HDC hdc ;
PAINTSTRUCT ps ;
RECT rect ;
switch (message)
{
case WM_SYSCOMMAND:
PlaySound(TEXT("syscom.wav"), NULL, SND_FILENAME | SND_SYNC);
return 0;
case WM_CREATE:
PlaySound (TEXT ("create.wav"), NULL, SND_FILENAME | SND_SYNC) ;
return 0 ;
case WM_PAINT:
hdc = BeginPaint(hwnd, &ps);
GetClientRect(hwnd, &rect);
DrawText(hdc, TEXT("Hello, Windows 32 API!"), -1, &rect, DT_SINGLELINE | DT_TOP | DT_RIGHT);
DrawText(hdc, TEXT("Hello, Windows 32 API!"), -1, &rect, DT_SINGLELINE); //TOP | LEFT
EndPaint(hwnd, &ps);
PlaySound(TEXT("paint.wav"), NULL, SND_FILENAME | SND_SYNC);
return 0 ;
case WM_LBUTTONDOWN:
hdc=GetDC(hwnd);
TextOut(hdc,50,50,TEXT("L-BUTTON-DOWN"),13);
ReleaseDC(hwnd,hdc);
PlaySound(TEXT("lbdown.wav"), NULL, SND_FILENAME | SND_ASYNC);
//GetClientRect(hwnd, &rect);
//InvalidateRect(hwnd, &rect, TRUE);
return 0;
case WM_LBUTTONUP:
hdc = GetDC(hwnd);
TextOut(hdc, 50, 50, TEXT("L-BUTTON-UP"), 11);
ReleaseDC(hwnd, hdc);
PlaySound(TEXT("lbup.wav"), NULL, SND_FILENAME | SND_SYNC);
GetClientRect(hwnd, &rect);
InvalidateRect(hwnd, &rect, TRUE);
return 0;
case WM_DESTROY:
PlaySound(TEXT("close.wav"), NULL, SND_FILENAME | SND_SYNC);
PostQuitMessage (0) ;
return 0 ;
}
return DefWindowProc (hwnd, message, wParam, lParam) ;
}
,這是我的窗口CLA SS在WinMain中
wndclass.style = CS_HREDRAW | CS_VREDRAW;
wndclass.lpfnWndProc = WndProc ;
wndclass.cbClsExtra = 0 ;
wndclass.cbWndExtra = 0 ;
wndclass.hInstance = hInstance ; //from WinMain arg
wndclass.hIcon = LoadIcon (NULL, IDI_ASTERISK) ;
wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ;
wndclass.hbrBackground = (HBRUSH) GetStockObject (DKGRAY_BRUSH) ;
wndclass.lpszMenuName = NULL ;
wndclass.lpszClassName = TEXT("HelloWin!!!") ;
我得到的問題是,
當我在客戶區L-單擊,消息顯示細膩,
L-BUTTON-DOWN
但是當我釋放,第二個文本重疊...
L-BUTTON-UPWN
這很明顯意味着我需要重新繪製客戶區,然後才能處理WM_LBUTTONUP
。
我該怎麼做?和
在WM_LBUTTONDOWN
和WM_LBUTTONUP
之間是否有任何消息可用於使客戶區域無效?
爲什麼不只是在文本上畫一個白色的矩形,或什麼? – immibis
這是一個出路....但你看,我將如何得到正確的座標? –
您可以使用您在假想的鼠標間消息消息中使用的座標。如果你不知道那裏的座標,處理這些假想的消息將不是解決方案的一部分。 – IInspectable