Tab Control

来源:互联网 发布:淘宝美工作品展示 编辑:程序博客网 时间:2024/04/29 10:33

新建一个空的win32工程

1.插入一个DIALOG主窗口 ,拖入一个Tab Control控件命名为IDC_TAB1(这里使用默认的名字)

2.依次插入3个DIALOG窗口命名为IDD_TAB1、IDD_TAB2、IDD_TAB3,属性“Title Bar”为False,“Style”为Child。

其他代码略过,下面是Tab Control控件操作代码(下面附件附带源代码vs2008编译通过)

 

TabControl.h

#ifndef TABCONTROL_HEADFILE#define TABCONTROL_HEADFILE#pragma once#include "HeadFile.h"//窗口回调函数INT_PTR CALLBACK TAB1(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);INT_PTR CALLBACK TAB2(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);INT_PTR CALLBACK TAB3(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);class CTabControl{public://构造函数CTabControl();//析构函数~CTabControl();//变量定义public:HWNDm_TablehWnd[TabSum];            //Tab窗口句柄//静态定义public:static CTabControl* GetInstance(){return m_pTabControl;}        //获取实例static CTabControl* m_pTabControl;                              //静态定义//函数定义public://初始化控件bool OnInitTableControl(void);//测试函数void ShowMessage(void);};extern CTabControl   g_TabControl;          //全局单元  #endif

 

 

 

 


TabControl.cpp

#include "TabControl.h"#include "resource.h"//静态区  CTabControl * CTabControl::m_pTabControl=NULL;   //全局区  CTabControl  g_TabControl;  //构造函数CTabControl::CTabControl(){assert(m_pTabControl==NULL);  if (m_pTabControl==NULL)m_pTabControl=this;      ZeroMemory(m_TablehWnd,sizeof(m_TablehWnd));}//析构函数CTabControl::~CTabControl(){}//初始化控件bool CTabControl::OnInitTableControl( void ){m_TablehWnd[0]=CreateDialog(win.hInst,MAKEINTRESOURCE(IDD_TAB1),win.hwnd,TAB1);m_TablehWnd[1]=CreateDialog(win.hInst,MAKEINTRESOURCE(IDD_TAB2),win.hwnd,TAB2);m_TablehWnd[2]=CreateDialog(win.hInst,MAKEINTRESOURCE(IDD_TAB3),win.hwnd,TAB3);win.hTable=GetDlgItem(win.hwnd,IDC_TAB1);TCITEM tic;tic.mask=TCIF_TEXT;tic.pszText=TEXT("标签3");SendMessage(win.hTable,TCM_SETITEMSIZE,0,MAKELPARAM(80,30));   //设置标签宽度和高度SendMessage(win.hTable, TCM_INSERTITEM, 0, (LPARAM) &tic);tic.pszText=TEXT("标签2");SendMessage(win.hTable,TCM_SETITEMSIZE,0,MAKELPARAM(80,30));   //设置标签宽度和高度SendMessage(win.hTable, TCM_INSERTITEM, 0, (LPARAM) &tic);tic.pszText=TEXT("标签1");SendMessage(win.hTable,TCM_SETITEMSIZE,0,MAKELPARAM(80,30));   //设置标签宽度和高度SendMessage(win.hTable, TCM_INSERTITEM, 0, (LPARAM) &tic);RECT rtTabCtl;//Tab控件位置GetWindowRect(win.hTable,&rtTabCtl);for(int i = 0; i <TabSum; i++){RECT rtTab={0};GetWindowRect(m_TablehWnd[i], &rtTab);int x,y,cx,cy;POINT point,point1;point.x=rtTabCtl.left;point.y=rtTabCtl.top;ScreenToClient(win.hwnd,&point);x=point.x;y=point.y;point1.x=rtTabCtl.right;point1.y=rtTabCtl.bottom;ScreenToClient(win.hwnd,&point1);cx=point1.x-x;cy=point1.y-y;SetWindowPos(m_TablehWnd[i], NULL, x, y+30, cx,cy,SWP_NOZORDER | SWP_NOREDRAW);//IDD_TAB1的XY坐标等于IDC_TABLE1控件的XY坐标  通过ScreenToClient函数将屏幕XY坐标转换客户区坐标。GetWindowRect是屏幕坐标//IDD_TAB1的CX,CY是。right-left,bottom-top就是宽带和高度。}ShowWindow(m_TablehWnd[0],SW_SHOW);SendMessage(win.hTable, TCM_SETCURSEL, 0, 0);return true;}//测试函数void CTabControl::ShowMessage( void ){    MessageBox(NULL,TEXT("测试一下"),TEXT("提示"),MB_OK);return;}//窗口回调函数INT_PTR CALLBACK TAB1( 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){CTabControl::GetInstance()->ShowMessage();EndDialog(hDlg, LOWORD(wParam));return (INT_PTR)TRUE;}break;}return (INT_PTR)FALSE;}//窗口回调函数INT_PTR CALLBACK TAB2( 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){CTabControl::GetInstance()->ShowMessage();EndDialog(hDlg, LOWORD(wParam));return (INT_PTR)TRUE;}break;}return (INT_PTR)FALSE;}//窗口回调函数INT_PTR CALLBACK TAB3( 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){CTabControl::GetInstance()->ShowMessage();EndDialog(hDlg, LOWORD(wParam));return (INT_PTR)TRUE;}break;}return (INT_PTR)FALSE;}


 

 

 

EventMessage.cpp

主窗口初始化CTabControl::GetInstance()->OnInitTableControl();  主窗口消息循环case WM_NOTIFY:{switch(etat->code){case TCN_SELCHANGE:{//获取选择int iSel = SendMessage(win.hTable, TCM_GETCURSEL, 0, 0);//显示窗口for(int i = 0; i <TabSum; i++){if(i==iSel) ShowWindow(CTabControl::GetInstance()->m_TablehWnd[i],SW_SHOW);else ShowWindow(CTabControl::GetInstance()->m_TablehWnd[i],SW_HIDE);}}break;default:break;}}break;

 

源码下载
http://share.weiyun.com/3954a646d644caf58f09b640f001a0a2

0 0
原创粉丝点击