最近用VC/MFC写程序遇到的问题以及解决方案

这篇博客介绍了如何在VC/MFC中创建和管理控件,包括在控制条上创建树型控件,工具条上创建CStatic和CEdit控件,以及树型控件节点的图标设置和节点属性的使用。同时讲解了文档模板和文档模板管理器的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.在控制条上创建控件
  //以树型控件为例
    //创建自定义控制条
    if (!m_wndMyBar.Create(_T("我的控制条"),this,123))
    { TRACE0("Failed to create mybar/n"); return -1; }
    
    m_wndMyBar.SetBarStyle(m_wndMyBar.GetBarStyle() | CBRS_TOOLTIPS |
        CBRS_FLYBY | CBRS_SIZE_DYNAMIC);
    
    /////////////这一段代码创建树型控件////////////
    if (!m_Tree.Create(WS_CHILD|WS_VISIBLE|
        TVS_HASLINES|TVS_HASBUTTONS|TVS_LINESATROOT,
        CRect(0, 0, 0, 0), &m_wndMyBar, 100))
    {
        TRACE0("Failed to create instant bar child/n");
        return -1;
    }
    m_Tree.ModifyStyleEx(0, WS_EX_CLIENTEDGE);

2.在工具条上创建控件
   //以CStatic和CEdit为例子
首先在资源编辑器中为需要创建的资源新建两个工具格分别命名为ID_TEXT和ID_EDIT;
然后在主框件MainFrame.h文件中加上
#define    ID_EDT WM_USER + 1000
#define    ID_TXT ID_EDT  + 1000
接着在MainFrame.cpp的OnCreate函数中工具条初始化以后加入以下代码
    //获得位置
    int index = 0;
    RECT rect;
    while(m_wndToolBar.GetItemID(index)!=ID_TEXT)
        index++;
    
    ////设置指定工具项的宽度并获取新的区域  80是宽度
    m_wndToolBar.SetButtonInfo(index, ID_TEXT, TBBS_SEPARATOR, 80);
    
    //设置位置
    m_wndToolBar.GetItemRect(index, &rect);
    rect.top+=5;
    rect.bottom +=50;
    
    if( !m_Static.Create("输入姓名:  ",SS_LEFT,rect,&m_wndToolBar,ID_TXT ) )
    {
        TRACE0("Failed to create toolbar/n");
        return -1;      // fail to create
    }
    CFont* font=m_wndToolBar.GetFont();
    m_Static.SetFont(font);
    m_Static.ShowWindow(SW_SHOW);
    
    //获得位置
    index = 0;
    rect ;
    while(m_wndToolBar.GetItemID(index)!=ID_EDIT)
        index++;
    
    ////设置指定工具项的宽度并获取新的区域  80是宽度
    m_wndToolBar.SetButtonInfo(index, ID_EDIT, TBBS_SEPARATOR, 100);
    
    //设置位置
    m_wndToolBar.GetItemRect(index, &rect);
    rect.top+=1;
    // rect.bottom ;
    
    if( !m_Edit.Create(ES_LEFT,rect,&m_wndToolBar,ID_EDT) )
    {
        TRACE0("Failed to create toolbar/n");
        return -1;      // fail to create
    }
    
    m_Edit.SetFont(this->GetFont());
    m_Edit.ShowWindow(SW_SHOW);

如此便在工具条上生成了CStatic和CEdit控件

3.树型控件节点的图标的例子(树型控件定义接问题1)
首先声明一个
CImageList    m_ImageListTree;

之后
    //初始化树形控件的图标
    if( !m_ImageListTree.Create( IDB_FILE_TYPES, 17, 1, RGB( 255, 255, 255 ) ) )
        TRACE( _T("Image list creation fault") );
    m_Tree.SetImageList( &m_ImageListTree, TVSIL_NORMAL );
    
    ////往树型控件添加内容///
    m_hRoot= m_Tree.InsertItem(_T("共享联系人"),1,0);

4.树型控件的节点有两个可存储的属性
(1).节点的Text---存储节点显示的文字
(2).节点的data---存储节点的唯一标识,如文件的路径等等

5.文档模板以及文档模板管理器
   CWinApp的对象一般包含m_pDocManager属性,即文档管理器。可以通过
pApp->m_pDocManager->GetFirstDocTemplatePosition();


遍历文档模板的例子
POSITION pos;
CString m_sDocString;
CProjectTemplate* pTemplate;
CProjectDoc* pDoc;
CWinApp* pApp=AfxGetApp();

//遍历文档模板,找到与扩展名相对应的模板
pos=pApp->m_pDocManager->GetFirstDocTemplatePosition();
while(pos)
{
   pTemplate=(CProjectTemplate*)pApp->GetNextDocTemplate(pos);
   m_sDocString=pTemplate->GetDocStrings();
//找到对应的模板后调用OpenDocumentFile函数创建文文档
  if( m_sDocString.Find(".doc",0)!=-1 && b_DocFind==FALSE )
  {
      pDoc=(CProjectDoc*)pTemplate->OpenDocumentFile(NULL);    
//创建文档以后调用OnSavaDocument存储文档并创建文件
pDoc->OnSaveDocument(filepath);
                        
   }
}                

以上均需要包含sizecbar.cpp,sizecbar.h,scbarg.h,scbarg.cpp文件,有关这四个文件的详细信息可搜索一下~~,主要是一些前人编的界面友好的控件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值