例说WIN32 Tab控件使用
来源:互联网 发布:js array lastindexof 编辑:程序博客网 时间:2024/06/09 07:02
今天查找了一天关于SDK下,TAB控件的使用,到处都是MFC,C++的,本人还没开始学习C++,所以只能学习SDK方式使用TAB控件,搞了一天终于搞定了 ,现在在这里记录下,以便后来人有需要。
先直接上效果图:
就是当点击本地列表的时候,弹出左图,点击网络收藏的时候弹出右图。然后在相应的标签页点击响应的按钮,弹出个对话框,来响应子对话框的消息.
具体实现见下面代码:
#include "stdafx.h"#include <windows.h>#include <windowsx.h>#include "resource.h"#include "MainDlg.h"#include "commctrl.h" //高级控件都要加该头文件HINSTANCE hinstance; //程序实例句柄HWND hDlg_intab[2];//两个要载入到TAB控件中的对话框句柄HWND htabctrl;// TAB控件的句柄BOOL WINAPI tab1_dlg_proc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);//两个子窗口的窗口处理过程函数申明BOOL WINAPI tab2_dlg_proc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);typedef BOOL(WINAPI *DIALOGPROC)(HWND hDlg,UINT uMsg,WPARAM wParam,LPARAM lParam); //定义一个 函数指针DIALOGPROC DlgProc[2]={tab1_dlg_proc,tab2_dlg_proc};BOOL WINAPI Main_Proc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam){//NMHDR *nm = (NMHDR *)lParam; hinstance=GetModuleHandle(NULL); //获取程序实例 传给全局变量hinstance switch(uMsg) { HANDLE_MSG(hwnd, WM_INITDIALOG, Main_OnInitDialog);//初始化函数HANDLE_MSG(hwnd, WM_COMMAND, Main_OnCommand);//命令接收函数HANDLE_MSG(hwnd,WM_CLOSE, Main_OnClose);//关闭对话框函数case WM_NOTIFY: //TAB控件切换发生时传送的消息{if((INT)wParam==IDC_TAB) //这里也可以用一个NMHDR *nm = (NMHDR *)lParam这个指针来获取 句柄和事件{//读者可自行查找NMHDR结构if(((LPNMHDR)lParam)->code==TCN_SELCHANGE) //当TAB标签转换的时候发送TCN_SELCHANGE消息{int sel=TabCtrl_GetCurSel(htabctrl); switch(sel)//根据索引值查找相应的标签值,干相应的事情{case 0: //TAB1标签时,我们要显示 tab1标签页面{ShowWindow(hDlg_intab[0],TRUE); //显示窗口用ShowWindow函数ShowWindow(hDlg_intab[1],FALSE);break;}case 1://TAB2标签时,我们要显示 tab2标签页面{ShowWindow(hDlg_intab[0],FALSE);ShowWindow(hDlg_intab[1],TRUE);break;}}}}break;} } return FALSE;}//初始化对话框,加载两个TAB标签页 显示BOOL Main_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam){//////////////////////////////////////////////////////////// 显示tab标签htabctrl=GetDlgItem(hwnd,IDC_TAB);TCITEM tie;//设置tab标签的属性LPSTR tabname[3]={"本地列表","网络收藏","网络电台"}; //定义一个二维数组 存放tab标签名字//具体开始设置 tie的字段 Mask psztext,ccxtextmax,image,lparamtie.mask=TCIF_TEXT|TCIF_IMAGE;//psztext字段有效 tie.iImage = -1; for(INT i=0;i<3;i++){tie.pszText=tabname[i];TabCtrl_InsertItem(htabctrl,i,&tie);}////////////////////////////////////////////////////////////// //在tab标签中显示 别的控件RECT rect;//存放tab控件的区域位置GetClientRect(htabctrl,&rect);// 将两个窗口往 tab控件位置移动for(i=0;i<2;i++){hDlg_intab[i]=CreateDialog(hinstance,MAKEINTRESOURCE(IDD_DIALOG1+i),htabctrl,DlgProc[i]);MoveWindow(hDlg_intab[i],2,29,rect.right - rect.left-6,rect.bottom - rect.top-35,FALSE);}ShowWindow(hDlg_intab[0],SW_SHOW); return TRUE;}void Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify){ switch(id) { case IDC_OK:{MessageBox(hwnd,TEXT("你按了主对话框的确定"),TEXT(""),MB_OK); break;} default:break; }}void Main_OnClose(HWND hwnd){ EndDialog(hwnd, 0);}BOOL WINAPI tab1_dlg_proc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {switch(uMsg){case WM_INITDIALOG:return TRUE; case WM_COMMAND:switch(wParam){case IDC_HELLO_TAB1:{MessageBox(hwnd,TEXT("你按了tab1标签问好"),TEXT(""),MB_OK);break;}}break;case WM_CLOSE:EndDialog(hwnd,0);return FALSE;}return FALSE;}BOOL WINAPI tab2_dlg_proc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {switch(uMsg){case WM_INITDIALOG:return TRUE; case WM_COMMAND:switch(wParam){case IDC_HELLO_TAB2:{MessageBox(htabctrl,TEXT("你按了tab2标签问好"),TEXT(""),MB_OK);break;}}break;case WM_CLOSE:EndDialog(hwnd,0);return FALSE;}return FALSE;}
- 例说WIN32 Tab控件使用
- Win32控件-------Tab控件基本架构
- Tab控件--VC2010 使用TAB控件
- 使用Tab Control控件
- Tab控件的使用
- Tab 控件使用例子
- Tab控件的使用
- VC++ TAB控件使用
- tab控件使用
- 使用标签控件Tab
- Tab控件的使用
- VC2010 使用TAB控件
- VC2010 Tab控件使用
- VC2010 使用TAB控件
- |tab控件的使用|
- Tab控件使用心得
- mfc tab控件使用
- MFC tab控件使用
- java动态代理(JDK和cglib)
- Android tutorial: How to make a basic splash screen
- Selenium 2.0的由来及设计架构(一)
- 看《_beginthreadex和CreateThread的区别和联系》的补遗
- android Debug时提示source not found
- 例说WIN32 Tab控件使用
- 几何和网络流的结合 战火星空
- Java基础之面向对象(六)--异常、包
- Android记事本【1】
- Makefile
- Tomcat - 认识
- 设计模式C++实现(7)——外观模式、组合模式
- solaris系统用ps命令查看进程占用的CPU、内存等情况
- 如何提高意志力&如何坚持每天学习