作者:BB高擎天的空间
转自:http://hi.baidu.com/cahbb/item/99538a17c99c384ce75e064a
前一段时间要做一个小程序,用到了一些控件,也是找了些资料,再加上实际试验,证实了可用的使用方法,现记录如下,以方便自己及他人查询调用。
基于对话框得到键盘消息方法:
在实际使用时有一个问题,我在基于对话框的窗中,再加上一个Tab控件,这时,主窗口就得不到消息了,这时候,下面的函数就用在Tab控件中的最后一个分页面去做定义,这样才能得到键盘消息。个人认为,最后一个分页它在最上面,它是活动页,所以能得到消息。
在。h头文件中加入函数的定义 public型
BOOL CkeyDlg::PreTranslateMessage(MSG* pMsg) ;
在dlg。cpp中加入
BOOL CkeyDlg::PreTranslateMessage(MSG* pMsg)
{
if(pMsg->message==WM_KEYDOWN) // && pMsg-> hwnd==GetSafeHwnd())
{
switch(pMsg->wParam)
{
case VK_UP://各上的键
MessageBox(TEXT("dd"));
break;
}
}
return CDialog::PreTranslateMessage(pMsg);
}
//-------TabControl 使用方法-----------
环境:VS2005,基与对话框程序。
1:在主窗口增加TABcontrol 控件
2:右键增加控件变量CTabCtrl m_tab
3: 新建三个对话框(在资源中插入资源对话框),其中属性项-》Style->child,Border->none.
4: 在新建的窗口上右键,增加新类起个名子CPage1到3.
5:在主窗口中手动加入全局变量
CPage1 m_page1;
CPage2 m_page2;
CPage3 m_page3;
6:在主窗口的.h头文件中加入
#include "Page1.h"
#include "Page2.h"
#include "Page3.h"
7:在主窗口的OnInitDialog函数中加入初始化代码
m_tab.InsertItem(0, _T("1自动工作"));
m_tab.InsertItem(1, _T("2手动工作"));
m_tab.InsertItem(2, _T("3配置"));
m_page1.Create(IDD_DIALOG1, &m_tab);//关联窗口与tab页
m_page2.Create(IDD_DIALOG2, &m_tab);
m_page3.Create(IDD_DIALOG3, &m_tab);
//设定在Tab内显示的范围
CRect rc;
m_tab.GetClientRect(rc);
rc.top += 20;
rc.bottom -= 2;
rc.left += 2;
rc.right -= 2;
m_page1.MoveWindow(&rc);//移动到定点位置
m_page2.MoveWindow(&rc);
m_page3.MoveWindow(&rc);
//显示初始页面
m_page1.ShowWindow(TRUE);
m_page2.ShowWindow(FALSE);
m_page3.ShowWindow(FALSE);
m_tab.SetCurSel(0);
8:先选中TAB控件,在属性页中,点击“控件事件”(闪电)。
找到TCN_SELCHANGE,增加OnTcnSelchangeTab事件函数
int CurSel = m_tab.GetCurSel(); //得到当前是第几属性页序列号
switch(CurSel)
{
case 0:
m_page1.ShowWindow(true);
m_page2.ShowWindow(false);
m_page3.ShowWindow(false);
break;
case 1:
m_page1.ShowWindow(false);
m_page2.ShowWindow(true);
m_page3.ShowWindow(false);
break;
case 2:
m_page1.ShowWindow(false);
m_page2.ShowWindow(false);
m_page3.ShowWindow(true);
break;
default:
;
//===================================================
//---为窗体增加背景图片---
1:在资源视图中,找到Bitmap目录,
右键增加 资源 -》导入-》找到准备好的bmp图片。
2: 在要操作窗体的.h头文件中加入
CBrush m_brBk;//在public中定义
3:在类视图,找到想要加图片的类,因这个类没有OnInitDialog初始化函数,
所以要给它加一个OnCreate函数.
选中类视图中,找到那个窗口类,再点击,增加消息WM_CREATE
在OnCreate函数中加入
CBitmap bmp;
bmp.LoadBitmap(IDB_BITMAP4);
m_brBk.CreatePatternBrush(&bmp);
bmp.DeleteObject();
4:在类视图,选中操作的类,增加消息WM_CTLCOLOR
在OnCtlColor函数中加入
if (pWnd == this)
{
return m_brBk;
}
//----在WINCE 环境下为窗体增加图片方法----
在资源视图下,找到那个窗体,增加消息PAINT,示例如下:
void CPage3::OnPaint()
{
CPaintDC dc(this); // device context for painting
// TODO: 在此处添加消息处理程序代码
// 不为绘图消息调用 CDialog::OnPaint()
CRect rect;
GetClientRect(&rect);
CDC dcMem;
dcMem.CreateCompatibleDC(&dc);
CBitmap bmpBackground;
bmpBackground.LoadBitmap(IDB_BITMAP1);
//IDB_BITMAP是你自己的图对应的ID
//这个资源我在做时,如果VS环境下的路径和wince不一致的话,也会出现加载失败,后来,我在上位机也做一个和wince一样的路径进行加载,这样在wince也能正常显示了。
BITMAP bitmap;
bmpBackground.GetBitmap(&bitmap);
CBitmap *pbmpOld=dcMem.SelectObject(&bmpBackground);
dc.StretchBlt(0,0,rect.Width(),rect.Height(),&dcMem,0,0,
bitmap.bmWidth,bitmap.bmHeight,SRCCOPY);
}
//========================================
//-----将按钮加上图片显示------
1:在窗口上放一个BUTTON控件
2:将BITMAP属性设成true,再将 owenr Draw设成true
3:在这个控件上右键,增加一个控件变量
4:在这个窗体的.h头文件中找到这个控件定义,
如 CButton Mybut; 将其改成CBitmapButton Mybut;
5: 在窗口的初始化函数中加入如下
MyDia4Btn1.LoadBitmaps(IDB_BITMAP5,IDB_BITMAP6);
第一项为默认状态,第二项为按下状态。
//===============================================
//---------------------------
子对话框调用主对话框中的函数:试验环境是,子对话框中加入了tab控件,在tab控件中增加的对话框。
示例:
主对话框类的名子:Cmfc_dialog_tabDlg
第一个GetParent()得到的是tab控件的父窗口,第二个是子对话框的父窗口,就是主对话框了。
TestMessag()这个函数是在主对话框中定义的一个函数。
Cmfc_dialog_tabDlg *pDlg = (Cmfc_dialog_tabDlg *)GetParent()->GetParent();
pDlg->TestMessage();
同理,在这样的环境中,第一子对话框调用第三个子对话框中的函数 使用方法:
说明:CPage3 是第三个子窗口类的名子, OnBnClickedButton1(),是第三个窗口中的一个函数。
CPage3 *MyPage3 =(CPage3 *)GetParent();
MyPage3->OnBnClickedButton1();
//=======================================
//---------------------------
Edit Control 控件 组成数组使用方法:
1:在要使用的.cpp文件中 手动定义全局变量
例:float MyDia3[6];
2:在窗口中定义四个Edit control控件,将这几个控件关联数值型成员变量。
3:找到这几个变量关联的地方,将最后一项,手动改成你定义的数组名的变量。
void CPage3::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Text(pDX, IDC_EDIT1, MyDia3[0]);
DDX_Text(pDX, IDC_EDIT2, MyDia3[1]);
DDX_Text(pDX, IDC_EDIT3, MyDia3[2]);
DDX_Text(pDX, IDC_EDIT4, MyDia3[3]);
DDX_Radio(pDX, IDC_RADIO1, MyRadio);
}
UpdateData(FALSE); 将数据刷新到Edit control 控件中。
TRUE ;将控件中的数据刷新到变量中。
//===========================
//----------------------------------------------------
static text 静态文本 使用操作方法
然后在ClassWizard中设定一个控件变量给它叫m_statictitle
然后用m_statictitle.SetWindowText("你要写的字串");updata(False);
方法2,给STATIC控件取个名字叫IDC_STATICTITLE
GetDlgItem(IDC_STATICTITLE)->SetWindowText(_T("你要写的字串"));updata(False);
方法3,给STATIC控件取个名字叫IDC_STATICTITLE
然后在ClassWizard中设定一个CString变量给它叫m_statictitle
然后用m_statictitle = "你要写的字串";updata(False);
方法4:
给STATIC控件取名IDC_STATIC1,SetDlgItemText(IDC_STATIC1,_T("你要写的字符串");
//=====================================