卷二 MFC中简单控件使用

来源:互联网 发布:凯程网络课程 编辑:程序博客网 时间:2024/05/22 11:36

1.EDIT CONTROL

顾名思义,是用来编辑的。假设我们使用它的默认ID,IDC_EDIT1,编辑框常用的就是基本的输入输出了。

CString s;
GetDlgItem(IDC_EDIT1)->GetWindowText(s);

这样我们就得到了编辑框中的内容并保存到s变量中。其中GetDlgItem(控件ID)得到的是该控件的指针,之后再通过这个指针进行调用成员函数GetWindowText().也可以直接使用GetDlgItemText函数,两个参数,一步到位。或者绑定一个变量,m_ed.GetWindowText(s);直接通过变量进行调用,都是可以的。与Get相对应的是Set,用法几乎完全一样。


2.Button

按钮可谓是最常见的控件了,通常是点击某个按钮,响应点击事件。普通的按钮没什么好说的,不过有一个MFCButton可以一谈。可以将普通按钮的ID与MFCButton的ID设为一致,这样这个动态创建的Button就是一个分身了。下面有一些具体的用法,包括颜色的设定,光标的变化,tips之类...

CMFCButton * button = new CMFCButton;
button->Create(_T("清空"),WS_VISIBLE,CRect(5, 15, 120, 50),this,IDC_BUTTON_TEST);
//这里的id与自己在工具那拖动的按钮id设为一样的,,这样的话当前创建的按钮就等同于自己拖的那个按钮,对那个按钮的操作函数在这个按钮处同样可以
//实现,然后将拖的那个按钮visible设为false

//button->SetWindowText(_T("强制更改"));//更改按钮上面的文字
button->SetAutorepeatMode();
button->SetFaceColor(RGB(0, 255, 0));// 更改背景颜色 
button->SetTextColor(RGB(255,0, 0));// 更改字体颜色 
button->SetTextHotColor(RGB(0, 0, 204));//热点颜色,即鼠标移到这里显示的颜色
//button->MoveWindow(50, 50, 100, 70);// 更改按钮位置 
button->SetMouseCursorHand();// 鼠标经过时变成手势 
button->SetTooltip(_T("清空"));// 鼠标停留时的提示 


CMFCButton * button1 = new CMFCButton;
button1->Create(_T("Test Button"),WS_VISIBLE,CRect(220, 55, 270, 80),this,IDC_BUTTON_TEST);
// 加载图片 
button1->SetImage(IDB_BITMAP1);
//button1->SizeToContent();

3.对话框,模态与非模态

所谓模态,就是点出来后,父窗口就不能

操作了,常见软件的设置窗口都用模态对话框,模态对话框的使用很简单,两行代码就可以解决,假设对应的窗口类为CTestDlg,直接创建它的对象,调用DoModal函数即可。

CTestDlg dlg;
dlg.DoModal();

非模态:就是父窗口可以操作的那种了

使用方法:在父类中定义一个子对话框的指针,注意,不能在要使用的时候再定义,因为局部变量的生存周期到该函数结束后,这样的话将会出错。

CTestDlg * pDlg;

pDlg=new CTestDlg;

pDlg->Create(ID);//对话框的id

pDlg->ShowWindow(SW_SHOWNORMAL);//还有HIDE,SW_SHOWMINIMIZED,SW_SHOWMAXIMIZED之类,具体见ShowWindow的方式


对于主对话框,可以通过一个全局函数AfxGetMainWnd得到主对话框指针,通过这个指针可以对主对话框进行操作

4.复选框的使用
CButton *pBt = (CButton*)GetDlgItm(复选框ID);
int state = pBt->Getcheck();
switch(state)
{
case 0: //0代表未选中状态
case 1: //1代表选中状态
}

5.单选框(radio)
1)首先要分组,第一个groupe设为true,所有的Tabstop都设为TRUE
2)给第一个定义int变量
3)变量的值对应单选框的选定 依次为0,1,2...
4)调用时先UpdateData(TRUE);再根据变量的值确定哪个按钮被选中了

6.combo的使用

例:CString con;
GetDlgItemText(IDC_COMBO1,con);//通过这个来得到当前选中的是哪一项
1)向控件添加 Items
m_cbExample.AddString(“StringData1”);
2)也可以调用函数 InsertString() 将 Item 插入指定位置 nIndex,如:
m_cbExample.InsertString( nIndex, “StringData” );
3)选取制定行的Item
int nIndex = m_cbExample.GetCurSel();
CString strCBText;
m_cbExample.GetLBText( nIndex, strCBText);
4)删除指定行
m_cbExample.DeleteString(nIndex);

7.滚动条的使用(Slider控件)
控件变量.SetPos(**); //用于设定滚动条的位置
控件变量.SetRange(0,100); //用于设定滚动条的范围
控件变量.GetPos(**); //用于获取当前滚动条的位置

8.菜单
CMenu menu;
menu.LoadMenuW(IDR_MENU2);//加载资源菜单栏,IDR_MENU1为资源视图里菜单的ID
SetMenu(&menu);   

注:右键菜单常用的是获取右键光标位置进行显示

POINT pt;
GetCursorPos(&pt);
CMenu menu;
menu.LoadMenu(IDR_MENU1);
CMenu *pMenu = menu.GetSubMenu(0);
pMenu->TrackPopupMenu(0, pt.x, pt.y,this);

菜单图标

bitmap.LoadBitmap(IDB_BITMAP1);
POINT pt;
GetCursorPos(&pt);
int x = pt.x;
int y = pt.y;
CMenu *pmenu;
CMenu menu;
menu.LoadMenu(IDR_MENU1);
pmenu=menu.GetSubMenu(0);//子菜单,0代表主菜单的第一个子菜单
pmenu->SetMenuItemBitmaps(0, MF_BYPOSITION, &bitmap, &bitmap);
pmenu->TrackPopupMenu(NULL, x, y,this);
//SetMenu(&menu);
bitmap.DeleteObject();

9.ListControl表格

//注:listcontrol风格需要设置成report风格
m_list.SetExtendedStyle(LVS_EX_GRIDLINES|LVS_EX_FULLROWSELECT);//设置拓展风格
m_list.InsertColumn(0, _T("编号"), LVCFMT_LEFT,50);//设置第一列
m_list.InsertColumn(1,_T("姓名"),LVCFMT_LEFT,80);//设置第二列
m_list.InsertColumn(2,_T("电话"),LVCFMT_LEFT,100);//...
m_list.InsertColumn(3, _T("地址"), LVCFMT_LEFT, 100);//...

m_list.InsertItem(0,_T("1"));//添加一项
m_list.SetItemText(0, 1, _T("韩良伟"));//设置第二个表格数据
m_list.SetItemText(0,2,_T("8888888"));
m_list.SetItemText(0, 3, _T("南通"));
10.状态栏

1)string table 里添加两个字串,ID分别为IDS_INDICATOR_MESSAGE and IDS_INDICATOR_TIME  
2)在你的 dlg.h 类里面加个 CStatusBar m_bar; 
3)在dlg.cpp 开头加上
static UINT indicators[] = 
{  
     IDS_INDICATOR_MESSAGE, 
     IDS_INDICATOR_TIME 
};  
4)OnInitDialog 里面加上
m_bar.Create(this); //创建状态栏
m_bar.SetIndicators(indicators,2); //Set the number of panes 
CRect rect;  
GetClientRect(&rect);
//设置大小
m_bar.SetPaneInfo(0,IDS_INDICATOR_MESSAGE, SBPS_NORMAL,rect.Width()-100);        
m_bar.SetPaneInfo(1,IDS_INDICATOR_TIME,SBPS_STRETCH ,0); 


 RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST, ID_INDICATOR_TIME); 
5)时间显示
OnInitDialog 里面加SetTimer(1,1000,NULL);  
为你的dlg类添加WM_TIMER的响应函数,在其中添加代码:
 CTime t1;  
 t1=CTime::GetCurrentTime(); 
 int min = t1.GetMinute();
 int hour = t1.GetHour(); 
 int sec = t1.GetSecond();
 CString str;
 str = t1.Format("%H:%M:%S");
 m_bar.SetPaneText(1, str);

11.Tab

1)初始化操作:给tab控件添加变量,并添加标签。创建对应个数的对话框,并建立相应的类。将所有的对话框移动到对应的位置。设置需要显示的窗口为true,其他为false
m_tab.InsertItem(0, _T("参数一"));  //添加参数一选项卡 
m_tab.InsertItem(1, _T("参数二"));  //添加参数二选项卡 
m_tab.InsertItem(2, _T("结果"));    //添加结果选项卡
dlg1 = new CDlg1();
dlg2 = new CDlg2();
dlg3 = new CDlg3();
dlg1->Create(IDD_DIALOG1);
dlg2->Create(IDD_DIALOG2);
dlg3->Create(IDD_DIALOG3);

CRect rt;
m_tab.GetWindowRect(&rt); //获得相对于屏幕左上方的坐标
ScreenToClient(&rt); //将对应的坐标转化为相对于客户区的坐标
CRect dr;
dlg1->GetClientRect(&dr);//获取一个对话框的大小
rt.top -=dr.Height();
rt.bottom -= 30;
rt.right = dr.Width();
//rt.left = 0;
dlg1->MoveWindow(&rt);
dlg2->MoveWindow(&rt);
dlg3->MoveWindow(&rt);

dlg1->ShowWindow(true);
dlg2->ShowWindow(false);
dlg3->ShowWindow(false);
2)响应tab控件的TCN_SELCHANGE消息
void CpngTestDlg::OnTcnSelchangeTab1(NMHDR *pNMHDR, LRESULT *pResult)
{
// TODO: 在此添加控件通知处理程序代码
int CurSel = m_tab.GetCurSel();
switch (CurSel)
{
case 0:
dlg1->ShowWindow(true);
dlg2->ShowWindow(false);
dlg3->ShowWindow(false);
break;
case 1:
dlg2->ShowWindow(true);
dlg1->ShowWindow(false);
dlg3->ShowWindow(false);
break;
case 2:
dlg3->ShowWindow(true);
dlg1->ShowWindow(false);
dlg2->ShowWindow(false);
break;
}
*pResult = 0;
}

12)树:

一。不带图标的.参数1为要添加的文字,参数二为它的父节点(类型 HTREEITEM)
hSubItem =m_tree.InsertItem(CString ,TVI_ROOT);//返回值为当前插入的新节点
m_tree.InsertItem(CString ,hSubItem );
二。带图标的。首先要导入图标,然后 SetImageList,插入的时候图标id放在第二个参数,例m_tree.InsertItem(path,1,1 ,TVI_ROOT);
HICON hIcon1 = theApp.LoadIcon(IDI_ICON1);
HICON hIcon2 = theApp.LoadIcon(IDI_ICON2);
m_imageList.Create(32, 32, ILC_COLOR32, 3, 3);
m_imageList.Add(hIcon1);
m_imageList.Add(hIcon2);
m_tree.SetImageList(&m_imageList, TVSIL_NORMAL);
三。常用函数
 CString GetItemText(HTREEITEM hItem) const;//获取文字
 BOOL SetItemText(HTREEITEM hItem,LPCTSTR lpszItem);//设置文字
 HTREEITEM GetNextSiblingItem(HTREEITEM hItem) const;//获取树形控件中某个指定节点的下一个兄弟节点
 HTREEITEM GetPrevSiblingItem(HTREEITEM hItem) const;// 获取树形控件中某个指定节点的上一个兄弟节点。
 HTREEITEM GetParentItem(HTREEITEM hItem) const;//获取父节点
 HTREEITEM GetRootItem( ) const;// 获取树形控件根节点的句柄。
 HTREEITEM GetSelectedItem( ) const;//  获取树形控件当前选中节点的句柄。
 BOOL DeleteAllItems( );//删除树形控件中的所有节点
 BOOL DeleteItem(HTREEITEM hItem);
 HTREEITEM InsertItem(LPCTSTR lpszItem,int nImage,int nSelectedImage,HTREEITEM hParent = TVI_ROOT,HTREEITEM hInsertAfter = TVI_LAST);
在树形控件中插入一个新节点。参数lpszItem为新节点的标签文本字符串的指针,参数nImage为新节点的图标在树形控件图像序列中的索引,参数nSelectedImage为新节点被选中时的图标在图像序列中的索引,参数hParent为插入节点的父节点的句柄,参数hInsertAfter为新节点的前一个节点的句柄,即新节点将被插入到hInsertAfter节点之后。

BOOL SelectItem(HTREEITEM hItem);// 选中指定的树节点。参数hItem为要选择的节点的句柄。

13.任务栏的进度条

ITaskbarList3* pTaskbar;
CoInitialize(0); //初始化COM组件,用于支持任务栏显示进度。
CoCreateInstance(CLSID_TaskbarList, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&pTaskbar));

pTaskbar->SetProgressState(this->GetSafeHwnd(), TBPF_INDETERMINATE);
pTaskbar->SetProgressValue(this->GetSafeHwnd(), cur, tol);
 

14.ShellList

m_tree.DisplayFolder(_T(""));//初始设为根目录
m_tree.EnableShellContextMenu(true);//允许右键菜单
void CInterDlg::OnBnClickedButton2()//返回上级目录
{
//例:路径为 C:\\windows\\addins
CString full,name;
m_tree.GetCurrentFolder(full);//完整路径
m_tree.GetCurrentFolderName(name);//最后一项addins
CString f = full.Left(full.GetLength() - name.GetLength() - 1);//减去最后一项以及 \ 得到上级目录
m_tree.DisplayFolder(f);//显示目录
}


到此,基础控件的用法都介绍了它的一般用法,高级的用法需查阅资料!

0 0
原创粉丝点击