例說WIN32 Tab控制元件使用
今天查詢了一天關於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,lparam
tie.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;
}
相關文章
- DevExpress控制元件使用系列--ASPxGridView+Popup+TabdevExpress控制元件View
- WIN32 控制元件基礎Win32控制元件
- win32 sdk下呼叫webbrowser控制元件Win32Web控制元件
- Win32系統服務說明Win32
- JavaScript禁用tab鍵程式碼例項JavaScript
- CSS 例項系列 - 01 - Tab 滑動門CSS
- js如何禁用tab鍵例項程式碼JS
- Win32 SDK建立RichEdit Control控制元件Win32控制元件
- Android UI控制元件系列:Tab Layout(選項卡布局)AndroidUI控制元件
- WebBrowser 控制元件-說明Web控制元件
- 純css tab選項卡程式碼例項CSS
- jQuery tab選項卡效果程式碼例項jQuery
- 原生js tab選項卡程式碼例項JS
- tab選項卡切換例項程式碼
- 使用Bootstrap tab頁切換的使用boot
- Win32彙編教程七 控制元件的子類化 (轉)Win32控制元件
- 純CSS的導航欄Tab切換例項CSS
- jQuery實現的tab選項卡程式碼例項jQuery
- Mongoose使用population建立關係連結例項說明Go
- 純css實現的tab選項卡程式碼例項CSS
- css3實現tab選項卡程式碼例項CSSS3
- DevExpress XtraScheduler日程管理控制元件應用例項(1)-- 基本使用devExpress控制元件
- demo簡說幾種控制元件一控制元件
- TestLink測試用例管理工具使用說明
- pyhanlp使用者自定義詞典新增例項說明HanLP
- ES API,使用Kibana的開發工具用例說明API
- 在 Win32 Application 和 Win32 Console Application 中使用 MFC (轉)Win32APP
- win32 單例項程式執行-無視窗程式也可Win32單例
- Win32 SDK封閉例項——普通的Windows程式(翻譯) (轉)Win32Windows
- java中的單例模式,舉例說明。Java單例模式
- 使用JavaScript設定Tab欄自動切換JavaScript
- 物件導向實現的tab選項卡效果程式碼例項物件
- 檔案系統管理 之 例項解說 fdisk 使用方法
- 例項解說Linux中fdisk分割槽使用方法(轉)Linux
- vue學習:使用tab標籤頁時,重新整理頁面停留在當前tabVue
- Delphi Win32 API 使用的特殊情況 (轉)Win32API
- 瀏覽器子Tab能控制父Tab嗎瀏覽器
- 說說Vue 3.0中Treeshaking特性?舉例說明一下?Vue