-
1 # 豬
-
2 # 用戶7252142908817
你好,MFC中可以使用ClassWizard創建一個菜單命令映射,然後在主窗口和子窗口的類中添加響應菜單命令的函數。
在主窗口中可以在OnInitMenuPopup中獲取子窗口句柄,然後通過SendMessage將該消息傳遞到子窗口中,以實現在子窗口中響應菜單命令的功能。
同時需要注意,子窗口中除了響應菜單命令的函數之外,還需要重載WM_COMMAND和WM_INITMENUPOPUP消息響應函數,以便正確處理菜單命令的傳遞。
-
3 # 浩男123
回答:
使用MFC的菜單連接主窗口與子窗口需要在主窗口類中添加菜單資源,並在子窗口類中添加菜單項。
深入介紹:
1. 在主窗口類中添加菜單資源
a. 打開資源視圖器,選擇菜單資源類型,右鍵單擊新建菜單資源。
b. 在新建菜單資源對話框中,為菜單項命名,設置圖標和文本等屬性。
c. 將菜單資源添加到主窗口類的頭文件中,例如:
```cpp
// MyMainFrame.h
#include "afxcmn.h"
#include "MyMenu.h" // 包含菜單資源的頭文件
class CMyMainFrame : public CFrameWndEx
{
public:
CMyMainFrame();
~CMyMainFrame();
protected:
virtual void OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext);
afx_msg void OnFileOpen();
DECLARE_MESSAGE_MAP()
};
```
2. 在子窗口類中添加菜單項
a. 在子窗口類的頭文件中添加菜單資源的聲明,例如:
```cpp
// MyChildWindow.h
#include "afxwin.h"
#include "MyMenu.h" // 包含菜單資源的頭文件
class CMyChildWindow : public CDialogEx
{
public:
CMyChildWindow();
~CMyChildWindow();
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV支持函數
DECLARE_MESSAGE_MAP()
};
```
b. 在子窗口類的實現文件中添加菜單項的代碼,例如:
```cpp
// MyChildWindow.cpp
BEGIN_MESSAGE_MAP(CMyChildWindow, CDialogEx)
ON_COMMAND(ID_FILE_OPEN, &CMyChildWindow::OnFileOpen) // ID_FILE_OPEN是菜單項的ID號,可以根據實際情況修改
END_MESSAGE_MAP()
```
3. 實現菜單項的功能函數,例如:
```cpp
// MyChildWindow.cpp
void CMyChildWindow::OnFileOpen()
{
// 實現打開文件的功能代碼,例如調用其他窗口或API函數打開文件等。
}
```4. 在主窗口類的OnCreateClient函數中創建子窗口對象,並將菜單項連接到子窗口的消息映射表中,例如:
```cpp
// MyMainFrame.cpp
void CMyMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
if (!CFrameWndEx::OnCreateClient(lpcs, pContext)) return; // 如果父窗口創建失敗則返回。
m_pChildWnd = new CMyChildWindow(); // 創建子窗口對象。
m_pChildWnd->Create(NULL, _T("My Child Window"), WS_OVERLAPPEDWINDOW | WS_VISIBLE | CBRS_TOP | CBRS_LEFT, CRect(0, 0, 500, 500), this); // 創建子窗口並設置位置和大小等參數。
m_pChildWnd->ConnectMenu(this); // 將菜單項連接到主窗口的消息映射表中。注意要先將菜單資源添加到主窗口類的頭文件中。
-
4 # CROWN2021
首先,在資源裡建立一個新的菜單,然後點擊對話框選擇屬性,在屬性面板的中間位置有一個Menu選項,點開就有你剛才建立的菜單了,選上就行了。
回覆列表
在MFC中,可以使用消息映射機制將菜單命令與主窗口和子窗口的相應函數關聯起來。
首先,在主窗口和子窗口的類定義中添加相應的消息映射函數,例如OnMenuCommand。
然後,在主窗口類的消息映射中添加菜單命令ID與相應的函數的映射關系,例如ON_COMMAND(ID_FILE_NEW, OnFileNew)。
最後,在子窗口類的消息映射中也可以添加菜單命令ID與相應的函數的映射關系,以便在子窗口中處理該菜單命令。
這樣,當菜單項被點擊時,對應的函數將被調用,從而實現了菜單與主窗口和子窗口之間的連接。