MFC 小知识点
来源:互联网 发布:专业气象软件 编辑:程序博客网 时间:2024/04/30 21:10
1.app类管理整个应用程序,菜单资源的创建在其中完成、
1.XXApp.h:
HMENU m_hOPMenu;
HMENU m_hInitMenu;
2.CXXApp::InitInstance()赋值:
m_hInitMenu = ::LoadMenu(hInst, MAKEINTRESOURCE(IDR_MAINFRAME));
m_hOPMenu = ::LoadMenu(hInst, MAKEINTRESOURCE(IDR_DEMOTYPE));
2.mainFrame类是主框架类,管理整个mfc程序的框架,其继承自CMDIFrameWnd。可见CMDIFrameWnd主要是主框架类模板(字面意思可知)
3.childFrame类是子框架类,负责一个子框架的管理,其继承自CMDIChildWnd。可见CMDIChildWnd主要是子框架模板(字面上只知道是Wnd类,但其代表子框架类)
4.MDI主要程序由一个app,一个mainFrame构成,同时系统为我们自动生成了一个子框架(包括childFrame,doc,view三位一体),此子框架的句柄是什么?如何得到?当我们要在多个子框架中切换时,如果不知道此系统自动生成的子框架句柄,就无法切换到它。我的做法是:在不知道怎么得到句柄的情况下,不适用此默认的子框架窗口。(阿在appwinzerd中不勾选view/document选项。使用的所以的子框架都是由自己生成的)
通常我们可以创建自己的子框架,包括一个继承自CMDIChildWnd的子框架模板类,一个继承自CDocument的doc类,和一个继承自CView(或其子类)的view类。为了管理子框架。我们通常会创建一个子框架的句柄。由于主框架统一管理子框架。所以我们一般把此句柄放在MainFrame类中声明。子框架的实例的生成如下:
void CMainFrame::OnThirdFramed(){// TODO: 在此添加命令处理程序代码if(m_pThirdFrame != NULL){m_pThirdFrame->MDIActivate();return;}m_pThirdFrame=new CThirdFrame();CCreateContext context;CThirdDoc* pDoc=new CThirdDoc();//框架关联的doc类实例context.m_pCurrentDoc=pDoc;context.m_pNewViewClass=RUNTIME_CLASS(CThirdView);框架关联的view类m_pThirdFrame->LoadFrame(IDR_MAINFRAME,WS_MAXIMIZEBOX,this,&context);m_pThirdFrame->SetWindowText("third");m_pThirdFrame->ShowWindow(SW_SHOWMAXIMIZED);m_pThirdFrame->InitialUpdateFrame(NULL,TRUE);}5.SetMenu(AfxGetApp()->m_pMainWnd->m_hWnd,m_hOPMenu);
afxGetApp()->m_pMainWnd:得到主框架实例,其是一个MFC封装后的窗口对象。
afxGetApp()->m_pMainWnd->h_Wnd:获得hWnd类型的对象,其是win32类型的窗口对象。
6.((CMainFrame *)AfxGetMainWnd())
AfxGetMainWnd()函数主要是获得主框架窗口的实例。类似于afxGetApp()->m_pMainWnd。有什么区别吗?
7.如果要产生多个子框架,子框架在MainFrame类中定义。如果一个子框架要产生多个视图,视图在子框架类中定义。
CFrame1::CFrame1(){ m_pView1=new CView1();//VIEW1 CCreateContext context; RECT rect={10,10,100,200}; context.m_pCurrentDoc=this->GetActiveDocument(); m_pView1->Create(NULL,NULL,WS_CHILD,rect,this,123,&context); m_pView2=new CView2();//VIEW2 m_pView2->Create(NULL,NULL,WS_CHILD,rect,this,123,&context);}//视图的切换用框架函数setActiveView()
8.如何让MDI程序开始生成时不自动生成空白文档..
在CXXXAPP::InitInstance中,找到如下两句:
CCommandLineInfo cmdInfo;
ParseCommandLine(cmdInfo);
在后面添加下面两行代码:
if (cmdInfo.m_nShellCommand == CCommandLineInfo::FileNew) //替换命令 取消默认窗口生成
cmdInfo.m_nShellCommand = CCommandLineInfo::FileNothing;
9.CFileDialog的初始化和使用(if(fileDlg.domodel()==IDOK))
两个构造函数
- CFileDialog fileDlg(TRUE, "*.*", "",OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,"txt文件(*.txt)|*.txt|mdf文件(*.mdf)|*.mdf||",1);
- CFileDialog fileDlg(TRUE);//作为打开对话框用true,另存为对话框用false;
当使用CFileDialog fileDlg(TRUE);构造对象时,可以通过m_ofn结构中的变量来设置对话框相应的属性。最重要的有:
- fileDlg.m_ofn.lpstrFilter="txt文件\0*.txt\0mdf\0*.mdf\0\0";设置文件对话框的filter属性。(注意和第一个构造函数中filter写法的不同\0取代|)
- fileDlg.m_ofn.lpstrInitialDir="C:\\";设置初试打开的文件位置。
关于文件路径和名称的函数如下:如打开c:\a.txt
- fileDlg.getPathName()、返回c:\a.txt
- fileDlg.getFileName()、返回a.txt
- fileDlg.getFileTitle()、返回a.(title是头的意思啊,所以返回前面)
- fileDlg.getFileExt()、返回txt
10.long转换问Cstring
long num=a;
CString str;
str.Format(_T("%ld"),num);
11. CSplitterWnd::setColumnInfo(int col, int cxIdeal, int cxMin)的含义:对第col列设置其宽度,宽度设置为cxIdeal。cxMin表示,当窗口的宽度小于cxMin时,窗口就自动靠边隐藏.
12.如何在dailog的大小改变时,同时改变其中控件的大小来与之同步。
基本方法是在dialog执行onSize时,改变控件的大小。但是当dialog首次创建时,先执行onsize,在执行onInitialDialog(),此时控件并没有产生,所以要先判断此控件是否存在,存在时才需要进行更改。
例子:在dialog中放置一个可以跟随他改变的view。
void CDlg::OnSize(UINT nType, int cx, int cy){CDialogEx::OnSize(nType, cx, cy);// TODO: 在此处添加消息处理程序代码CWnd* pwnd=GetDlgItem(IDC_MY_DRAW_VIEW);if(pwnd){CRect rect;GetClientRect(&rect);rect.top+=50;rect.left+=10;m_pDrawView->MoveWindow(&rect);}}13. IDR_MAINFRAME string 中的第四个和第五个只能定义一种文件适配器。不可能定义两个,原因很简单,每一种doctemplate只能处理一种文件类型。而且,docManager也是根据这两个参数来确定使用哪个doctemplate来打开文件的,试想如果可以定义两种类型的文件,则docManager就不知道使用哪个doctemplate来打开文件了。所以不同的文件对应的不同的doctemplate的idresource参数应该是不同的。
1.通过以下代码输出想要的信息#ifdef _DEBUG afxDump << "CString s" << s << "\n";#endif
14.将CString转换为int
CString str("1234");
int i= _ttoi(str);
在ANSI 和 UNICODE 都可以用的。
15. CString 转为string
//CString转string
USES_CONVERSION;
char* p=T2A(m_ShowBoreName);
CString 转char *
CString cstr;
char *p = (LPSTR)(LPCTSTR)cstr;
第二种方法
USES_CONVERSION;
char* s_char=W2A(it->first);
font.drawCNString(s_char);
16.点击红箭头指向的叉时,是childFrame对象响应消息,响应的是onClose消息,不是onDestroy消息。
- MFC小知识点
- MFC 小知识点
- MFC总结的小知识点
- MFC 编辑框控件小知识点
- 通过小练习掌握MFC知识点之起步篇-MFC与数据库的交互
- 小知识点
- 小知识点
- 小知识点
- 小知识点
- 小知识点
- 小知识点
- 小知识点
- 小知识点
- 小知识点
- 小知识点
- 小知识点
- 小知识点
- 小知识点
- ArcGis10.2(中英文)安装详解及下载地址
- linux中fork函数详解
- MFC 文档视图结构程序结构总揽
- 代码大全(第2版)(奋斗的小鸟)_PDF 电子书
- netfilter/iptables 命令介绍
- MFC 小知识点
- 代码整洁之道(奋斗的小鸟)_PDF 电子书
- OCP-1Z0-052-V8.02-178题
- 找到字符串的所有字串
- 为什么好多中国人说英语听起来不太礼貌?
- 字典树
- APDU命令
- android中使用线程(比如修改textview的text)
- QTP 错误处理