GUI 剖析之资源篇之 工具栏

本文详细介绍了如何使用C++和Windows API创建具有指定图片按钮和提示框的工具栏,包括初始化、窗口创建、按钮添加等步骤。

工具栏:

   #include<commctrl.h>

  加入静态库:comctl32.lib

#defineIDC_MAIN_TOOL 4

#define ID_FILE_NEW 5

#defineID_FILE_OPEN 6

#defineID_FILE_SAVEAS 7

 

  InitCommonControls();

 HWNDhTool=CreateWindowEx(0,TOOLBARCLASSNAME,NULL,WS_CHILD |WS_VISIBLE,

 0,0, 60, 60,

hWnd,

(HMENU)IDC_MAIN_TOOL,

GetModuleHandle(NULL),NULL);

 SendMessage(hTool,TB_BUTTONSTRUCTSIZE, (WPARAM)sizeof(TBBUTTON), 0);TBBUTTONtbb[3];TBADDBITMAPtbab;tbab.hInst =HINST_COMMCTRL;bab.nID =IDB_STD_SMALL_COLOR;

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

 ZeroMemory(tbb,sizeof(tbb));

    tbb[0].iBitmapSendMessage(hTool,TB_LOADIMAGES, (WPARAM)IDB_STD_LARGE_COLOR, (LPARAM)HINST_COMMCTRL) ;

    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,TB_ADDBUTTONS,sizeof(tbb)/sizeof(TBBUTTON),

(LPARAM)&tbb);

 

 

 

ps:创建具有自己指定图片按钮和提示框的工具栏

下面是我写的一个工具栏类(包含两个文件)

 

//DIToolBarWnd.h

#pragma once
#include "stdafx.h"
#include "DirectedImageMainWndFram.h"

//工具栏相关
#include "Commctrl.h"
#pragma comment(lib,"comctl32.lib")
/////////////////////////////////////////////////////
/*
类名:DICToolBarWnd
 
*/

//宏定义,define button id on toolbar
#define DIT_ID1 WM_USER+1
#define DIT_ID2 WM_USER+2
#define DIT_ID3 WM_USER+3
#define DIT_ID4 WM_USER+4
#define DIT_ID5 WM_USER+5
#define DIT_ID6 WM_USER+6
#define DIT_ID7 WM_USER+7
#define DIT_ID8 WM_USER+8
#define DIT_ID9 WM_USER+9
#define DIT_ID10 WM_USER+10
 
//宏定义:define toolbar id
#define DIT_TOOLBAR_ID WM_USER+11
//定义全局变量:toolbar caption


class DICToolBarWnd:public CDIMainWnd
{
public:
         void Init();
         HWND MCreateDIToolBar(HWND hwnd);
private:
         HWND  hTool;
};

//DIToolBarWnd.cpp

#include "stdafx.h"
#include "DIToolBarWnd.h"


#include "Resource.h"

int g_nCaption=0;
TBBUTTON ptoolbar[]=
{
 {0,                                                   //指定图标编号,用于按钮的以0开始的按钮图片索引
 DIT_ID1,                                          //工具条按钮的ID,按钮的CommandID
 TBSTATE_ENABLED,                  //可用状态,按钮的状态标志
 BTNS_BUTTON| BTNS_DROPDOWN,                    //指定创建一个可以下按的按钮,按钮的风格标志
 1,                                                 //保留,由应用程序定义该参数意义
 g_nCaption},           //按钮字串索引

 

 {1,DIT_ID2,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,g_nCaption},
 {2,DIT_ID3,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,g_nCaption},

 //{0,0,TBSTATE_ENABLED,TBSTYLE_SEP,0,0},

 {3,DIT_ID4,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,g_nCaption},

 ////创建一个分割按钮用的竖线
 //{0,0,TBSTATE_ENABLED,TBSTYLE_SEP,0,0},

 {4,DIT_ID5,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,g_nCaption},
 {5,DIT_ID6,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,g_nCaption},

 {6,DIT_ID7,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,g_nCaption},

 //{0,0,TBSTATE_ENABLED,TBSTYLE_SEP,0,0},

 {7,DIT_ID8,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,g_nCaption},

 ////创建一个分割按钮用的竖线
 //{0,0,TBSTATE_ENABLED,TBSTYLE_SEP,0,0},

 {8,DIT_ID9,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,g_nCaption},
 {9,DIT_ID10,TBSTATE_ENABLED,BTNS_BUTTON| BTNS_DROPDOWN,2,g_nCaption}
 

};

/////////////////////////////////////////
void DICToolBarWnd::Init()
{
 
}
//////////////////////////////////////////

HWND DICToolBarWnd::MCreateDIToolBar(HWND hwnd)
{
 HINSTANCE hInst=(HINSTANCE)GetWindowLong(hwnd,GWL_HINSTANCE);
 hTool=CreateWindowEx(
  0 ,
  TOOLBARCLASSNAME,
  0,
  WS_CHILD|WS_VISIBLE|TBSTYLE_TOOLTIPS |CCS_ADJUSTABLE|WS_BORDER,
  0,0,0,0,
  hwnd,
  0,
  hInst,
  0
  );
 /*UpdateWindow(hTool);
 ShowWindow(hTool,SW_SHOW);*/
 

 SendMessage(hTool, TB_BUTTONSTRUCTSIZE, (WPARAM)sizeof(TBBUTTON), 0);
 
 if(hTool)
 {
   TBADDBITMAP tab;                         //TBADDBITMAP结构包含了向工具栏添加的位图的信息,Win32下的位图结构
  tab.hInst=NULL;
  HBITMAP hbmp =LoadBitmap(hInst,MAKEINTRESOURCE(IDB_BITMAP2));
  tab.nID=(ULONG)hbmp; //位图资源的ID
  SendMessage(hTool,TB_ADDBITMAP,(WPARAM)10,(LPARAM)&tab);

  SIZE_T ilen;
  TCHAR buff[30];
  

  int index=0;
  lstrcpyW(buff,_T("文件"));
  ilen = _tcslen(buff);
  buff[ilen]=L'\0';
  g_nCaption = (int)SendMessage(hTool,TB_ADDSTRING,0,(LPARAM)buff);
  ptoolbar[index++].iString = g_nCaption;

  lstrcpyW(buff,_T("放大"));
  ilen = _tcslen(buff);
  buff[ilen]=L'\0';
  g_nCaption = (int)SendMessage(hTool,TB_ADDSTRING,0,(LPARAM)buff);
  ptoolbar[index++].iString = g_nCaption;

  
  lstrcpyW(buff,_T("缩小"));
  ilen = _tcslen(buff);
  buff[ilen]=L'\0';
  g_nCaption = (int)SendMessage(hTool,TB_ADDSTRING,0,(LPARAM)buff);
  ptoolbar[index++].iString = g_nCaption;

  lstrcpyW(buff,_T("移动"));
  ilen = _tcslen(buff);
  buff[ilen]=L'\0';
  g_nCaption = (int)SendMessage(hTool,TB_ADDSTRING,0,(LPARAM)buff);
  ptoolbar[index++].iString = g_nCaption;

  lstrcpyW(buff,_T("处理"));
  ilen = _tcslen(buff);
  buff[ilen]=L'\0';
  g_nCaption = (int)SendMessage(hTool,TB_ADDSTRING,0,(LPARAM)buff);
  ptoolbar[index++].iString = g_nCaption;


  lstrcpyW(buff,_T("颜色"));
  ilen = _tcslen(buff);
  buff[ilen]=L'\0';
  g_nCaption = (int)SendMessage(hTool,TB_ADDSTRING,0,(LPARAM)buff);
  ptoolbar[index++].iString = g_nCaption;

  lstrcpyW(buff,_T("调节"));
  ilen = _tcslen(buff);
  buff[ilen]=L'\0';
  g_nCaption = (int)SendMessage(hTool,TB_ADDSTRING,0,(LPARAM)buff);
  ptoolbar[index++].iString = g_nCaption;

  lstrcpyW(buff,_T("放弃"));
  ilen = _tcslen(buff);
  buff[ilen]=L'\0';
  g_nCaption = (int)SendMessage(hTool,TB_ADDSTRING,0,(LPARAM)buff);
  ptoolbar[index++].iString = g_nCaption;

  lstrcpyW(buff,_T("库"));
  ilen = _tcslen(buff);
  buff[ilen]=L'\0';
  g_nCaption = (int)SendMessage(hTool,TB_ADDSTRING,0,(LPARAM)buff);
  ptoolbar[index++].iString = g_nCaption;


  lstrcpyW(buff,_T("关于"));
  ilen = _tcslen(buff);
  buff[ilen]=L'\0';
  g_nCaption = (int)SendMessage(hTool,TB_ADDSTRING,0,(LPARAM)buff);
  ptoolbar[index++].iString = g_nCaption;


  
  

  SendMessage(hTool, TB_SETEXTENDEDSTYLE, 1, TBSTYLE_EX_DRAWDDARROWS); // 显示下拉按钮风格
  SendMessage(hTool, TB_SETEXTENDEDSTYLE, 2, TBSTYLE_EX_DRAWDDARROWS); // 显示下拉按钮风格
  SendMessage(hTool,TB_ADDBUTTONS,(WPARAM)10,(LPARAM)&ptoolbar);
  SendMessage(hTool,TB_SETBUTTONWIDTH,0,(LPARAM) MAKELONG (30,30));
  SendMessage(hTool,TB_SETBUTTONSIZE,0,(LPARAM)MAKELPARAM(30,30));
  SendMessage(hTool,TB_SETBITMAPSIZE,0,(LPARAM)MAKELONG(30,30));
  SendMessage(hTool, TB_AUTOSIZE, 0, 0);
  return hTool;
 }
 return NULL;
}

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值