我正在使用
DialogBoxW
打开一个对话框,无论出于何种原因,它的系统菜单(标题栏菜单)使用经典主题(无主题)样式并且行为很奇怪。其中的菜单项实际上只执行一半时间的操作,其余时间,它只是再次重新打开菜单。这是我的 DlgProc。
void DlgProc(
HWND hWnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam
)
{
switch (uMsg)
{
case WM_CLOSE:
DestroyWindow(hWnd);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
case WM_INITDIALOG:
{
HWND hFileLabel = GetDlgItem(hWnd, IDD_OPENWITH_FILE);
SetWindowTextW(hFileLabel, szFileName);
break;
}
default:
DefWindowProcW(hWnd, uMsg, wParam, lParam);
break;
}
}
我添加了 Common Controls 6.0 依赖项,并且对话框本身是主题的,所以我不知道为什么会发生这种情况。
这不是一个有效的对话过程。对话过程必须有这个签名:
INT_PTR Dlgproc( HWND unnamedParam1, UINT unnamedParam2, WPARAM unnamedParam3, LPARAM unnamedParam4 )
对话框管理器将返回值用于各种用途。由于您的“对话过程”不返回值,因此对话管理器正在对不确定的值进行操作。因此,该行为是未定义的。