关闭

学习MFC应用于高校社团助手的心得

标签: mfc操作
294人阅读 评论(0) 收藏 举报

学习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,和标题,双击定义按钮的消息响应函数


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:302次
    • 积分:12
    • 等级:
    • 排名:千里之外
    • 原创:1篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章存档