2012-09-01 06:24
⁄ 工业·编程
⁄ 共 346字
框架类CMainFrame的四个成员函数为:AssertValid()和Dump(),OnCreate()和PreCreateWindow().
(1)AssertValid()用来诊断CMainFrame对象是否有效 (2)Dump()用来输出CMainFrame对象的状态信息。 (3)OnCreate()用来创建工具栏m_wndaToolBar和状态栏m_wndStatusBar,而视图窗口是由基类CFrameWnd的成员函数OnCreate()通过调用OnCreateClient()函数创建的。 (4)PreCreateWindow()是虚函数。如果要创建一个非默认风格的窗口,...
MFC阅读全文
2012-08-31 23:32
⁄ 工业·编程
⁄ 共 274字
SetWindowRgn函数可以设定窗口的多种边界剪切域,而不是像SetWindowRect只能设置矩形的外包边界。
因此利用SetWindowRgn能够实现任意不规则的窗口边界。实现非常个性化的窗口,但是如果通过SetWindowRgn将窗口的中部的区域剪切掉,使得绘制窗口时不绘制,从而形成一个完全透明的”洞“,从这个洞可以看到当前窗口下面的窗口。
鼠标单击被剪切掉的区域时,鼠标消息会传到当前窗口的下面的窗...
MFC阅读全文
2012-08-31 23:26
⁄ 工业·编程
⁄ 共 279字
1 MFC中的 __super 和 java 中 super 类似,相当于基类的名称,都可以用来调用基类成员;
2 __xxxx 类型的,是编译器或库内部使用的;
3 __super是编译器关键词,是一个辅助工具,在多重继承和多级继承环境下很方便,当你需要调用基类成员时,不需要你记忆这个成员到底是哪个基类提供的,编译器会帮你找到正确的基类。如果存在二义性(比如有两个基类提供了相同名称的成员),编译器会报错,在错误信息中会指出有哪些基类具有此...
MFC阅读全文
2012-08-31 23:08
⁄ 工业·编程
⁄ 共 496字
最小化、最大化窗口消息响应放在CWnd::OnSysCommand函数中,以下举一例,该例重载了窗口的最小化和最大化操作为隐藏和显示窗口,当然,此例功能实现是在程序有托盘图标的情况下实现的,要不然这样的功能会让用户觉得很不方便。关于托盘图标的内容,请看前面两篇。
>>>托盘图标的删除和托盘程序的优化
void CMyDlg::OnSysCommand(UINT nID, LPARAM lParam) { if ((n...
MFC阅读全文
2012-08-30 20:16
⁄ 工业·编程
⁄ 共 420字
CtreeCtrl的HitTest函数能够得到与当前鼠标位置相关的项。
该函数可以实现,在带有checkbox的树中,当选中父节点的checkbox, 子节点的checkbox可自动选中。因为可以得到父节点的HTREEITEM ,根据这个属性可以遍历子节点。
void CMyDlg::OnNMClickTree1(NMHDR *pNMHDR, LRESULT *pResult) { // TODO: 在此添加控件通知处理程序代码 CPoint pt; UINT nFlags; ::GetCursorPos(&pt); ::Sc...
MFC阅读全文
2012-08-29 15:36
⁄ 工业·编程
⁄ 共 5760字
Frame、View、Document的关系,非常重要,它们的确不是孤立的,而是互相联系的。
如果是SDI程序,CMainFrame调用GetActiveView获得CView,而CView可以调用GetDocument获得CDocument。如果已知CDocument,可以使用GetFirstViewPosition获得第一个相关的CView,然后使用GetNextView获得下一个的CView。之所以这么做,是因为MFC允许一个CDocument拥有多个CView。
》》》MFC控制条窗口布局原理
...
MFC阅读全文
2012-08-29 15:00
⁄ 工业·编程
⁄ 共 677字
标准的menu或者button消息映射句柄类似于下面这种形式:
ON_COMMAND(ID_MYCOMMAND, OnMyCommand)
但是如果你是动态创建的button/menu项,你可能在编译时无法知道命令ID(COMMAND ID).,它可能被存储在一个数据成员里,类似于CSqueegie::m_nMeMyMineID。怎么办呢?
很简单:用ON_COMMAND_EX_ RANGE表示不受限制的范围。
ON...
MFC阅读全文
2012-08-29 14:55
⁄ 工业·编程
⁄ 共 3827字
动态创建就是运行时创建指定类的对象,在MFC中大量使用。如框架窗口对象、视对象,还有文档对象都需要由文档模板类对象来动态的创建。
初次接触MFC时,有这样的迷惘:MFC的几大类不用我们设计,也不用我们实例化对象。本来直观的理解是,需要框架时,自己写CFrameWnd myFrame;需要视时,自己写CView myView;……
写MFC程序时,我们几乎要对每个大类进行派生改写。换句...
MFC阅读全文
2012-08-29 13:08
⁄ 工业·编程
⁄ 共 1661字
precreatewindow是在在现有应用程序中更改样式。如果是正在现有应用程序中更改窗口属性,则遵循本文其余部分的说明。
若要更改框架应用程序(用应用程序向导创建的)所使用的默认窗口属性,请重写窗口的 PreCreateWindow 虚拟成员函数。
PreCreateWindow 允许应用程序访问通常由 CDocTemplate 类内部管理的创建进程。框架在即将创建窗口前调用 PreCreateWindow。通过...
MFC阅读全文
2012-08-28 10:33
⁄ 工业·编程
⁄ 共 467字
VC++中非模态对话框生成与模态有相似之处,主要不同在于模态采用DoModal函数生成,而非模态采用Create函数;而且非模态对话框生存周期较长,一般和父窗口的生存周期相同。
由于要使用Create函数,因为要在生成非模态对话框的父窗口中添加对话框类的指针,类型为(假设添加类时,非模态对话框类为CModallessDlg)CModallessDlg *,假设指针名为m_pModalessDlg。
在程序...
MFC阅读全文