
當我右鍵單擊任意位置時,此應用程式會創建一個子視窗(即白框),并在再次右鍵單擊后銷毀子視窗。我已經實作了通過 Direct 2D 擴展和收縮紅色矩形的機制。我希望子視窗在我對其進行更改時實時顯示矩形的寬度和高度。我根本不與子視窗互動:它不需要用于關閉和其他東西的“x”按鈕;它只是列印出幾行資料。
這是我在主視窗程式中的內容:
case WM_RBUTTONUP:
{
DemoApp *pDemoApp = reinterpret_cast<DemoApp *>(static_cast<LONG_PTR>(
::GetWindowLongPtrW(hwnd, GWLP_USERDATA)));
pDemoApp->showTextBox = !pDemoApp->showTextBox; //showTextBox is a boolean
if (pDemoApp->showTextBox) {
POINTS cursor = MAKEPOINTS(lParam);
pDemoApp->child_hwnd = CreateWindowEx(
WS_EX_TOPMOST,
"LISTBOX",
"I dont need a title here",
WS_CHILDWINDOW,
cursor.x,
cursor.y,
100,
200,
pDemoApp->main_hwnd,
NULL,
HINST_THISCOMPONENT,
pDemoApp
);
ShowWindow(pDemoApp->child_hwnd, SW_SHOWNORMAL);
UpdateWindow(pDemoApp->child_hwnd);
}
else {
DestroyWindow(pDemoApp->child_hwnd);
}
}
break;
我該如何離開這里?我想知道:
使用 Direct Write 在子視窗中繪制文本是我唯一的選擇嗎?我看到白框中的虛線,所以我認為必須有一種顯示純文本的方法。
我
LISTBOX這里用的是預定義的windows類名。我如何為其設定程式?還有什么預定義的類名更能滿足我的需要?或者我必須注冊一個自定義的嗎?我想拖動子視窗,如何設定它以便系統為我處理拖動。
彈出一個對話框來顯示文本會比彈出一個子視窗更好嗎?
謝謝。
uj5u.com熱心網友回復:
由于您使用 Win32LISTBOX控制元件作為子視窗,因此您有幾個選項可以在其中顯示矩形的尺寸:
為 ListBox 設定
LBS_HASSTRINGS樣式,并向其添加 1-2 個專案。然后,每當您更改矩形時,向ListBox發送LB_DELETESTRING和LB_ADDSTRING發送訊息以HWND根據需要顯示更新后的尺寸。ListBox 無法更新現有專案,因此要更改現有專案的文本,您必須洗掉該專案,然后使用新文本重新添加它。給 ListBox 一個
LBS_OWNERDRAW...樣式,并在其中添加 1-2 個空白項。然后讓 ListBox 的父視窗句柄WM_MEASUREITEM和WM_DRAWITEM來自 ListBox 的通知根據需要在專案中顯示矩形的當前尺寸。每當矩形更改時,呼叫InvalidateRect()ListBoxHWND以觸??發重繪。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/372140.html
上一篇:使用鉤子(SetWindowsHookEX&WH_GETMESSAGE)
下一篇:如何在MSHTML中設定字體渲染
