vc tablectrl控件操作<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 

1        在主对话框中加入一个tab control

2        主对话框的类中增加变量CTabCtrl m_tabCtrl

3        在资源文件中增加对话框,有几个页就增加几个对话框(一个对话框对应一页)。可以在页对应的对话框中做一些基本操作,增加组件,以及组件的操作。

4    在主对话框的初始化中增加页与各对话框的连接操作,代码如下:

TCITEM   item;  

    item.mask   =   TCIF_TEXT;

 

    item.pszText   =   TEXT("参数配置");  

    m_tabCtrl.InsertItem   (0,&item);

 

    item.pszText   =TEXT(" 设备测试");

    m_tabCtrl.InsertItem   (1,&item);

 

    item.pszText   =TEXT("U盘测试");  

    m_tabCtrl.InsertItem   (2,&item);

 

    m_dlgPage1.Create(IDD_PAGE1,&m_tabCtrl);  

    m_dlgPage2.Create(IDD_PAGE2,&m_tabCtrl);

    m_dlgPage3.Create(IDD_PAGE3,&m_tabCtrl);

 

    m_dlgPage1.SetWindowPos(NULL,10,30,400,400,SWP_SHOWWINDOW);  

    m_dlgPage2.SetWindowPos(NULL,10,30,400,400,SWP_HIDEWINDOW);

    m_dlgPage3.SetWindowPos(NULL,10,30,400,400,SWP_HIDEWINDOW);

 

5    增加CTabCtrl的换页操作,在此动态显示当前选择的页

6    各个页中的操作,在各页对应的对话框中完成。

 

 

 

对话框中响应按键消息

 

在对话框中重载virtual BOOL PreTranslateMessage(MSG*   pMsg) 函数

 

BOOL CTestDlg::PreTranslateMessage(MSG*   pMsg)  

  {  

          if(pMsg->message == WM_KEYDOWN)  

          {  

                  switch(pMsg->wParam)  

                  {  

                case VK_RETURN:

                    ……

                    break;

                case VK_SPACE:

                    ……

                    break;

                case VK_ESCAPE:

                    ……

                    Break;

                  }  

            }   

          return   CDialog::PreTranslateMessage(pMsg);  

  }

 

 

 

 

设置控件的背景色和字体颜色

 

响应对话框的WM_CTLCOLOR消息:消息映射ON_WM_CTLCOLOR,以及响应函数:

HBRUSH CTestDialog::OnCtlColor(CDC* pDC,CWnd* pWnd,UINT nCtlColor)

{  

    HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);

 

    if(nCtlColor == CTLCOLOR_STATIC)  

    {

       // 设置静态控件背景色和文字的颜色

       if(pWnd->GetDlgCtrlID() == IDC_STATIC_TEST)

       {

           pDC->SetBkMode(TRANSPARENT);

           pDC->SetTextColor(RGB(0,255,255));

           return m_winBrush;

       }

    }

 

    //其他控件设置自己默认的颜色和背景刷.

    return hbr;

}

 vc中栈之局部变量

       闲来没事,在 vc6 中玩了下栈对局部变量的存储方式,主要有以下几点:
1)  栈的增长方式,是从高地址向低地址方向增长的
例如在某函数中有以下局部变量:
int nA = 1;
int nB = 2;
则: nA 是放在栈的高 32 位地址处, nB 则是放在比 nA 4 32 位低地址处
2)  数组的存放方式,是从右到左的方式依次入栈的
例如在某函数中有以下数组的局部变量:
unsigned char cArray[16] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
那么如果 cArray[15] 的地址是 A15 (代表某一个 32 16 进制的整数),那么 cArray[14] 的地址就是 A15-1
3)  不同类型变量之间的存放方式,每一个变量都是占 32 位( 4 字节对齐)
例如在某个函数中有如下定义:
unsigned char cA[3] = {1,2,3};
unsigned char c1 = 11;
unsigned char c2 = 12;
unsigned short sh1 = 21;
那么地址依次如下: addr(cA[2]) = A; addr(cA[1]) = A-1; addr(cA[0]) = A-2;
                              addr(c1) = A-2-4; addr(c2) = A-<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />2-4-4; addr(sh1) = A-2-4-4-4;
在此,对于c1, c2, sh1不论类型为unsigned char, unsigned short, char, short, int 等内置类型地址都是一样的。