选项卡控件:如何防止选择更改?

Sha*_*aul 0 c++ winapi tabs tabcontrol win32gui

我的项目是带有选项卡控件的简单WIN32对话框。在某些情况下,我想阻止用户更改选项卡。MS文档非常简单 -

返回 TRUE 以防止更改选择,或返回 FALSE 以允许更改选择。

然而,这根本行不通!

代码:

	case WM_NOTIFY:
		if (((LPNMHDR)lParam)->idFrom == IDC_DEVTABS)
		{
			if (((LPNMHDR)lParam)->code == TCN_SELCHANGING)
				return  (INT_PTR)TRUE;
				//return  (INT_PTR)OnSelChanging(hDlgTab);
			if (((LPNMHDR)lParam)->code == TCN_SELCHANGE)
				OnSelChanged(hDlgTab);
				
			return  (INT_PTR)TRUE;			
		}
Run Code Online (Sandbox Code Playgroud)

我可以看到我的父对话框收到了消息,但选项卡无论如何都在改变。知道如何防止选项卡更改吗?

Jon*_*ter 5

如果您的控件位于对话框中(正如我所假设的那样),您需要通过DWLP_MSGRESULT窗口数据返回值。

SetWindowLongPtr(hWndDlg, DWLP_MSGRESULT, TRUE);
return TRUE;
Run Code Online (Sandbox Code Playgroud)

对话过程的返回值向对话管理器指示该消息是否已被处理。消息的实际返回值通过 提供DWLP_MSGRESULT

与往常一样,请参阅Raymond 的博客以获取对此的详细讨论。