mfc 学习笔记
来源:互联网 发布:屏幕录制软件ios 编辑:程序博客网 时间:2024/06/03 11:16
关于消息ID:
win32中,每一个按钮需要手动设置消息ID,并到消息处理函数中分支判断并处理,在处理函数中,未处理的消息default返回false时,系统会有缺省处理,返回true时需要自己处理,if default return true,show maybe error哈;
但在mfc中,添加按钮,改好消息ID后,只需双击便自动生产一个映射的成员函数来处理消息,每个消息ID对象一个成员函数(消息映射)。注意,改了某个按钮的ID后前一个ID的宏和成员处理函数不会被删除。
mfc整体框架:
mfc内部共有六大关键技术,架构起了mfc开发平台:
- mfc程序的初始化过程: 启动函数不再是“winmain”; 必须包含一个CWinApp类的派生类; 必须在全局区定义一个派生类的对象; 在派生类中必须包含virtual BOOL InitInstance() 函数的重写函数(作为回调//); 在mfc项目中不要再找*main,入口找InitInstance即可; 需要连接mfc的静态or动态库。
- 消息映射
- 运行时类型识别
- 动态创建
- 永久保存
- 消息传递
模式对话框和非模式对话框:
对于非模式对话框,enddialog(IDXX);并不能关闭,只是隐藏了非模式对话框,可以再次showwindow(XX)而不需要再次create()。可以使用destroywindow()真正关闭,这是一个窗口、控件通用关闭函数。
CWnd 成员函数:
destroyWindow():
create()、createEx():创建并设置显示风格等,EX有扩展风格
getdlgitem():通过ID获取对象指针,临时对象指针,不要保存,同fromhande()
获取窗口句柄:pwnd = GetDlgItem(ID)//获取某窗口对象指针 1、pwnd->m_hwnd; 2、operate HWND();3、getsafehwnd()
fromhandle(hwnd):如果有某窗口的句柄,可以将其转为其对象指针。产生的临时对象,只限于当前韩式使用,不要将其保存与members or global
attach() 、detach():为一个cwnd对象嫁接和移除窗口句柄,成对使用,一般init()和 destroy()中使用,否则关闭时会出错。可用(xxx*)cwnd::getdlgitem(nid)代替,静态创建。动态创建:先new then create。
SubclassWindow()UnsubclassWindow() :子类和反子类化,能通过子类(自定义)接收窗口消息
SubclassDlgItem():子类化指定ID对应的控件,能通过子类(自定义)接收窗口消息
转:
1.有句柄转为CWND对象
(1)FromHandle和GetGlgItem:产生一个临时性窗口指针,只限于在当前函数内使用;
(2)Attach和Detach成对使用为一个CWnd对象嫁接和移除窗口句柄。只用attach在摧毁窗口时会出现错误;
(3)SubclassWindow和UnSubclassWindow,子类化和反子类化,还能通过子类接收窗口消息;
(4)SubclassDlgitem,子类化指定ID对应的空间窗口,还能通过子类接收窗口消息;
2.获取窗口信息函数
(1)GetWindowText和SetWindowText获取和设置窗口的文字;
(2)GetStyle和ModifyStyle:获取和设置窗口的基础风格;
(3)GetExStyle和ModifyStyleEx:获取和设置窗口的宽展风格;
3.窗口状态函数
(1)GetWindowRect:获得以屏幕坐标系为基础的窗口矩形区域;
(2)GetClientRect:获得以对象关联的以其客户区为基础的客户区矩形窗口,,left和top均为0;
(3)IsWindowVisible()判断窗口可见或被隐藏;
(4)IsIconic判断窗口是否为最小化;
(5)IsZoomed判断窗口是否为最大化;
(6)GetTopWindow:获得当前父窗口内所有子窗口中最低(top)的子窗口
(7)getforegroundwindow:获取任务栏内的一个主窗口
(8)getactivewindow:在同一进程内的所有窗口处于激活状态的窗口
4.窗口操作函数
(1)ShowWindow:改变窗口的显示状态,包括最大化和最小化、隐藏……;
(2)EnableWindow(TRUE)激活窗口或控件;EnableWindow(TRUE)禁用窗口或控件;
(3)MoveWindow:移动窗口,二维;
(4)SetWindowPos:窗口移动,三维,此函数后最好invalidata()刷新一下 &wndTop从别的子对象下面移动;SWP_NOSIZE(宽高不变),SWP_NOMOVE(X、Y方向不移动,Z轴移动);
常用于前端显示功能的开发&wndTopMost;
(5)FindWindow:查找窗口句柄,可利用工具SPy++获取其他窗口句柄;
(6)CenterWindow:居中窗口,窗口以屏幕居中,窗口内的控件以窗口居中;
(7)InFlateRect:扩展窗口尺寸;
(8)BringWindowToTop:SetWindowPos的子函数,和 SetWindowPos(&wndTop……)一样,处理子窗口内层叠关系
(9)SetfForeGroundWindow:将任务栏内的一个主窗口推到前面(对主窗口bringwindowtotop也能起到同样的功能)
(10)SetActiveWindow:在同一进程内的,所有窗口中的一个窗口设置为激活状态。
(11)FalshWindow:指定窗口闪烁,(如:聊天工具有信息)
5.窗口关系
(1)GetDlgItem:根据ID获取一个子窗口的对象地址(句柄)
(2)GetDlgItemText和SetDlgItemText:根据ID获取(设置)一个子窗口的标题文字
(3)GetDlgItemInt和SetDlgItemInt:根据ID获取(设置)一个子窗口内显示的数字
(4)GetDlgCtrlID和SetDlgCtrlID:根据窗口对象内的句柄获取(设置)窗口的ID
(5)GetParent和IsChild:求出父窗口和判断一个窗口是否为子窗口
(6)GetWindow:获得窗口,可获得子窗口下一个或上一个窗口
6.函数等价关系
()IsChild与GetParent
()IsIconic与GetStyle()&WS_MINIMIZE
()IsZoomed与GetStyle()&WS_MAXIMIZE
()IsWindowVisible与GetStyle()&WS_VISIBLE
()SetDlgItemText与GetDlgItem(...)->SetWindowText
5.计时器
(1)SetTimer(123,50,NULL);123为这个时间函数的ID,50为50MS启动一次时间消息函数WM_OnTimer;
(2)KillTimer()结束某个时间函数;
6.常用刷新函数
(1)Invalidata和invalidataRect
(2)UpDataWindow
(3)ReDrawWindow
- MFC rtti 学习笔记
- 《深入浅出mfc》学习笔记
- MFC学习笔记
- MFC学习笔记一
- MFC学习笔记
- MFC学习笔记
- VC/MFC学习笔记
- 《深入浅出mfc》学习笔记
- MFC学习笔记基础
- MFC学习笔记(1)
- MFC学习笔记(6)
- MFC学习笔记二
- MFC学习笔记三
- VC|MFC学习笔记
- MFC学习笔记
- MFC学习笔记
- MFC+OpneGL学习笔记
- MFC学习笔记
- Java基础知识 一 对象与类
- 数据结构之链表各功能的实现
- IMX6之Openwrt系统USB无线网卡RT3072配置记录
- tensorflow 语法及 api 使用细节
- zip 文件格式分析: 附实例介绍
- mfc 学习笔记
- linux线程学习(6)
- HTML-Emmet(神器)
- IMX6之openwrt设置samba共享
- CMake入门编程(1)
- TensorFlow初印象
- 对象序列化类库MsgPack介绍
- 基础DP
- IMX6之openwrt自动挂载U盘