MFC使用入门

1 调出控制台

  在APP类中的InitInstance()增加以下代码:
AllocConsole();
SetConsoleTitle(_T("Debug Output"));
_tfreopen(_T("CONOUT$"), _T("w"), stdout);
 
2 文本框显示默认的字符
 只要在OnInitDialog函数添加
 GetDlgItem(IDC_EDIT6)->SetWindowText("20");
 就可以了,就在对话框出现(OnInitDialog)之前显示文本框的默认字符(20)
 
3 添加了slider后删除,点对话框上的确定按扭,直接崩溃,原因是删除了控件但映射没有删除,解决办法,搜索ID,将doexchage里的映射删除就行。
 
4 在解决问题3时,删除了
DoDataExchange函数中的
//{{AFX_DATA_MAP(CMfc_ctl2Dlg)
// NOTE: the ClassWizard will add DDX and DDV calls here
//}}AFX_DATA_MAP
导致类向导一开就错,VC中的注释是不可以乱删除的!
 
5 slider的使用
  这个slider很有问题 1.为其关联一个控件变量,在对话框初始化的时候为其设置范围,报错
     2.为其关联一个控件变量,在onscroll中使用它获取位置时,报错(已经查明和之前乱删除东西有关,和slider无关)
  添加slider,在对话框中用重载虚函数OnHScroll响应它,写入下面代码:
CSliderCtrl   *pSlidCtrl=(CSliderCtrl*)GetDlgItem(IDC_SLIDER1);
slider_pos=pSlidCtrl->GetPos();
总算这种方式不会报错了~~~
 
6 combox的使用
添加combox,绑定控件变量,在initial dialog时添加
m_combo.AddString("com1");
m_combo.AddString("com2");
m_combo.AddString("com3");
m_combo.AddString("com4");
在类向导里添加响应函数OnSelchangeCombo1()添加:
if (1==Comm_Open_Flag) {
MessageBox("串口已打开");
return;
}
int sel=m_combo.GetCurSel();
switch(sel) {
case 0:
strcpy(com_name,"com1");
break;
...........................
7 tab控件的使用
参考日志
http://lycynthia.blog.sohu.com/55576164.html
1 设控件的关联控件变量为m_tabctl
2 创建对话框资源,方法为在资源目录里右击选择插入dialog
3 从对话框资源生成一个新的对话框类,选择类向导,创建新类,从dialog类中继承
4 在原来的对话框类中增加新类的实例
5 在原来的对话框类的oninitialdialog函数中增加以下代码:
   TCITEM    item;   
   item.mask    =    TCIF_TEXT;   
   item.pszText    =    "第一页";   
  
   m_tabctrl.InsertItem    (0,&item);   
   item.pszText    ="第二页";   
   m_tabctrl.InsertItem    (1,&item);   
    
   m_mm1.Create    (IDD_DIALOG1,&m_tabctrl);   
   m_mm2.Create    (IDD_DIALOG2,&m_tabctrl);   
    
   m_mm1.SetWindowPos    (NULL,10,30,400,100,SWP_SHOWWINDOW);   
   m_mm2.SetWindowPos    (NULL,10,30,400,100,SWP_HIDEWINDOW); 
6 在原来对话框中增TAB控件的响应函数,当标签页改变时,执行以下代码:
   CRect    r;   
   m_tabctrl.GetClientRect    (&r);   
   switch(m_tabctrl.GetCurSel())   
   {   
   case    0:   
   m_mm1.SetWindowPos    (NULL,10,30,r.right    -20,r.bottom    -40,SWP_SHOWWINDOW);   
   m_mm2.SetWindowPos    (NULL,10,30,r.right    -20,r.bottom    -40,SWP_HIDEWINDOW    );       
   break;   
   case    1:   
   m_mm1.SetWindowPos    (NULL,10,30,r.right    -20,r.bottom    -40,SWP_HIDEWINDOW);   
   m_mm2.SetWindowPos    (NULL,10,30,r.right    -20,r.bottom    -40,SWP_SHOWWINDOW    );       
   break;   
   } 
主要是改变窗口大小的,暂时我就不管这些了。
 
7 在对话框中添加菜单,和6添加TAB控件的一个关键所在是,这里的MENU不用新创建类,而是关联到DIALOG类上。具体细节我也没搞懂总之步骤如下:
参考了http://blog.163.com/ly8784@126/blog/static/63745477201021654023625/
insert一个menu资源,类向导,和已存在的dialog类关联,
 先增成员变量HMENU m_hMenu1;
 然后在初始化函数OnInitDialog()添加一下代码:
 m_hMenu1=LoadMenu(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MENU1));//导入资源,创建菜单
 ::SetMenu(this->GetSafeHwnd(),m_hMenu1);//添加到对话框
 
最后记得在OnDestroy中DestroyMenu(m_hMenu1);
 
8 创建模态对话框
1) 插入对话框资源,以这个资源创建类,从对话框类继承
2) 调出代码如下:
mydig dlg;
int result=dlg.DoModal();       //调用对话框类的成员函数
if(result==IDOK)
AfxMessageBox("单击确定按钮");
else
AfxMessageBox("单击取消按钮");
3) 记住,要识别创建的类mydig必须include头文件
 
9 MDI中修改默认打开视图的数量
见贴《MFC多文档应用程序同时显示两个视图》
 
10 MDI中如何在几个文档都创建完后,对所有文档实施平铺?
在BOOL CDMFCApp::InitInstance()里添加:
CMDIFrameWnd   *pFrame1=(CMDIFrameWnd*)AfxGetApp()->m_pMainWnd; 
   pFrame1->MDITile(MDITILE_HORIZONTAL); 
 
然后发现初始化时的子窗口是平铺了,但新添加的子窗口却没有和之前的窗口一起被平铺,所以,作出以下修改,首先,将上面在app中的代码注释了,然后重载OnNewFIle函数(重载后不会新建文档,需要自手动加代码来新建文档),添加以下代码:
   //获取文档模板列表
   POSITION pos=theApp.GetFirstDocTemplatePosition();
   //取得一个文档模板,我取的是第一个,你可以去任何一个模板
   CDocTemplate* pDocTempl=theApp.GetNextDocTemplate(pos);
   //利用文档模板创建新文档
   pDocTempl->OpenDocumentFile(NULL);
 
//平铺所有文档
   CMDIFrameWnd   *pFrame1=(CMDIFrameWnd*)AfxGetApp()->m_pMainWnd; 
   pFrame1->MDITile(MDITILE_HORIZONTAL); 
posted @ 2013-01-11 23:06  yurius  阅读(1261)  评论(0编辑  收藏  举报