C++ 带多行的Win32选项卡控件

C++ 带多行的Win32选项卡控件,c++,winapi,tabs,C++,Winapi,Tabs,我的Win32应用程序中有一个选项卡控件。该控件具有多行功能。当我调整窗口的大小以减小选项卡控件的宽度时,会显示多行。问题是,当我单击下面一行时,上面一行中的选项卡被当前选项卡的窗口阻止(选项卡控件没有正确调整当前选项卡的内容窗口大小,以便上面几行可见)。我如何解释这个问题 下面是我的调整大小功能的代码: RECT cr; GetClientRect( pHdr->hWndTab, &cr ); TabCtrl_AdjustRect( pHdr->hWndTa

我的Win32应用程序中有一个选项卡控件。该控件具有多行功能。当我调整窗口的大小以减小选项卡控件的宽度时,会显示多行。问题是,当我单击下面一行时,上面一行中的选项卡被当前选项卡的窗口阻止(选项卡控件没有正确调整当前选项卡的内容窗口大小,以便上面几行可见)。我如何解释这个问题

下面是我的调整大小功能的代码:

RECT cr;
    GetClientRect( pHdr->hWndTab, &cr );
    TabCtrl_AdjustRect( pHdr->hWndTab, FALSE, &cr ); 
    OffsetRect( &cr, cxMargin - cr.left, cyMargin - cr.top );
    SetWindowPos( pHdr->hWndDisplay, 0, cr.left, cr.top, cr.right, cr.bottom, SWP_SHOWWINDOW );
此代码来自Microsoft网站

pHdr->hWndTab是选项卡控件的窗口句柄

pHdr->hwndisplay是当前选项卡内容窗口的窗口句柄


编辑:实际上,单击下部选项卡后,上部选项卡移动到控件顶部…但是,它们仍然被内容窗口阻止…

我通过在偏移后调整显示矩形修复了此问题:

typedef struct tag_dlghdr
{
    HWND hWndTab;
    HWND hWndDisplay;
    RECT rcDisplay;
    DLGTEMPLATE *apRes[ MAX_PAGES ];
    DLGPROC     MsgProc[ MAX_PAGES ]; 
}DLGHDR

Resize( HWND hWndDlg )
{    
    DLGHDR *pHdr = ( DLGHDR * )GetWindowLong( hWndDlg, GWL_USERDATA );

    DWORD dwDlgBase = GetDialogBaseUnits();
    int cxMargin = LOWORD( dwDlgBase ) / 4;
    int cyMargin = HIWORD( dwDlgBase ) / 8;
    m_niCurTabSel = TabCtrl_GetCurSel( pHdr->hWndTab );

    RECT cr;
    GetClientRect( pHdr->hWndTab, &cr );
    TabCtrl_AdjustRect( pHdr->hWndTab, FALSE, &cr ); 
    OffsetRect( &cr, cxMargin - cr.left, cyMargin - cr.top );
    CopyRect( &pHdr->rcDisplay, &cr );
    TabCtrl_AdjustRect( pHdr->hWndTab, FALSE, &pHdr->rcDisplay );
    SetWindowPos( pHdr->hWndDisplay, 0, pHdr->rcDisplay.left, pHdr->rcDisplay.top, pHdr->rcDisplay.right, pHdr->rcDisplay.bottom, SWP_SHOWWINDOW );

}

TCM\u ADJUSTRECT
肯定会考虑多行选项卡。你能发布一个屏幕截图来说明你看到的实际问题吗?@JonathanPotter你是对的AdjustRect工作问题是随后出现的OffsetRect()函数…我不能发布屏幕截图,但在AdjustRect()之后,rect是正确的…它将rect的“顶部”向下移动22个单位…然后OffsetRect()将“顶部”向上移动20个单位(2-22=-20)…调整选项卡控件窗口大小的正确方法是什么?你为什么要做
OffsetRect
?TCM\u ADJUSTRECT返回的坐标应该就是你所需要的。@JonathanPotter我使用的是[Microsoft]的代码()这显示了如何在选项卡选择更改期间调整内容窗口的大小…我在偏移后使用AdjustRect()修复了该问题…请参见下文