工具栏、状态栏创建代码

来源:互联网 发布:矩阵向量的模 编辑:程序博客网 时间:2024/05/15 23:52

// 工具栏学习.cpp : 定义应用程序的入口点。
//

#include "stdafx.h"
#include "工具栏学习.h"
#include "Resource.h"
 
#define MAX_LOADSTRING 100
#include "CommCtrl.h "

#pragma comment(lib,"comctl32.lib")
// 全局变量:
HINSTANCE hInst;        // 当前实例
TCHAR szTitle[MAX_LOADSTRING];     // 标题栏文本
TCHAR szWindowClass[MAX_LOADSTRING];   // 主窗口类名

#define T_ID1 20000
#define T_ID2 20001
#define T_ID3 20002
#define T_ID4 20003
#define T_ID5 20004
#define T_ID6 20005
#define T_ID7 20006
#define T_ID8 20007
#define  IDR_TOOLBAR1 10000
TBBUTTON ptoolbar[8]=
{
 {0,                                                   //指定图标编号,用于按钮的以0开始的按钮图片索引
 T_ID1,                                          //工具条按钮的ID,按钮的CommandID
 TBSTATE_ENABLED,                  //可用状态,按钮的状态标志
 TBSTYLE_BUTTON,                    //指定创建一个可以下按的按钮,按钮的风格标志
 0,                                                 //保留,由应用程序定义该参数意义
 0},                                                //按钮字串索引

 {1,T_ID2,TBSTATE_ENABLED,TBSTYLE_CHECK,0,0},
 {2,T_ID3,TBSTATE_ENABLED,TBSTYLE_CHECK,0,0},
 {3,T_ID4,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0},
 //创建一个分割按钮用的竖线
 {0,0,TBSTATE_ENABLED,TBSTYLE_SEP,0,0},
 {4,T_ID5,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0},
 {5,T_ID6,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0},
 {6,T_ID7,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0},                              
};

HWND McreateToolbar(HWND hWnd,HINSTANCE hInst)
{
 HWND hTool=::CreateToolbarEx(hWnd,      //指定hWnd为父窗口,将工具条创建在上面
  WS_CHILD|WS_VISIBLE, //工具栏窗口的样式
  //TBSTYLE_FLAT|CCS_ADJUSTABLE,             
  IDR_TOOLBAR1,                               //预定义的工具条资源ID,工具栏的控件ID
  8,                                                       //在位图资源中的按钮图片数
  NULL,                         //包含图片资源的可执行文件的实例句柄,程序的实例句柄。其中包含有按钮图片资源。
  IDB_TOOLBAR,                               //按钮位图的资源ID
  ptoolbar,                                            //指向TBBUTTON结构的数组的指针
  8,                                                       //加入到工具条的按钮的个数,竖线也是一个
  16,16,16,16,sizeof(TBBUTTON));              //工具栏上的按钮的长和宽,工具栏上的图片的长和宽
 if(hTool)
 {
  TBADDBITMAP tab;                         //TBADDBITMAP结构包含了向工具栏添加的位图的信息,Win32下的位图结构
  tab.hInst=hInst;
  tab.nID=IDB_TOOLBAR;                 //位图资源的ID
  int iBmp=SendMessage(hTool,TB_ADDBITMAP,(WPARAM)8,(LPARAM)&tab);
  SendMessage(hTool,TB_ADDBUTTONS,(WPARAM)0,(LPARAM)&ptoolbar);
  return hTool;
 }
 return NULL;
}
HWND hwndStatus;
void moveStatus(HWND hwnd) 

 RECT rcClient; 
 int width[3];                       //状态栏分割数组  
 GetClientRect(hwnd, &rcClient);     //获取父窗口矩形  
 int length=rcClient.right/3;        //根据父窗口宽度来分割指定大小  
 width[0]=length;                    //状态栏第一栏宽度,为分割长度length  
 width[1]=length*2;                  //状态栏往后栏目宽度,为length*栏目标号  
 width[2]=length*3; 

 //根据width数组来设置状态栏  
 SendMessage(hwndStatus, SB_SETPARTS, 3, (LPARAM)(LPINT)width); 
 MoveWindow(hwndStatus,0,0,0,0,TRUE); 

 

HWND CreateMStatus(HWND hwnd)
{
 //创建一个状态栏  
 hwndStatus=CreateWindow(STATUSCLASSNAME,L"",SBS_SIZEGRIP|WS_CHILD | WS_VISIBLE, 
  0,0,0,0,hwnd,NULL,hInst,NULL); 
 //移动初始化状态栏  
 moveStatus(hwnd); 
 //设置状态栏分栏文本,WPARAM指定栏目  
 SendMessage(hwndStatus, SB_SETTEXT, (WPARAM)0, (LPARAM)TEXT("就绪")); 
 //使用格式化字符串来设置状态栏文本 

 TCHAR status_line[256];
 TCHAR status_size[256];
 wsprintf(status_line,TEXT("%d,%d"),1,1); 
 wsprintf(status_size,TEXT("%s"),TEXT("本地时间:2013.3.14")); 
 SendMessage(hwndStatus, SB_SETTEXT, (WPARAM)1, (LPARAM)status_line); 
 SendMessage(hwndStatus, SB_SETTEXT, (WPARAM)2, (LPARAM)status_size); 
 return NULL;
}
// 此代码模块中包含的函数的前向声明:
ATOM    MyRegisterClass(HINSTANCE hInstance);
BOOL    InitInstance(HINSTANCE, int);
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
INT_PTR CALLBACK About(HWND, UINT, WPARAM, LPARAM);

int APIENTRY _tWinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPTSTR    lpCmdLine,
                     int       nCmdShow)
{
 UNREFERENCED_PARAMETER(hPrevInstance);
 UNREFERENCED_PARAMETER(lpCmdLine);

  // TODO: 在此放置代码。
 MSG msg;
 HACCEL hAccelTable;

 // 初始化全局字符串
 LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
 LoadString(hInstance, IDC_MY, szWindowClass, MAX_LOADSTRING);
 MyRegisterClass(hInstance);

 // 执行应用程序初始化:
 if (!InitInstance (hInstance, nCmdShow))
 {
  return FALSE;
 }

 hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_MY));

 // 主消息循环:
 while (GetMessage(&msg, NULL, 0, 0))
 {
  if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
  {
   TranslateMessage(&msg);
   DispatchMessage(&msg);
  }
 }

 return (int) msg.wParam;
}

 

//
//  函数: MyRegisterClass()
//
//  目的: 注册窗口类。
//
//  注释:
//
//    仅当希望
//    此代码与添加到 Windows 95 中的“RegisterClassEx”
//    函数之前的 Win32 系统兼容时,才需要此函数及其用法。调用此函数十分重要,
//    这样应用程序就可以获得关联的
//    “格式正确的”小图标。
//
ATOM MyRegisterClass(HINSTANCE 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_MY));
 wcex.hCursor  = LoadCursor(NULL, IDC_ARROW);
 wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
 wcex.lpszMenuName = NULL;//MAKEINTRESOURCE(IDC_MY);
 wcex.lpszClassName = szWindowClass;
 wcex.hIconSm  = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));

 return RegisterClassEx(&wcex);
}

//
//   函数: InitInstance(HINSTANCE, int)
//
//   目的: 保存实例句柄并创建主窗口
//
//   注释:
//
//        在此函数中,我们在全局变量中保存实例句柄并
//        创建和显示主程序窗口。
//
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
   HWND hWnd;

   hInst = hInstance; // 将实例句柄存储在全局变量中

  

   hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
      CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);

   if (!hWnd)
   {
      return FALSE;
   }

   ShowWindow(hWnd, nCmdShow);
   UpdateWindow(hWnd);

   return TRUE;
}

//
//  函数: WndProc(HWND, UINT, WPARAM, LPARAM)
//
//  目的: 处理主窗口的消息。
//
//  WM_COMMAND - 处理应用程序菜单
//  WM_PAINT - 绘制主窗口
//  WM_DESTROY - 发送退出消息并返回
//
//
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
 int wmId, wmEvent;
 PAINTSTRUCT ps;
 HDC hdc;

 switch (message)
 {
 case WM_CREATE:
  {

   
    McreateToolbar( hWnd,hInst);
    CreateMStatus(  hWnd);
   break;
  }
 
 case WM_COMMAND:
  wmId    = LOWORD(wParam);
  wmEvent = HIWORD(wParam);
  // 分析菜单选择:
  switch (wmId)
  {
  case T_ID1:
   {
    DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
    break;
   }
  case IDM_ABOUT:
   DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
   break;
  case IDM_EXIT:
   DestroyWindow(hWnd);
   break;
  default:
   return DefWindowProc(hWnd, message, wParam, lParam);
  }
  break;
 case WM_PAINT:
  hdc = BeginPaint(hWnd, &ps);
  // TODO: 在此添加任意绘图代码...
  EndPaint(hWnd, &ps);
  break;
 case WM_DESTROY:
  PostQuitMessage(0);
  break;
 default:
  return DefWindowProc(hWnd, message, wParam, lParam);
 }
 return 0;
}

// “关于”框的消息处理程序。
INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
 UNREFERENCED_PARAMETER(lParam);
 switch (message)
 {
 case WM_INITDIALOG:
  return (INT_PTR)TRUE;

 case WM_COMMAND:
  if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
  {
   EndDialog(hDlg, LOWORD(wParam));
   return (INT_PTR)TRUE;
  }
  break;
 }
 return (INT_PTR)FALSE;
}

原创粉丝点击