学习MFC视频
首先
1.创建窗口一些注意操作
(1)插入窗口Dialog 在Resource view中右键插入,或直接插入Dialog,创建是记得对属性定义,设置ID,格式与生成的一致,字体一般选择宋体 9或10,
(2)建立类向导,输入类名开头以C,结尾以Dlg。
(3)对话框的嵌套打开以一个按钮的消息响应函数为例
void CPanelDlg::OnSporsonmanage()
{
ShowWindow(SW_HIDE);
CSponsorerDlg dlg;
dlg.DoModal();
ShowWindow(SW_SHOW);
}
这为控制面板窗口中的一个按钮的消息响应函数
ShowWindow(SW_HIDE);//为在按钮响应后原窗口隐藏
CSponsorerDlg 为需要打开的窗口类
dlg.DoModal();为打开窗口的函数
ShowWindow(SW_SHOW)为显示打开窗口
(4)创建窗口时一般会加入一个打开窗口自动执行的函数,在对应窗口类右键选择 Add Widows Message Handler,选择WM_INITDIALOG。(在许多控件初始化和定义时需要用到)(打开窗口自动执行)
2. 其中用到的控件的用法
(1)列表控件(listctrl)
【1】属性设定:
设置ID,样式:从上到下依次为“报告,顶端,无",右边所有选项不勾选,尤其是自动排列(会打乱你在定义表头时的顺序)
初始化设定和允许鼠标选中某一行,设置表头
CDialog::OnInitDialog();//为BOOL CMyDlg::OnInitDialog()函数中必须写在开头的语句
DWORD dwStyle = m_list1.GetExtendedStyle();
dwStyle |= LVS_EX_FULLROWSELECT;//选中某行使整行高亮(只适用与report风格的listctrl)
dwStyle |= LVS_EX_GRIDLINES;//网格线(只适用与report风格的listctrl)
// dwStyle |= LVS_EX_CHECKBOXES;//item前生成checkbox控件
//dwStyle |= LVS_EX_TRACKSELECT;//鼠标跟随选中
m_list1.SetExtendedStyle(dwStyle); //设置扩展风格
其中m_list1为列表控件类型为CListCtrl 的变量
【2】设置表头
CListCtrl* pList=(CListCtrl*)GetDlgItem(IDC_LIST1);
pList->InsertColumn(0,"",LVCFMT_CENTER,0);
pList->InsertColumn(1,"学号",LVCFMT_CENTER,90);
pList->InsertColumn(2,"姓名",LVCFMT_CENTER,80);
pList->InsertColumn(3,"班级",LVCFMT_CENTER,90);
pList->InsertColumn(4,"性别",LVCFMT_CENTER,50);
pList->InsertColumn(5,"手机",LVCFMT_CENTER,100);
pList->InsertColumn(6,"联系地址",LVCFMT_CENTER,120);
pList->InsertColumn(7,"qq号",LVCFMT_CENTER,100);
pList->InsertColumn(8,"Email",LVCFMT_CENTER,120);
pList->InsertColumn(9,"入社时间",LVCFMT_CENTER,120);
CListCtrl* pList=(CListCtrl*)GetDlgItem(IDC_LIST1);为调用CListCtrl库中函数必须出现的,其中IDC_LIST1为需要设定列表控件的ID
pList->InsertColumn(0,"",LVCFMT_CENTER,0);
函数变量 :
第1个是表头的序号(从0开始),
2是表头的标题,
3是设置表头文字的格式LVCFMT_CENTER(居中)(但是第一个表头(序号0)不能居中,会自动左对齐(LEFT 为左, RIGHT为右);
4是为该表头的长度。
【3】利用列表控件输出数据
pList->InsertItem(i,0);
pList->SetItemText(i,1,p->num);
pList->SetItemText(i,2,p->name);
pList->SetItemText(i,3,p->classname);
pList->SetItemText(i,4,p->sec);
pList->SetItemText(i,5,p->telephone);
pList->SetItemText(i,6,p->address);
pList->SetItemText(i,7,p->qq);
pList->SetItemText(i,8,p->Email);
pList->SetItemText(i,9,p->Time);
第一个要插入用InsertItem其他的用SetItemText函数
其变量
第1个是第几行
2是代表第几列,对应表头
3是该位置的数据变量
【4】点击表头排序函数
在对应窗口类右键选择 Add Widows Message Handler,在右下角选择该列表控件的ID,选择LVN_COLUMNCLICK.
函数定义
void CMyDlg::OnColumnclickList1(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
for(int i=0; i<m_list1.GetItemCount(); ++i) //这个for用来给表中的项添加上索引号
{
m_list1.SetItemData(i,i);
}
DATA data;
data.subitem = pNMListView->iSubItem;
data.plist = &m_list1;
m_list1.SortItems(listCompare,(LPARAM)&data);
*pResult = 0;
}
上面再写回调函数,是
int CALLBACK listCompare(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
{
DATA * MyData = (DATA*)lParamSort;
int col = MyData->subitem;//点击的列项传递给col,用来判断点击了第几列
//取项的字符串
CString strItem1, strItem2;
strItem1 = MyData->plist->GetItemText(lParam1, col);
strItem2 = MyData->plist->GetItemText(lParam2, col);
return strItem1.CompareNoCase(strItem2);
}
点击列表表头排序的原理是:点击那一列遍历该列所有数据,通过回调函数比较两个数据的顺序,这里的回调函数比较的是字符串调用了strItem1.CompareNoCase()函数
(2)组合框(ComboBox)
往其中输入数据
CComboBox* pComb=(CComboBox*)GetDlgItem(IDC_inquirechoice);
pComb->AddString("学号");
pComb->AddString("姓名");
pComb->AddString("班级");
pComb->AddString("性别");
pComb->AddString()为输入数据
组合框控件定义将“分类”取消
将组合框中选中的数据读入
CComboBox* pComb=(CComboBox*)GetDlgItem(IDC_inquirechoice);
CString str,str2;
GetDlgItemText(IDC_inquirechoice,str);
GetDlgItemText(IDC_inquire,str2);
IDC_inquirechoice为组合框的ID;
GetDlgItemText( , )把控件的数据传入,使用的是控件的ID
(3)编辑框
从编辑框中传入数据可以用GetDlgItemText(),传出数据一般用变量
UpdateData(TRUE);缺省值是TRUE
将编辑框中的数据传到变量中;
UpdateData(FALSE);
将变量中的数据传到编辑框中;
(4)图像控件
定义:选择位图,在工具栏里选择插入,选择Bitmap引入你要的图片资源,在控件属性图像中选择刚刚引入的图像。
(5)高级编辑框(Rich Edit)
添加这一控件首先要在(CMYAPP)就是MFC最初的窗口的唯一的app中的InitInstance中添加AfxInitRichEdit();
如:
BOOL CMyApp::InitInstance()
{
AfxInitRichEdit();//
AfxEnableControlContainer();
#ifdef _AFXDLL
Enable3dControls(); // Call this when using MFC in a shared DLL
#else
Enable3dControlsStatic(); // Call this when linking to MFC statically
#endif
CPanelDlg ld;
if(IDCANCEL==ld.DoModal())
return FALSE;
CMyDlg dlg;
m_pMainWnd = &dlg;
dlg.DoModal();
return FALSE;
}
定义该控件的变量:类型为:CRichEditCtrl.
为定义该控件字体和颜色
CHARFORMAT df = {sizeof(df)};
df.dwMask = CFM_COLOR|CFM_FACE|CFM_SIZE;
df.yHeight = 256;
strcpy(df.szFaceName,"黑体");
m_graphpath.SetDefaultCharFormat(df);
往控件中输入数据
在每一次输入数据需要写下面的话
int nLen=m_graphpath.GetWindowTextLength();
m_graphpath.SetSel(nLen,nLen);
输入首行数据
m_graphpath.SetWindowText("现在开始关键路径查找(用事件顺序)\r\n");
\r\n为换行。
m_graphpath.ReplaceSel("起点与终点重合\r\n");
为之后输入数据的函数
(6)按钮控件
使用时需要定义ID,和标题,双击定义按钮的消息响应函数