选项卡控件:如何防止选择发生变化?

Tab Control: How to prevent the selection from changing?

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

Returns TRUE to prevent the selection from changing, or FALSE to allow the selection to change.

然而,这是行不通的!

代码:

 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;   
  }

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

如果您的控件位于对话框中,正如我假设的那样,您需要通过 DWLP_MSGRESULT window 数据 return 值。

SetWindowLongPtr(hWndDlg, DWLP_MSGRESULT, TRUE);
return TRUE;

对话过程中的 return 值向对话管理器指示消息是否已处理。消息的实际 return 值通过 DWLP_MSGRESULT.

提供

一如既往,请参阅 Raymond's blog 以获得对此的良好讨论。