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
- Tab control
- tab control
- TAB Control
- tab control
- Tab Control
- 关于Tab control
- 使用Tab Control控件
- 如何使用Tab Control
- CCustomTabCtrl - MFC Tab Control
- VC控件 Tab Control
- Tab Control 的使用
- Android dynamic TAB Control
- tab control用法
- Tab Control应用
- Tab control控件使用方法
- mfc tab control
- MFC中的tab control
- Tab Control的使用
- AlertDialog
- HDU-2563 统计问题 递推
- loadrunner不能自动打开需要录制的程序
- 当pycharm不支持svn时,怎么处理(for windows)
- Linux下访问内存物理地址
- Tab Control
- 怎样判断自己掌握了学到的新知识
- maven下载jar包缓慢解决办法
- 黑马程序员--java--图形用户界面GUI
- 51.1
- AndroidStudio导入项目常见问题
- 数据库创建表空间
- 设计模式GOF23之单例模式实现
- Java单例设计模式