日期:2014-05-17  浏览次数:20913 次

工具栏和状态栏——模仿windows记事本程序Part3

工具栏


  可以用CreateToolbarEx()创建一个工具栏,但在这里不这样用.第一件事情就是要实际地创建一个工具栏...

    hTool = CreateWindowEx(0, TOOLBARCLASSNAME, NULL, WS_CHILD | WS_VISIBLE, 0, 0, 0, 0,
        hwnd, (HMENU)IDC_MAIN_TOOL, GetModuleHandle(NULL), NULL);

  够简单了吧,TOOLBARCLASSNAME是在通用控件的头文件中定义的常量.hwnd是父窗口,也就是要放工具栏的窗口.IDC_MAIN_TOOL是一个标识,在后面如果需要的话,可以用GetDlgItem()和它来获最这个工具栏的HWND.

     SendMessage(hTool, TB_BUTTONSTRUCTSIZE, (WPARAM)sizeof(TBBUTTON), 0);

  需要这个消息来让系统算出用的是什么版本的通用控件库.因为新版本加了一些新东西到这个结构体中去了,所以有了它的大小就知道你可以用它的哪些功能.


工具栏按钮


  基本的工具栏上按钮图片有两个来源,标准按钮是comctl32提供的,用戶定义的是自己创建的.注意:按钮和图片是分別加到工具栏上去的...先加一些图片,再加一些按钮,最后告诉它哪个按钮用哪个图片.


添加标准按钮


  现在创建了一个工具栏了,要向它加一些按钮.最常用的图片就在通用控件库中,所以不需要对每个程序来创建,添加一遍就可以使用了.

  首先申明一个TBBUTTON和TBADDBITMAP.

    TBBUTTON tbb[3];
    TBADDBITMAP tbab;

然后向工具栏添加标准的图片,就用通用控件库中定义好的图片表...

    tbab.hInst = HINST_COMMCTRL;
    tbab.nID = IDB_STD_SMALL_COLOR;
    SendMessage(hTool, TB_ADDBITMAP, 0, (LPARAM)&tbab);

现在装入了图片,可以添加一些按钮,使用它们...

    ZeroMemory(tbb, sizeof(tbb));
    tbb[0].iBitmap = STD_FILENEW;
    tbb[0].fsState = TBSTATE_ENABLED;
    tbb[0].fsStyle = TBSTYLE_BUTTON;
    tbb[0].idCommand = ID_FILE_NEW;

    tbb[1].iBitmap = STD_FILEOPEN;
    tbb[1].fsState = TBSTATE_ENABLED;
    tbb[1].fsStyle = TBSTYLE_BUTTON;
    tbb[1].idCommand = ID_FILE_OPEN;

    tbb[2].iBitmap = STD_FILESAVE;
    tbb[2].fsState = TBSTATE_ENABLED;
    tbb[2].fsStyle = TBSTYLE_BUTTON;
    tbb[2].idCommand = ID_FILE_SAVEAS;

    SendMessage(hTool, T