2013-05-20 75 views
2

我用這段代碼創建鋼筋控制,並在鋼筋中引入帶有工具欄的帶。
但是當窗口出現時,我看不到工具欄。當我檢查鋼筋的高度時,在這行代碼中:int height = wp.rcNormalPosition.bottom - wp.rcNormalPosition.top;我發現鋼筋的高度只有4個像素。創建鋼筋控制和引入帶鋼筋的工具條進入螺紋鋼

#include <windows.h> 
#include <stdlib.h> 
#include <CommCtrl.h> 
#pragma comment(lib, "comctl32.lib") 

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); 
HINSTANCE instance; 

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) 
{ 
    instance = hInstance; 

    WNDCLASSEX wcex; 

    wcex.cbSize = sizeof(WNDCLASSEX); 
    wcex.style   = CS_HREDRAW | CS_VREDRAW; 
    wcex.lpfnWndProc = WndProc; 
    wcex.cbClsExtra  = 0; 
    wcex.cbWndExtra  = 0; 
    wcex.hInstance  = hInstance; 
    wcex.hIcon   = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_APPLICATION)); 
    wcex.hCursor  = LoadCursor(NULL, IDC_ARROW); 
    wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); 
    wcex.lpszMenuName = NULL; 
    wcex.lpszClassName = L"Example"; 
    wcex.hIconSm  = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_APPLICATION)); 

    RegisterClassEx(&wcex); 

    HWND hWnd = CreateWindow(L"Example", L"", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 
     500, 500, NULL, NULL, hInstance, NULL); 

    // Initialize common controls. 
    INITCOMMONCONTROLSEX icex; 
    icex.dwSize = sizeof(INITCOMMONCONTROLSEX); 
    icex.dwICC = ICC_COOL_CLASSES | ICC_BAR_CLASSES; 
    InitCommonControlsEx(&icex); 

    HWND hwndRebar = CreateWindowEx(WS_EX_TOOLWINDOW, REBARCLASSNAME, NULL, WS_CHILD | WS_VISIBLE | WS_BORDER, 
        0, 0, 100, 50, hWnd, NULL, instance, NULL); 

    // create toolbar 
    HWND hWndToolbar = CreateWindowEx(0 , TOOLBARCLASSNAME, NULL, WS_CHILD | TBSTYLE_TOOLTIPS, 
      0, 0, 0, 0, hwndRebar, (HMENU)0, instance, NULL); 

    HIMAGELIST hImageList = ImageList_Create(16, 16, ILC_COLOR16 | ILC_MASK, 3, 0); 

    SendMessage(hWndToolbar, TB_SETIMAGELIST, (WPARAM)0, (LPARAM)hImageList); 
    SendMessage(hWndToolbar, TB_BUTTONSTRUCTSIZE, (WPARAM)sizeof(TBBUTTON), 0); 

    TBBUTTON tbb[4] = 
    { 
     {0,0,TBSTATE_ENABLED,TBSTYLE_BUTTON}, 
     {1,1,TBSTATE_ENABLED,TBSTYLE_BUTTON}, 
     {2,2,TBSTATE_ENABLED,TBSTYLE_BUTTON}, 
    }; 

    SendMessage(hWndToolbar, (UINT) TB_ADDBUTTONS, 3, (LPARAM)&tbb); 

    SendMessage(hWndToolbar, TB_AUTOSIZE, 0, 0); 
    ShowWindow(hWndToolbar , SW_SHOW); 

    // Initialize band info. 
    REBARBANDINFO rbBand = { sizeof(REBARBANDINFO) }; 
    rbBand.fMask = RBBIM_STYLE | RBBIM_TEXT | RBBIM_CHILD | RBBIM_CHILDSIZE | RBBIM_SIZE | RBBIM_COLORS; 

    rbBand.fStyle = RBBS_GRIPPERALWAYS; 

    // Get the height of the toolbar. 
    DWORD dwBtnSize = (DWORD)SendMessage(hWndToolbar, TB_GETBUTTONSIZE, 0,0); 

    // Set values unique to the band with the toolbar. 
    rbBand.clrFore = RGB(233, 233, 233); 
    rbBand.clrBack = RGB(200, 200, 200); 
    rbBand.lpText = TEXT(""); 
    rbBand.hwndChild = hWndToolbar; 
    rbBand.cyChild = LOWORD(dwBtnSize); 
    rbBand.cyMinChild = LOWORD(dwBtnSize); 
    rbBand.cxMinChild = 3 * HIWORD(dwBtnSize); 
    // The default width is the width of the buttons. 
    rbBand.cx = 0; 

    // Add the band 
    SendMessage(hwndRebar, RB_INSERTBAND, (WPARAM)-1, (LPARAM)&rbBand); 

    // show the main window 
    ShowWindow(hWnd, nCmdShow); 

    // check the rebar size 
    WINDOWPLACEMENT wp; 
    GetWindowPlacement(hwndRebar, &wp); 
    int height = wp.rcNormalPosition.bottom - wp.rcNormalPosition.top; 

    MSG msg; 

    while (GetMessage(&msg, NULL, 0, 0)) 
    { 
     TranslateMessage(&msg); 
     DispatchMessage(&msg); 
    } 

    return (int) msg.wParam; 
} 

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) 
{ 
    switch (message) 
    { 
     case WM_CREATE: 
      return 0; 

     default: 
      return DefWindowProc(hWnd, message, wParam, lParam); 
    } 
} 

回答

1

正如已經指出,結構所需的REBARBANDINFO的cbSize成員:

這是在評論到MSDN頁提到 要設置。

備註所提供的代碼下面還有:

  1. 上的工具欄按鈕的圖片顯示不出來。右鍵創建圖像列表後,你必須做出以下調用來加載圖片:

    SendMessage(hWndToolbar, TB_LOADIMAGES, (WPARAM)IDB_STD_SMALL_COLOR, (LPARAM)HINST_COMMCTRL); 
    
  2. 的TBBUTTON數組聲明大小爲4,但只得到3項填充。從技術上講,應該聲明爲:

    TBBUTTON tbb[3]