在线等.. 为什么我TAB 控件 用TabCtrol_GetCurSel得到的总是0啊!

YunShell 2013-07-14 05:07:08
研究了1天tab控件的使用,可以显示出来,两个子对话框属性也是 child。标签页切换的时候就是 总是停留在第一个标签,用TabCtrol_GetCurSel获取总是得到0,我设了三个标签啊。麻烦大神帮看看代码哈!

我想要就是 标签切换的时候,相应的窗口可以显示出来..现在就只能是初始化的时候,显示一下,然后切换标签的时候总是显示在tab1..十分不解啊..明明响应了NOTIFY啊。明明切换了标签啊!在线等..
#include "stdafx.h"
#include <windows.h>
#include <windowsx.h>
#include "resource.h"
#include "MainDlg.h"
#include "commctrl.h"

HINSTANCE hinstance;
HWND hDlg_intab[2];
HWND htabctrl;
INT iCurrentPage=0;
RECT rect;

typedef int(WINAPI *DIALOGPROC)(HWND hDlg,UINT uMsg,WPARAM wParam,LPARAM lParam);
DIALOGPROC tab1_dlg_proc,tab2_dlg_proc;
DIALOGPROC DlgProc[2]={tab1_dlg_proc,tab2_dlg_proc};



BOOL WINAPI Main_Proc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
hinstance=GetModuleHandle(NULL);
switch(uMsg)
{
HANDLE_MSG(hwnd, WM_INITDIALOG, Main_OnInitDialog);
// HANDLE_MSG(hwnd, WM_COMMAND, Main_OnCommand);
HANDLE_MSG(hwnd,WM_CLOSE, Main_OnClose);
// HANDLE_MSG(hwnd,WM_SIZE,Main_OnSize);
case WM_NOTIFY:
{
if((INT)wParam==IDC_TAB)
{
if(((LPNMHDR)lParam)->code==TCN_SELCHANGE)
{
switch(TabCtrl_GetCurSel(htabctrl))
{
case 0:
{
ShowWindow(hDlg_intab[1],FALSE);
ShowWindow(hDlg_intab[0],TRUE);
MessageBox(hwnd,TEXT("当前在tab1"),TEXT(""),MB_OK);
break;
}
case 1:
{
ShowWindow(hDlg_intab[1],TRUE);
ShowWindow(hDlg_intab[0],FALSE);
MessageBox(hwnd,TEXT("当前tab2"),TEXT(""),MB_OK);
break;
}
}



}
}
break;
}
}

return FALSE;
}

BOOL Main_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam)
{
//////////////////////////////////////////////////////////// 显示tab标签
HWND htabctrl=GetDlgItem(hwnd,IDC_TAB);
TCITEM tie;
LPSTR tabname[3]={"tab1","tab2","tab3"};
tie.mask=TCIF_TEXT;
for(INT i=0;i<3;i++)
{
tie.pszText=tabname[i];
TabCtrl_InsertItem(htabctrl,i,&tie);
}
//////////////////////////////////////////////////////////////

GetClientRect(htabctrl,&rect);
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:
{
break;
}
default:
break;
}
}

void Main_OnClose(HWND hwnd)
{
EndDialog(hwnd, 0);
}
...全文
243 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
YunShell 2013-07-14
  • 打赏
  • 举报
回复
引用 4 楼 schlafenhamster 的回复:
“You can create a tab control by calling the CreateWindowEx function, specifying the WC_TABCONTROL window class.”
问题找到了,就是 htabctrl句柄出了问题,原来我以为是定义个全局变量,我又给加了句HWND ..小错误害死人啊..
schlafenhamster 2013-07-14
  • 打赏
  • 举报
回复
“You can create a tab control by calling the CreateWindowEx function, specifying the WC_TABCONTROL window class.”
YunShell 2013-07-14
  • 打赏
  • 举报
回复
引用 1 楼 schlafenhamster 的回复:
HWND htabctrl; 在哪里 Create ?
BOOL Main_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam)
{    
    ////////////////////////////////////////////////////////////  显示tab标签
    HWND htabctrl=GetDlgItem(hwnd,IDC_TAB);
这里创建的啊.
YunShell 2013-07-14
  • 打赏
  • 举报
回复
引用 1 楼 schlafenhamster 的回复:
HWND htabctrl; 在哪里 Create ?
在另外一个文件里面
	DialogBox(hInstance, MAKEINTRESOURCE(IDD_MAIN), NULL, Main_Proc);
创建的.
schlafenhamster 2013-07-14
  • 打赏
  • 举报
回复
HWND htabctrl; 在哪里 Create ?

16,550

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧