【问题标题】:Tab Controls and their child windows选项卡控件及其子窗口
【发布时间】:2011-01-21 15:32:21
【问题描述】:

我正在使用控制选项卡(Windows 类“SysTabControl32”)来组织我正在开发的应用程序中的 GUI 元素。在过去,我捕获了 TCN_SELCHANGE 事件,然后基于每个 GUI 元素决定什么应该可见或不可见。这对于只有几十个 GUI 元素的小型应用程序来说非常好,但我当前的项目更复杂。

我希望有一个更简单的解决方案。我想要的是带有多个选项卡的选项卡控件。每个选项卡都有一个 GUI 元素“包装器”,我可以单独显示/隐藏它,并使所有相应的子元素变为可见/隐藏。我已经读到我应该使用对话框来做我所描述的事情,但找不到任何示例。

对话是要走的路吗?如果是这样,我在哪里可以找到一个简单的例子?如果没有,这里应该怎么做?

【问题讨论】:

  • 使用一个为您包装所有这些的小部件库不是更有效率吗?针对原始 Win32 进行编码就像在汇编中编程。
  • @David Heffernan:我碰巧在汇编编程。 C/C++ 标签用于更多曝光,因为同样适用。我不确定这是否证实了你的观点或没有实际意义......
  • 你是某种编程受虐狂吗?!! ;-)
  • @David Heffernan:的确如此,先生。我一边编程一边走过一堆热煤,然后把剃须刀片粘在我所有的钥匙上。当我不使用纯二进制编写时,我会在汇编中进行编程。

标签: c++ c windows winapi user-interface


【解决方案1】:

了解Property Sheets。也许这些可以解决您的问题。

【讨论】:

    【解决方案2】:

    感谢 Tiib 和 Tergiver 的回答,不幸的是我不喜欢这两种解决方案。这是我决定做的事情:

    当一个新选项卡被添加到我的选项卡控件时,我创建了一个带有 BUTTON 类和 BS_OWNERDRAWN 样式的窗口。然后我用我自己的版本替换 Windows 程序 (GWL_WNDPROC)(原谅我的程序集):

    ForwardMessageProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
      .switch uMsg
        .case WM_NOTIFY
          invoke            WinProc, hWnd, uMsg, wParam, lParam
          xor               eax, eax
          .break
        .case WM_COMMAND
          invoke            WinProc, hWnd, uMsg, wParam, lParam
          xor               eax, eax
          .break
        .default
          invoke            DefWindowProc, hWnd, uMsg, wParam, lParam
          .break
      .endswitch
      ret
    ForwardMessageProc endp
    

    它所做的只是将 GUI 消息转发到父窗口。这些“选项卡框架”将是选项卡的实际内容区域,因此我将所有 GUI 元素直接添加到这些选项卡框架中。然后,当用户单击选项卡时,我可以单独显示/隐藏每个选项卡框架,并且其上的 GUI 元素也会效仿。到目前为止一切正常,我没有发现任何问题。

    【讨论】:

      【解决方案3】:

      【讨论】:

      • 谢谢。我的 google-foo 不适合我……还是 bing-foo?
      猜你喜欢
      • 1970-01-01
      • 2010-12-14
      • 1970-01-01
      • 1970-01-01
      • 2020-01-29
      • 1970-01-01
      • 2018-12-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多