有三个菜鸟问题,望高人解答,平台是vc2008,创建的MDI的工程,用的featurePack的ribbon界面。1. 在mainFrame里设定
         mdiTabParams.m_bTabIcons = FALSE;    // 设置为 TRUE 将在 MDI 选项卡上启用文档图标
   则MDI的标签上就会显示一个小图标,如何动态改变这个图标?(即程序运行中可自行设置图标)2. 对于“新建”命令onFileNew(),放在什么位置比较好?放在Cmainframe.cpp里好像不会响应。我把它放到CChildFrame里,程序如下:
void CChildFrame::OnFileNew()
{
         CMultiDocTemplate*   m_MyDT; 
m_MyDT   =new   CMultiDocTemplate( 
IDR_MAINFRAME,//这里你自己看情况修改 
RUNTIME_CLASS(CNewGridDoc),
RUNTIME_CLASS(CChildFrame), 
RUNTIME_CLASS(CNewGridView));
AfxGetApp()->AddDocTemplate(m_MyDT); CNewGridDoc* pDoc=(CNewGridDoc*)m_MyDT-> CreateNewDocument();
//CDocTemplate* m_MyDT = pDoc->GetDocTemplate();
CFrameWnd  *pFrame=m_MyDT->CreateNewFrame(pDoc,NULL);//创建新窗口 
if(pFrame==NULL) 
return; 
m_MyDT-> InitialUpdateFrame(pFrame,pDoc);//显示新窗口 
}
虽然会创建新的子窗口,但名字好像不太对劲,如果不改写onFileNew,创建的名字就会是my1、my2、my3……这样的顺序,但我改写了之后创建的子窗口名字却是my1、my、my……,如果把子窗口全关掉后重新创建,名字就会是my2、my、my……,(没有序号了)请问如何让名字的序号正常?3. 我把子窗口拆分成上下两个视图,两个视图加载的都是同一个formview,而我在formview的初始化函数里为这个formview加载了一个toolbar。问题就出在toolbar的状态显示上。我点击拆分窗口A里的toolbar的一个button,这个button变为check状态,奇怪的是另外一个拆分窗口B里toolbar也接收到了OnUpdate消息,居然也B里的这个button设置为check状态,可我点击窗口B,B的这个button却又立刻变回了uncheck状态,A里的button也uncheck了,太奇怪了,为什么两个拆分窗口里的toolbar会相互关联?求高人解答。

解决方案 »

  1.   

    对第一个问题,我在mainframe里自己写了个函数来增加子窗口:
            CMultiDocTemplate*   m_MyDT; 
    m_MyDT   =new CMultiDocTemplate(IDR_myTYPE,
    RUNTIME_CLASS(CmyDoc),
    RUNTIME_CLASS(CChildFrame), // custom MDI child frame
    RUNTIME_CLASS(CmyView));
    AfxGetApp()->AddDocTemplate(m_MyDT); m_MyDT->OpenDocumentFile(NULL);这样写的话新建的子窗口名字就会全都是“my1”,如果红字部分换成如下代码:
            CmyDoc* pDoc=(CmyDoc*)m_MyDT-> CreateNewDocument();
    CMDIChildWnd* pFrame=(CMDIChildWnd*) (m_MyDT->CreateNewFrame(pdDoc, NULL));
    if(pFrame==NULL) 
    return; 
    m_MyDT-> InitialUpdateFrame(pFrame,pDoc);//显示新窗口
     
    除了默认创建的一个子窗口有名字外,我新建的子窗口都没有名字。
      

  2.   

    接上面:
    CmyDoc* pDoc=(CmyDoc*)m_MyDT-> CreateNewDocument();
    CMDIChildWnd* pFrame=(CMDIChildWnd*) (m_MyDT->CreateNewFrame(pdDoc, NULL));
    if(pFrame==NULL) 
    return; 
    m_MyDT-> InitialUpdateFrame(pFrame,pDoc);//显示新窗口

    这一段代码我在vc6下测试是完全正常的,创建出来的子窗口名字会按顺序:my1,my2,m3……
    但在vs2008下却不行了,创建的子窗口全没名字,这是为什么?怎么解决啊?
      

  3.   

    试试这个:
    CmyDoc* pDoc = reinterpret_cast<CmyDoc*>(m_MyDT->OpenDocumentFile(NULL));