首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

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

2012-09-03 
关于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的高度。

热点排行