GetWindowRect 高度
场景:关于GetWindowRect()和含文本TOOLBAR工具栏的高度有关问题
关于GetWindowRect()和含文本TOOLBAR工具栏的高度问题
在对话框程序中,用到工具栏(图标在上,文本在下),通过CONTROL方式添加TOOLBAR控件:
Main_OnInitDialog()中CreateUserInterface(HWND hWnd)负责将控件呈现到窗口中:
但是,在运行的初始阶段,TOOLBAR(图标在上,文本在下)的文本被其它控件遮档了下半截,这些控件是根据uToolHeight来布局的,跟踪Main_OnSize,发现TOOLBAR的高度仅为28,当最大化或还原窗口大小,TOOLBAR的文本就全部显示了,此时TOOLBAR的高度为42。
之前遇到过这个问题,无意中问题解决了,这次又来了,想弄明白到底是怎么一回事!?
------解决方案--------------------
首次加载不要用 SendMessage(hTool, TB_AUTOSIZE, 0, 0);看看结果如何?
或把ToolBar绑到ReBar中试试,ListView 的postion取ReBar的高度。
关于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的高度。