静态文本框

1
m_stext.SetWindowTextW(TEXT("Hello"));

编辑框

基本函数

1
2
3
4
5
6
m_Edit1.SetSel(0,-1);	//表示选中编辑框IDC_EDIT1中的全部内容。
m_Edit1.ReplaceSel(""); //用空字符串代替所选中的文本,即把所选的文本删除掉
m_Edit1.Copy(); //将m_Editl编辑框中所选的内容拷贝到剪贴板上
m_Edit2.Paste(); //将剪贴板中的内容粘贴到m_Edit2编辑框中
m_Edit1.Undo(); // Undo()函数是CEdit类中的成员函数,表示取消编辑框中上一次操作
m_Edit1.GetWindowText(str, 10); // 将内容放到字符串上,参数2是长度(包括\0)

数值与控件转换

IDC_EDIT1 绑定 int 变量 m_A

1
2
3
4
5
6
UpdateData(TRUE); // 刷新成数值

int i=m_A*m_B;
m_Result.Format("%d", i);

UpdateData(FALSE); // 刷新回控件

图像框

1
2


组框 Group Box

1
2


按钮

按下按钮

1
m_btn1.SetWindowText("你已按下了按钮!");

复选框

1
2
3
4
if(m_chk1.GetCheck()>0)
m_chk1.SetCheck(0);
else
m_chk1.SetCheck(1);

单选框

按下单选框

1
m_rad1.SetCheck(1);

初始化选中

给一组单选按钮中的一个指定按钮加上选中标志,并且清除组中其他按钮的选中标志。

1
BOOL CheckRadioButton([HWND hDlg,] int nlDFirstButton, int nlDLastBUtton, int nlDCheckButton)

获取状态

1
2
3
4
5
int iSexRADIO = GetCheckedRadioButton(IDC_BOY_RADIO, IDC_GIRL_RADIO); // 参数是第一个和最后一个
if (iSexRADIO == IDC_BOY_RADIO)
;
else
;

组合框

初始化时添加下拉列表框项目

1
m_cb.AddString("Monday"); // 添加项目

初始化时选中字符串

SelectString:搜索在组合框的列表框中的字符串,如果找到该字符串,选择列表框和复制的字符串到编辑控件。

1
m_Combo.SelectString(-1, "a"); // 参数1:从0开始的索引,-1为全部;参数2:搜索词,区分大小写

获取并弹出选中项目

1
2
3
CString msg;
m_cb.GetLBText(m_cb.GetCurSel(), msg);
AfxMessageBox(msg);

列表框

1
2


水平滚动条

1
2


垂直滚动条

1
2


旋转 Spin

滑块的滚动事件在对话框的事件里,与其他控件不同。
为什么?它就是这样设计的。

初始化

1
2
CSpinButtonCtrl* pSpin =(CSpinButtonCtrl*) GetDlgItem(IDC_SPIN1);
pSpin->SetRange(0, 100);

滚动事件

1
2
3
4
5
6
7
8
9
10
void CTestDlg::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
{
if (pScrollBar->GetDlgCtrlID() == IDC_SPIN1)
{
CString strValue;
strValue.Format("%3.1f", (double) nPos / 10.0); // 共3位,小数点后1位
( (CSpinButtonCtrl*) pScrollBar )->GetBuddy()->SetWindowText(strValue);
}
CDialog::OnVScroll(nSBCode, nPos, pScrollBar);
}

进度条 Progress

1
2
3
4
CProgressCtrl* pProg = (CProgressCtrl*) GetDlgItem(IDC_PROGRESS1);
pSlide1->SetRange(0, 100); // 范围
pProg->SetPos(0); // 进度=0
pProg->SetPos( pProg->GetPos()+1 ); // 获取进度并+1

滑块

滑块事件也是在对话框滚动事件里面。

1
2
3
4
5
6
7
8
9
10
void CTestDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
{
if(pScrollBar->GetDlgCtrlID() == IDC_SLIDER1)
{
CSliderCtrl* pSlide = (CSliderCtrl*) pScrollBar;
CString strText;
strText.Format("%d", pSlide->GetPos());
SetDlgItemText(IDC_STATIC_SLIDER, strText); // 滑块位置显示到编辑框里
}
}

热键

1
2


列表控件

初始化

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
static char * color[] = {"white","black","red","blue","yellow","cyan","purple","green"};
HICON hIcon[8];
int n;
m_imageList.Create(16,16,0,8,8);
hIcon[0] = AfxGetApp()->LoadIcon(IDI_ICON_WHITE);
hIcon[1] = ...略...
for (n=0;n<8;n++)
m_imageList.Add(hIcon[n]);

CListCtrl* pList = (CListCtrl*) GetDlgItem(IDC_LIST1); // 获得控件对象
pList->SetImageList(&m_imageList, LVSIL_SMALL); // 设置小图标图片列表
for (n = 0; n < 8; n++)
pList->InsertItem(n, color[n], n); // 第一个参数为项id,第二个为标签文字,第三个为对应图片列表id
pList->SetBkColor(RGB(0, 255, 255)); // 设置背景色
pList->SetTextBkColor(RGB(255, 0, 255)); //设置文字的背景色

事件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
void CTestDlg::OnItemchangedList1(NMHDR* pNMHDR, LRESULT* pResult) // 选中,修改用来显示的标签
{
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
CListCtrl* pList = (CListCtrl*) GetDlgItem(IDC_LIST1);
int nSelected = pNMListView->iItem;
if (nSelected >= 0)
{
CString strItem = pList->GetItemText(nSelected, 0);
SetDlgItemText(IDC_STATIC_LIST, strItem);
}
*pResult = 0;
}

void CTestDlg::OnRclickList1(NMHDR* pNMHDR, LRESULT* pResult) // 右键修改成输入文本
{
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
CListCtrl* pList = (CListCtrl*) GetDlgItem(IDC_LIST1);
int nSelected = pNMListView->iItem;
if (nSelected >= 0)
pList->EditLabel(nSelected);
*pResult = 0;
}

void CTestDlg::OnEndlabeleditList1(NMHDR* pNMHDR, LRESULT* pResult) // 选中后并单击编辑
{
LV_DISPINFO* pDispInfo = (LV_DISPINFO*)pNMHDR;
LVITEMA item = pDispInfo->item;
CString str =item.pszText;
str.TrimLeft();
str.TrimRight();
if(str.GetLength() > 0)
{
CListCtrl* pList = (CListCtrl*) GetDlgItem(IDC_LIST1);
pList->SetItemText(item.iItem, item.iSubItem, item.pszText);
}
*pResult = 0;
}

树状控件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
CTreeCtrl* pTree =	(CTreeCtrl*) GetDlgItem(IDC_TREE1);
pTree->SetImageList(&m_imageList, TVSIL_NORMAL); // 设置图片列表

TV_INSERTSTRUCT tvinsert; // 创建待插入的TV_INSERTSTRUCT结构
tvinsert.hParent = NULL; // 无父结点
tvinsert.hInsertAfter = TVI_LAST; // 插入到本层最后
tvinsert.item.mask = TVIF_IMAGE | TVIF_SELECTEDIMAGE| TVIF_TEXT;
// 掩码包括 图标 选中图标 文字
tvinsert.item.hItem = NULL; // 句柄为空
tvinsert.item.state = 0; // 状态
tvinsert.item.stateMask = 0; // 状态掩码,不使用这两项
tvinsert.item.cchTextMax = 6; // 最大文字长度,忽略
tvinsert.item.iSelectedImage = 1; // 选中图标索引
tvinsert.item.cChildren = 0; // 没有子节点
tvinsert.item.lParam = 0; // 自定义数据

// 第一层
tvinsert.item.iImage = 2; // 一般图标

tvinsert.item.pszText = "father"; // 插入第一层第一个节点"father"
HTREEITEM hDad = pTree ->InsertItem(&tvinsert);

tvinsert.item.pszText = "mother"; // 插入第一层第二个节点"mother"
HTREEITEM hMom = pTree->InsertItem(&tvinsert);

// 创建第二层
tvinsert.hParent = hDad; // 父节点为"father"
tvinsert.item.iImage = 3; // 一般图标

tvinsert.item.pszText = "son"; // 插入第二层"father"的第一个节点"son"
pTree->InsertItem(&tvinsert);

tvinsert.item.pszText = "daughter"; // 插入第二层"father"的第二个节点"daughter"
pTree->InsertItem(&tvinsert);

// 还是创建第二层,但是父节点变成 Mom
tvinsert.hParent = hMom; // 父结点为"mother"
tvinsert.item.iImage = 4;

tvinsert.item.pszText = "cartoon"; // 插入第二层"mother"的节点"cartoon"
HTREEITEM hOther = pTree->InsertItem(&tvinsert);

// 创建第三层
tvinsert.hParent = hOther; // 连续不断地创建

事件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
void CTestDlg::OnSelchangedTree1(NMHDR* pNMHDR, LRESULT* pResult) // 被选中,修改选中项的图标
{
NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
CTreeCtrl* pTree = (CTreeCtrl*) GetDlgItem(IDC_TREE1);
HTREEITEM hSelected = pNMTreeView->itemNew.hItem;
if (hSelected != NULL) {
char text[31];
TV_ITEM item;
item.mask = TVIF_HANDLE | TVIF_TEXT;
item.hItem = hSelected;
item.pszText = text;
item.cchTextMax = 30;
VERIFY(pTree->GetItem(&item));
SetDlgItemText(IDC_STATIC_TREE, text);
}
*pResult = 0;
}

void CTestDlg::OnEndlabeleditTree1(NMHDR* pNMHDR, LRESULT* pResult) // 选中后并单击编辑
{
TV_DISPINFO* pTVDispInfo = (TV_DISPINFO*)pNMHDR;
TVITEMA item = pTVDispInfo->item;
CString str =item.pszText;
str.TrimLeft();
str.TrimRight();
if(str.GetLength() > 0)
{
CTreeCtrl* pTree = (CTreeCtrl*) GetDlgItem(IDC_TREE1);
pTree->SetItemText(item.hItem,item.pszText);
}
*pResult = 0;
}

Tab控件

1
2


动画

1
2


富文本 Rich Edit

1
2


月历

1
2


日期时间选择器

1
2
3
4
5
6
7
8
CDateTimeCtrl* pDT =(CDateTimeCtrl*) GetDlgItem(IDC_DATETIMEPICKER1);
CString formatStr= _T("'今天是: 'yy'/'MM'/'dd");
pDT->SetFormat(formatStr); // 设置控件内容的格式

CTime t;
pDT->GetTime(t);
CString s = t.Format( "%A, %B %d, %Y %H:%M:%S" );
AfxMessageBox(s);

IP地址

1
2


自定义控件

1
2


扩展组合框

1
2