CFormView 基於對話框模板,標準 MFC 上下文說明 (Shift+F1 或工具列「說明」按鈕) 預設僅對應視圖資源 ID (HID_BASE_RESOURCE + IDD_FORM),無法針對個別控制項 (編輯框、按鈕、下拉框) 顯示不同說明主題。
OnHelpHitTest
LRESULT CMyFormView::OnHelpHitTest(WPARAM, LPARAM lParam) {
// lParam 為螢幕座標 (LOWORD=x, HIWORD=y)
CPoint pt(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam));
ScreenToClient(&pt); // 轉換為客戶區座標
// 找出座標下的子視窗 (包含不可見/停用控制項)
CWnd* pChild = ChildWindowFromPoint(pt, CWP_ALL | CWP_SKIPINVISIBLE);
if (pChild && ::IsWindow(pChild->m_hWnd)) {
UINT nID = pChild->GetDlgCtrlID(); // 取得控制項 ID
if (nID != 0) {
// 命令類控制項 (按鈕、功能表項) 對應 HID_BASE_COMMAND
// 視窗/對話框/非命令控制項 對應 HID_BASE_RESOURCE
// 這裡簡單假設所有控制項為命令類
return HID_BASE_COMMAND + nID;
}
}
// 無控制項或無 ID,回傳視圖資源說明 ID
return HID_BASE_RESOURCE + GetDlgCtrlID();
}
| 前綴 | 用途 | 基底值 |
|---|---|---|
| ID_ | 功能表項、命令按鈕 | HID_BASE_COMMAND (0x10000) |
| IDR_ | 視窗、對話框、工具列資源 | HID_BASE_RESOURCE (0x20000) |
| IDD_ | 對話框模板 | HID_BASE_RESOURCE |
| IDP_ | 提示/錯誤訊息 | HID_BASE_PROMPT (0x30000) |
| IDW_ | 非命令按鈕控制項 (編輯框、清單等) | HID_BASE_RESOURCE |