小项目案例

本文详细介绍了MFC中消息映射的使用,包括BEGIN_MESSAGE_MAP和END_MESSAGE_MAP宏,以及如何处理鼠标和键盘事件。此外,还讲解了Cstring、CPaintDC等类的应用,并涉及了字符编码、对话框控件如按钮、文本框的操作,以及多字节和宽字节的转换。内容涵盖MFC中对话框、控件、事件处理和绘图等基础知识,适合MFC初学者参考。
摘要由CSDN通过智能技术生成

为了支持消息映射,MFC提供了下列宏:

消息映射的声明和分界宏

DECLARE_MESSAGE_MAP

声明将在一个类中使用消息映射,把消息映射到函数(必须用在类声明中)

BEGIN_MESSAGE_MAP

开始消息映射的定义(必须用在类实现中)

END_MESSAGE_MAP

结束消息映射的定义(必须用在类实现中)

 

 

BEGIN_MESSAGE_MAP  需要填写两个参数

 

鼠标左键 记住一个单词 LWM_消息处理函数:L-M 里面都是鼠标按下的消息映射;

Cstring。Format(TEXT”X=%D,y=%D”),point.x

CpaintDC 在帮助文档里面找 对应功能;

 

声明宏 写到.h 中

分界宏 写道.cpp中

函数原型 声明到.cpp中

鼠标,键盘,绘图,

 

  1. 1分字符对应1个字节 多个字节

中文 1个字符对应多个字节 宽字节

自动编码的格式转换,使用多字节的使用编码

//多字节转为 宽字节 messag(L“sss”);

//TCHER 自适应编码的转换

//统计字符串长度

Int num=0

Char *p =“aaaa”;

Num = strlen(p);

//统计宽字节的字符串长度

Wchat-t *p2=L”bbb”;

Num = wcsle(p2);

//char * 与cstring 之间的转换

Char*->cstring

Char*p3=”cccc”;

Cstring str =cstring(p3);

 

 

  1. 利用向导创建MFC

MFC的创建MFC 的创建的标准,

MFC开发 CmainFrame

View 视类 相片 MainFram 类相框

 

创建按键敲击事件,在MFCFCDLG 里面找事件,点击后会自动生成相对应的函数,如果不需要就重复以上步骤,会自动注释

如果需界面显示,必须显示在相框里面,CMFCDLG 点击事件。在对应函数里面加入代码:

CString str;

    str.Format(TEXT("%d=x,%d=y"), point.x, point.y);

    MessageBox(str);

画图:

void CMFCDlg::OnPaint()

{

    CPaintDC dc(this); // device context for painting

                       // TODO: 在此处添加消息处理程序代码

                       // 不为绘图消息调用 CDialogEx::OnPaint()

 

    dc.TextOutW(100,100,TEXT("为了自己"));

}/如果有了On Draw 不要有Onpaint了,同时存在的话 OnPaint会把OnDraw 覆盖掉

On create与crested的区别:

MFC 中后缀EX的为扩展函数;

Afx 为全局函数  

  1. 模态与非模态的实现:{基于对话框的控件}

创建按键:在Dialog 点击插入Dialog 对话框 有对应的ID名称,自己可以修改,

 如果想创建Ui的界面必须要有独立的.h 与.cpp文件

在对应的界面创建一个新的类。可以在类视中查看对应的类函数

创建一个单击事件,(这个是第一种的添加的方式)

右键,添加事件处理函数,对应生成代码

直接点击图标自动生产对应函数;

先引用头文件,添加头文件#include "DlgExec.h" 不使用C ;

创建新的窗口->  修改ID ;  

在创建新的类函数;在住窗口点击对应按键,添加 头文件,CDlogShow fff;

    fff.DoModal();

(不同的是,在添加头文件时,不可以出现C字母,在程序使用时对应需要添加C)

 

第二种方法,创建窗口只能创建一次fff.Create(IDD_SHOW);多次就会崩掉;

函数放到初始化中,

就避免崩掉的现象;

 在对应的.文件中生成全局变量;

 所对应的函数 在帮助文档查找:

  1. 静态文本控件:

   可以显示文字,图片;

GetwindRect();获取控件大小的背景;

改变按键内的内容:

m_btn.SetWindowTextW(TEXT("^_^"));

    CString str;

    m_btn.GetWindowTextW(str);

    MessageBox(str);

//设置点击状态,只点击一次后,自动销毁

    m_btn.EnableWindow(FALSE);

 

  1.  编辑框的使用,属性:

最基本的属性的设置;

如果串窗口的控件变量很多,在类向导里面可以自己查找到对应的变量;

改变控件的内容;m_text = TEXT("haha");

获取里面内容同步到控件中:UpdateData(TRUE);

//将变量的内容,同步到控件中:UpdateData(FALSE);

  1. 下拉框的使用:

 工具里面的对应属性;排序的规则;

添加内容:

默认选项:m_cbx.SetCurSel(列号);

添加:m_cbx.AddString(TEXT("456"));

插入:m_cbx.InsertString(索引的编号,TEXT("大哥"));

删除:m_cbx.DeleteString(3);

获取1号的索引的具体内容 m_cbx.GetLBText(索引的列号, str);

属性里面设置触发事件:void CMFCcombBoxCtrlDlg::OnCbnSelchangeCombo1()

int inder=m_cbx.GetCurSel();

    CString str; //拿到索引的位置

 

    m_cbx.GetLBText(inder, str);

    MessageBox(str); //直接弹出索引的内容

  1. List Control

属性:显示列

Report为报表模式;

 BOOL CMFCListCtrlDlg::OnInitDialog()在初始化的函数中:“

//列表控件的使用

   CString str[] = { TEXT("姓名"),TEXT("性别"),TEXT("年龄") };

  for (int i=0;i<3;i++)

//设置表头 参数 索引 2内容 3对齐方式 4列宽

        m_list.InsertColumn(i, str[i], LVCFMT_LEFT, 100);

      //表头不算正文内容 索引从0 开始

        //m_list.InsertItem(0, TEXT("张三"));

//插入   m_list.SetItemText(0, 1, TEXT("男"));

for (int i=0;i<10;i++)

       { CString str;int j=0;

        str.Format(TEXT("张三%d"), i);

        m_list.InsertItem(i,str);

        m_list.SetItemText(i, ++j, TEXT("男"));

        m_list.SetItemText(i, ++j, TEXT("18"));

} //全部添加到列表里面的内容

        //设置属性 整行选中状态 显示网格

        m_list.SetExtendedStyle(LVS_EX_FULLROWSELECT| LVS_EX_GRIDLINES);

  1. 树控件的操作():
  1. 属性添加变量
  2. 更改需要的属性;
  3. 添加资源:资源图放到更目录文件res里面;
  4. 资源视图里面添加资源,点击导入;
  5. 资源ID好一次填写到icons[0] = AfxGetApp()->LoadIconW(IDI_ICON1);
  6. 类视图中点击,初始化程序中添加代码
  7.  
  8. //树控件
  9.     //设置图标
  10.     //准备HIcon的图标
  11.     HICON  icons[4];
  12.     icons[0] = AfxGetApp()->LoadIconW(IDI_ICON1);
  13.     icons[1] = AfxGetApp()->LoadIconW(IDI_ICON2);
  14.     icons[2] = AfxGetApp()->LoadIconW(IDI_ICON3);
  15.     icons[3] = AfxGetApp()->LoadIconW(IDI_ICON4);
  16.     //CImageList list;//必须保存这个集合,写到.h中的成员的属性
  17.     //创建图片
  18.     list.Create(30,30, ILC_COLOR32,4,4);
  19.     //添加具体的图片
  20.     for (int i=0;i<4;i++)
  21.     {
  22.         list.Add(icons[i]);
  23.     }
  24.     m_tree.SetImageList(&list, TVSIL_NORMAL);
  25.     //设置节点
  26.    HTREEITEM root=m_tree.InsertItem(TEXT("根节点"),0,0,NULL);
  27.    HTREEITEM  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值