CTabCtrl标题栏颜色改变以及tab换成自己按钮及内嵌对话框用法

CTabCtrl本次用途:CTabCtrl用来实现同一个DLG加载多个DLG功能,即在A对话框中可以通过标签将BCDE。。。对话框嵌入进来。

问题1:原对话框有底色,如何使得整个对话框颜色统一?

解决办法,继承CTabCtrl,重载OnEraseBkgnd函数。当然VC6通过ctrl+W加入。内容如下:

CBrush br(RGB(245,255,255));
CRect rc;
GetClientRect(rc);
pDC->FillRect(rc, &br);
return true;

在主对话框中使用继承的类来进行对象实例化。Then.Perfect!

 

问题2:Tab标签丑陋,希望加入自己绘制的按钮?

解决办法:在对话框中加入tabCtrl,实例化对象,改为上面描述的类。在OnInitDialog方法内。需要几个标签创建几个按钮,下面代码为m_BTN1-4,内嵌对话框,首先将style改为child,然后下文中m_tab_1-3为3个不同对话框在该类中的成员变量。最后将按钮移入该放入的位置.

 CRect rs;
 m_tab.GetClientRect(&rs);

 rs.top+=32;

 rs.bottom-=0;
 rs.left+=0;
 rs.right-=0;
 m_tab.InsertItem(0,"");
 m_tab.InsertItem(1,""); 
 m_tab.InsertItem(2,"");   
 m_tab.InsertItem(3,"");   
 m_tab_1.Create(IDD_Login,&m_tab);//或者Create(IDD_DIALOG1,GetDlgItem(IDC_TAB1));
 m_tab_2.Create(IDD_Search,&m_tab);
 m_tab_3.Create(IDD_BBS,&m_tab);
 m_tab_1.MoveWindow(&rs);
 m_tab_2.MoveWindow(&rs);
 m_tab_3.MoveWindow(&rs);
 m_tab_1.ShowWindow(true);
 m_tab_2.ShowWindow(false);
 m_tab_3.ShowWindow(false);


 m_BTN1.LoadBitmaps(IDB_TOPLOGIN,IDB_TOPLOGIND,NULL,IDB_TOPLOGIND); 
 m_BTN2.LoadBitmaps(IDB_TOPSer,IDB_TOPSerD,IDB_TOPSerF,IDB_TOPSerD);
 m_BTN3.LoadBitmaps(IDB_TOPBBS,IDB_TOPBBSD,IDB_TOPBBSF,IDB_TOPBBSD);
 m_BTN4.LoadBitmaps(IDB_TOPBUY,IDB_TOPBUYD,NULL,IDB_TOPBUYD);

 

 CRect rectItem;
 for(int j=0; j< m_tab.GetItemCount();j++)
 {
  m_tab.GetItemRect(j, rectItem);
  rectItem.top=75;
  rectItem.bottom=105;
  switch(j){
  case 0:
   m_BTN1.MoveWindow(rectItem);
   break;
  case 1:
   m_BTN2.MoveWindow(rectItem);
   break;
  case 2:
   m_BTN3.MoveWindow(rectItem);
   break;
  case 3:
   m_BTN4.MoveWindow(rectItem);
   break;
  }

 

 

 

添加按钮响应函数:如下发送消息来切换内嵌对话框

m_tab.SetCurSel(2);
 NMHDR   nm;
 nm.hwndFrom   =   m_tab.m_hWnd;
 nm.code   =   TCN_SELCHANGE;
 SendMessage(WM_NOTIFY,IDC_TAB1,(LPARAM)&nm);

添加OnSelchangeTab1:

switch(m_tab.GetCurSel())
 {
 case 0:
  if(IsLogin){
   break;
  }
  m_tab_1.ShowWindow(true);  
  m_tab_2.ShowWindow(false);
  m_tab_3.ShowWindow(false);
  break;
 case 1: 
  if(!IsLogin){
   break;
  }
  m_tab_1.ShowWindow(false);  
  m_tab_2.ShowWindow(true); 
  m_tab_3.ShowWindow(false);
  break;
 case 2: 
  if(!IsLogin){
   break;
  }
  m_tab_1.ShowWindow(false);  
  m_tab_2.ShowWindow(false); 
  m_tab_3.ShowWindow(true);
  break;
 }
 *pResult = 0;

 

 

你可能感兴趣的:(C++)