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 等内置类型地址都是一样的。
转载于:https://blog.51cto.com/bluefish/158445