GetWindowRect 高度

场景:关于GetWindowRect()和含文本TOOLBAR工具栏的高度有关问题

关于GetWindowRect()和含文本TOOLBAR工具栏的高度问题
在对话框程序中,用到工具栏(图标在上,文本在下),通过CONTROL方式添加TOOLBAR控件:
C/C++ code

CONTROL "",IDC_TOOLBAR, TOOLBARCLASSNAME, WS_CHILD|WS_VISIBLE|CCS_ADJUSTABLE|WS_CLIPSIBLINGS|WS_CLIPCHILDREN,0,0,0,42



Main_OnInitDialog()中CreateUserInterface(HWND hWnd)负责将控件呈现到窗口中:

C/C++ code

void InitializeBitmap(HWND hTool, TBADDBITMAP *tbab)
{
    (*tbab).hInst = HINST_COMMCTRL;
    (*tbab).nID = IDB_STD_SMALL_COLOR;

    SendMessage(hTool, TB_ADDBITMAP, 0, (LPARAM) tbab);
}

void InitializeButtons(HWND hTool, TBBUTTON *tbb, int size)
{
    memset(tbb, '\0', sizeof(*tbb)*size);

    int iNew,iOpen,iSave;
    iNew = (int)SendMessage(hTool, TB_ADDSTRING, 0, (LPARAM)(LPSTR)ToolBarButtons[1].text);
    iOpen = (int)SendMessage(hTool, TB_ADDSTRING, 0, (LPARAM)(LPSTR)ToolBarButtons[2].text);
    iSave = (int)SendMessage(hTool, TB_ADDSTRING, 0, (LPARAM)(LPSTR)ToolBarButtons[3].text);
    
    tbb[0].iBitmap = STD_FILENEW;
    tbb[0].fsState = TBSTATE_ENABLED;
    tbb[0].fsStyle = TBSTYLE_BUTTON;
    tbb[0].idCommand = ID_FILE_NEW;
    tbb[0].iString = iNew;
    
    tbb[1].iBitmap = STD_FILEOPEN;
    tbb[1].fsState = TBSTATE_ENABLED;
    tbb[1].fsStyle = TBSTYLE_BUTTON;
    tbb[1].idCommand = ID_FILE_OPEN;
    tbb[1].iString = iOpen;
    
    tbb[2].iBitmap = STD_FILESAVE;
    tbb[2].fsState = TBSTATE_ENABLED;
    tbb[2].fsStyle = TBSTYLE_BUTTON;
    tbb[2].idCommand = ID_FILE_SAVEAS;
    tbb[2].iString = iSave;

    SendMessage(hTool, TB_ADDBUTTONS, size, (LPARAM) tbb);
}

void CreateUserInterface(HWND hWnd)
{
    // TOOLBAR
    TBADDBITMAP tbab;
    TBBUTTON tbb[TBBSIZE];
    HWND hTool = GetDlgItem(hWnd, IDC_TOOLBAR);

    SendMessage(hTool, TB_BUTTONSTRUCTSIZE, (WPARAM) sizeof(TBBUTTON), 0);
    InitializeBitmap(hTool, &tbab);
    InitializeButtons(hTool, tbb, TBBSIZE);
    SendMessage(hTool, TB_AUTOSIZE, 0, 0);
    ShowWindow(hTool, TRUE);
}



但是,在运行的初始阶段,TOOLBAR(图标在上,文本在下)的文本被其它控件遮档了下半截,这些控件是根据uToolHeight来布局的,跟踪Main_OnSize,发现TOOLBAR的高度仅为28,当最大化或还原窗口大小,TOOLBAR的文本就全部显示了,此时TOOLBAR的高度为42。
C/C++ code

Main_OnSize:
    RECT rectClient;
    GetClientRect(hwnd, &rectClient);

    RECT rectTool,rectStatus;
    GetWindowRect(hTool, &rectTool);
    GetWindowRect(hStatus, &rectStatus);
    int uToolHeight,uStatusHeight;
    uToolHeight = rectTool.bottom - rectTool.top;
    uStatusHeight = rectStatus.bottom - rectStatus.top;



之前遇到过这个问题,无意中问题解决了,这次又来了,想弄明白到底是怎么一回事!?

------解决方案--------------------
首次加载不要用 SendMessage(hTool, TB_AUTOSIZE, 0, 0);看看结果如何?
或把ToolBar绑到ReBar中试试,ListView 的postion取ReBar的高度。