日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

创建没有Document的MFC MDI应用程序

發布時間:2023/12/9 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 创建没有Document的MFC MDI应用程序 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
程序源代碼???

效果,如圖:


1)創建一個MFC MDI應用程序,Wizard設置如圖,
然后點Finish
2)CMyTreeView?在CMyTreeView中新增三個函數,顯示些示例數據virtual BOOL PreCreateWindow(CREATESTRUCT& cs);//本例沒有使用該函數afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);virtual void OnInitialUpdate(); 源代碼如下:int CMyTreeView::OnCreate(LPCREATESTRUCT lpCreateStruct){if (CTreeView::OnCreate(lpCreateStruct) == -1)return -1;
CTreeCtrl& m_treeCtrl = GetTreeCtrl();
HTREEITEM hItem; hItem = m_treeCtrl.InsertItem("node 1", TVI_ROOT);m_treeCtrl.Expand(hItem, TVE_EXPAND);
hItem = m_treeCtrl.InsertItem("node 2", TVI_ROOT);m_treeCtrl.Expand(hItem, TVE_EXPAND);
hItem = m_treeCtrl.InsertItem("node 3", hItem);m_treeCtrl.Expand(hItem, TVE_EXPAND);
return 0;}
void CMyTreeView::OnInitialUpdate(){CTreeView::OnInitialUpdate();CTreeCtrl& m_treeCtrl = GetTreeCtrl(); m_treeCtrl.ModifyStyle(0, WS_VISIBLE | WS_TABSTOP | TVS_HASBUTTONS | TVS_LINESATROOT | TVS_HASLINES | TVS_DISABLEDRAGDROP); }
CMyListView在CMyListView中新增三個函數,顯示些示例數據virtual BOOL PreCreateWindow(CREATESTRUCT& cs);//本例沒有使用該函數afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);virtual void OnInitialUpdate(); 源代碼如下:
int CMyListView::OnCreate(LPCREATESTRUCT lpCreateStruct){if (CListView::OnCreate(lpCreateStruct) == -1)return -1;
// TODO: ?Add your specialized creation code hereCListCtrl& m_list = GetListCtrl();
CString sTmp = "asdf";//示例數據,代碼中最好封裝成函數int iPos = m_list.GetItemCount();m_list.InsertItem(iPos, sTmp);m_list.SetItemText(iPos, 1, sTmp+sTmp);
return 0;}
void CMyListView::OnInitialUpdate(){CListView::OnInitialUpdate();
CListCtrl& listCtrl = GetListCtrl();
LONG lStyle;lStyle = GetWindowLong(listCtrl.m_hWnd, GWL_STYLE); ??lStyle &= ~LVS_TYPEMASK; ? ? ? ? ? ? ? ? ? ? ? ? ? ?lStyle |= LVS_REPORT ; ? ? ? ? ?SetWindowLong(listCtrl.m_hWnd, GWL_STYLE, lStyle); ? ?
DWORD dwStyle = listCtrl.GetExtendedStyle();dwStyle |= LVS_EX_FULLROWSELECT | TVS_SHOWSELALWAYS | LVS_EX_FULLROWSELECT;listCtrl.SetExtendedStyle(dwStyle);
CRect rect;GetClientRect(&rect);
listCtrl.InsertColumn( 0, "信息", ? ? LVCFMT_CENTER, ?rect.Width()/2 );listCtrl.InsertColumn( 1, "信息2", ? ? LVCFMT_CENTER, ?rect.Width()/2 );}
CFrmChildTreeFrmChildTree.h
class CFrmChildTree : public CMDIChildWnd
#include "MyTreeView.h"聲明一個CMyTreeView數據成員CMyTreeView m_FrmChildTree;
FrmChildTree.cppint CFrmChildTree::OnCreate(LPCREATESTRUCT lpCreateStruct){if (CMDIChildWnd::OnCreate(lpCreateStruct) == -1)return -1;
// TODO: ?Add your specialized creation code hereif (!m_FrmChildTree.Create(NULL, NULL, AFX_WS_DEFAULT_VIEW,? CRect(0, 0, 0, 0), this, AFX_IDW_PANE_FIRST, NULL)) { TRACE0("Failed to create view window\n"); return -1; }
return 0;}
CFrmChildList
FrmChildList.h
class CFrmChildList : public CMDIChildWnd(with Splitter)
#include "MyListView.h"最好聲明一個MyListView數據成員,用于記錄Spliter創建的View,以便以后使用CMyListView* m_pMyListView;
FrmChildList.cppBOOL CFrmChildList::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext){ //return m_wndSplitter.Create(this, // 2, 2, ? ? ? // TODO: adjust the number of rows, columns // CSize(10, 10), ?// TODO: adjust the minimum pane size // pContext);// TODO: Add your specialized code here and/or call the base class CRect rect; GetClientRect(&rect); if (!m_wndSplitter.CreateStatic(this, 2, 1)) { return FALSE; } m_wndSplitter.CreateView(0, 0, RUNTIME_CLASS(CMyListView),CSize(rect.Width(),rect.Height()/5 ?),pContext);m_wndSplitter.CreateView(1, 0, RUNTIME_CLASS(CMyListView),CSize(rect.Width(),rect.Height()/5 ?),pContext); m_pMyListView = (CMyListView*)m_wndSplitter.GetPane(0, 0); ?//... ...
return CMDIChildWnd::OnCreateClient(lpcs, pContext);}
3)修改menu:IDR_MFC_MDI_BUT_NO_TYPE增加:ID_FILE_TREE ID_FILE_LIST 兩個菜單,分別為Tree 和 List在app中響應
app.h
#include "FrmChildList.h"#include "FrmChildTree.h"
CMDIChildWnd* m_pFrmChildList; //兩個CMDIChildWnd對象 CMDIChildWnd* m_pFrmChildTree;
afx_msg void OnFileTree();afx_msg void OnFileList();
private: void ActiveChildWnd(CMDIChildWnd* m_pMDIChildWnd); app.cpp
BOOL CMFC_MDI_BUT_NO_DOCApp::InitInstance(){ ... ...if( NULL == m_pFrmChildList ) { m_pFrmChildList =pFrame->CreateNewChild( RUNTIME_CLASS(CFrmChildList), IDR_MFC_MDI_BUT_NO_TYPE, 0, 0); }... ...}
void CMFC_MDI_BUT_NO_DOCApp::OnFileNew() //屏蔽該代碼,刪除對應的New菜單{ //CMainFrame* pFrame = STATIC_DOWNCAST(CMainFrame, m_pMainWnd); create a new MDI child window //pFrame->CreateNewChild( //RUNTIME_CLASS(CChildFrame), IDR_MFC_MDI_BUT_NO_TYPE, m_hMDIMenu, m_hMDIAccel);}
void CMFC_MDI_BUT_NO_DOCApp::OnFileTree(){// TODO: Add your command handler code hereCMainFrame* pFrame = STATIC_DOWNCAST(CMainFrame, m_pMainWnd); if( NULL == m_pFrmChildTree ) { m_pFrmChildTree =pFrame->CreateNewChild( RUNTIME_CLASS(CFrmChildTree), IDR_MFC_MDI_BUT_NO_TYPE, 0, 0); } else { ActiveChildWnd( m_pFrmChildTree ); } m_pFrmChildTree->SetWindowTextA("Tree"); ? ?}
void CMFC_MDI_BUT_NO_DOCApp::OnFileList(){// TODO: Add your command handler code here]CMainFrame* pFrame = STATIC_DOWNCAST(CMainFrame, m_pMainWnd); if( NULL == m_pFrmChildList ) { m_pFrmChildList =pFrame->CreateNewChild( RUNTIME_CLASS(CFrmChildList), IDR_MFC_MDI_BUT_NO_TYPE, 0, 0); } else { ActiveChildWnd( m_pFrmChildList ); } m_pFrmChildList->SetWindowTextA("List");}
void CMFC_MDI_BUT_NO_DOCApp::ActiveChildWnd(CMDIChildWnd* m_pMDIChildWnd){ m_pMDIChildWnd->MDIActivate();}

轉載于:https://www.cnblogs.com/zkliuym/archive/2010/04/01/1702168.html

總結

以上是生活随笔為你收集整理的创建没有Document的MFC MDI应用程序的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。