例说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;}


原创粉丝点击