mfc小记

原创 2015年07月09日 11:00:44

MFC小记

这两周写了几个MFC小工具,准备给后续开发和测试用的。这其中有些收获,有些感悟

界面设计很重要

自己设计的界面真是丑爆了。

当初设计的时候用的嵌入窗口,根据鼠标点击不同的对象,在同一位置打开不同的属性显示窗口。然后就要考虑属性窗口和主窗口的从属关系,还有拖动同步问题。但是如果界面线程卡住了,属性窗口就不动了

类设计也很重要

非界面的数据成员的初始化和访问问题。因为解耦的需要所以数据和界面是分离的,遇到数据改变需要操纵界面的时候,就出现了数据类引用界面类的问题。又因为界面对象没有提供外部引用,只能在外部声明一个指针,初始化界面对象的时候给指针复制,数据类使用这个指针对象。这是一个丑陋的设计

Tips

基于VS2005

Item Data

用到的CTreeCtrlCComboBoxCListBox都有SetItemDataGetItemData方法,可以将数据绑定到元素上面,这样选择了某个元素后,方便直接对元素对应的对象进行操作,而不需要再去根据选择项去查找对象。当然,用到指针的地方就要注意指针的有效性和内存泄露问题。

CTreeCtrl

  1. DeleteAllItems清除所有元素。

  2. 没有方法可以直接展开树,需要自行逐级展开

CComboBox

  1. Type选择Dropdown

  2. ON_CBN_SELCHANGE事件中获得的字符串值不正确,index是正确的

  3. ResetContent清除所有元素。

  4. 声明了值对象时,如果后续操作中调用UpdateData,务必仅修改值对象。没有值对象时才修改索引改变显示。

窗口同步

重写CDialog::OnMove

void MainDialog::OnMove(int x, int y)
{
    CDialog::OnMove(x, y);
    setSubDialogPos();
}

void MainDialog::setSubDialogPos()
{
    RECT reArchor, reSubDialog;
    archor.GetWindowRect(&reArchor);
    subDlg.GetWindowRect(&reSubDialog);
    subDlg.SetWindowPos(this, reArchor.left, reArchor.top, reSubDialog.right - reSubDialog.left, 
    reSubDialog.bottom - reSubDialog.top, SWP_SHOWWINDOW);
}

MainDialog::setSubDialogPos中使用了一个小技巧,在主窗口中放置一个不显示的控件作为对齐锚点

窗口显示与隐藏

CWnd::IsWindowVisible 窗口是否可见

CWnd::ShowWindow(SW_HIDE) 隐藏窗口

后记

  • 类设计很重要 *3,重要的问题说3遍

  • 界面设计需要好好设计。如果高大上的炫酷界面到后面才发现实现不了或者做出来的东西土到渣,将就一下到头来闪瞎自己还是推倒重来?

  • 界面与数据必须解耦。因为生成的界面响应代码会因为控件的事件增多,控件之间的关联而多到不行,因此界面代码只调用数据接口会让界面逻辑清晰很多。

  • 对于复杂控件,或者有复杂数据的控件,单独的数据载入很有必要。想象一下3个下拉控件,分别可以选择省、市、区,省的数据是固定的,市根据省的选择变化,区又根据市的选择变化。

这里就可以用到CComboBox控件的Item Data了,省的ItemData中包含市信息,就可以在选择省后将市信息直接导入到市的下拉控件中,区同理。

  • 数据必须同界面解耦合,只需要为界面提供足够多的接口

  • 对于数据改变影响界面的操作,应该建立中间层,一面存放数据,另一面改变界面。

CEF学习小记(一)-搭建运行环境

首先要感谢HEY! Code上的这篇文章,通过这篇及随后的三篇文章可以很迅速的搭建最基本的CEF示例。在此我就不赘述了。 当然,这种搭建方法很是粗糙,当然CEF新手很容易上手。以后的项目会才这篇文章...
  • yitucom123
  • yitucom123
  • 2016年10月27日 18:32
  • 474

前端面试小记

太久没有面试过了,第一次难免有点紧张,今天遇到的面试问题,大多数都遇到过,却因为没有充分准备,而没有答好,以后一定好好准备才行。 下面记录一下今天的面试问题,加深印象: 介绍一下JS的...
  • fengyinchao
  • fengyinchao
  • 2017年03月14日 20:05
  • 404

shell小记:eval

shell在执行命令的时候,有一些符号需要shell能够直接能够看到的,例如管道 |,重定向 (>, >, #! /bin/bash pipe="|" ls /home/ $pipe grep "...
  • u012336923
  • u012336923
  • 2015年12月18日 15:50
  • 347

实习三周小记

突然感觉实习过的好快啊,可能以后上了班就是这样吧,天天忙忙碌碌的工作,周末忙里偷闲休息两天,然后又是忙碌的工作,想想也挺充实的。上周末我们实习生跟着20几个IBMer一起到大清沟outing去了,一路...
  • HanYanXin007
  • HanYanXin007
  • 2009年08月01日 17:25
  • 412

刷题小记

1、ctrl + c 和 ctrl + d 和 ctrl + z Ctrl + C To terminate(终止进程) Ctrl + D signals EOF(文件结束符) Ctrl + Z su...
  • qq_27657429
  • qq_27657429
  • 2017年03月26日 19:12
  • 201

MFC小记

一、Debug解决 提示这个文件已在另一编辑器中打开-->把代码编辑窗口打开的关闭就可以了重叠窗口,关闭.rc文件 二、MFC单文档添加背景图片 1.首先准备好一张美丽的图片,保存为BMP格式。 ...
  • cysear
  • cysear
  • 2015年03月31日 22:42
  • 343

CSS兼容性小记

/* ~~~~~~~~~~~~~~ */ 注释 !important 只有Ie7.0和firefox可以识别 @import *.css IE6不支持 _aaa 只识别IE6 *aaa FF不...
  • u010614766
  • u010614766
  • 2013年05月09日 11:17
  • 389

实习小记(一)

很久没来了,新的一年来临,祝大家新年新气象,身体健康,知足常乐。博主近期在秋招成功的公司里实习,第一个月是在新环境和新挑战中浑浑噩噩度过的,目前,适应的还行,学校的事情也告一段落了,终于有时间写点东西...
  • sd_bit19
  • sd_bit19
  • 2018年01月11日 21:09
  • 33

Markdown---语法小记

在CSDN上的文章现在都习惯使用Markdown来编写比较方便美观,这里小结下常见的Markdown语法下:1.标题:方式1 # H1 ## H2 ### H3 #### H4 ##### ...
  • netdxy
  • netdxy
  • 2016年01月23日 01:00
  • 1752

CUDA程序优化小记(六)

CUDA全称Computer Unified Device Architecture(计算机同一设备架构),它的引入为计算机计算速度质的提升提供了可能,从此微型计算机也能有与大型机相当计算的能力。可是...
  • jiangcaiyang123
  • jiangcaiyang123
  • 2014年01月26日 20:04
  • 2211
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:mfc小记
举报原因:
原因补充:

(最多只允许输入30个字)