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开发平台:

  1. mfc程序的初始化过程: 启动函数不再是“winmain”; 必须包含一个CWinApp类的派生类; 必须在全局区定义一个派生类的对象; 在派生类中必须包含virtual BOOL InitInstance() 函数的重写函数(作为回调//); 在mfc项目中不要再找*main,入口找InitInstance即可; 需要连接mfc的静态or动态库。 
  2. 消息映射
  3. 运行时类型识别
  4. 动态创建
  5. 永久保存
  6. 消息传递
模式对话框和非模式对话框:

对于非模式对话框,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













原创粉丝点击