本文主要介紹:在MFC建立的停靠視窗中添加一些控件,浮動視窗中可以添加MFC自身的控件,也可以添加對話框。
一、建立對話框
對話框屬性做以下修改:
二、視窗中添加控件
ObjectWnd.h檔案:
#pragma once
#include "afxdockablepane.h"
#include "ObjectDlg.h"
#include "afxwin.h"
class CObjectWnd :
public CDockablePane
{
public:
CObjectWnd(void);
~CObjectWnd(void);
DECLARE_MESSAGE_MAP()
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
afx_msg void OnSize(UINT nType, int cx, int cy);
afx_msg void OnDestroy();
CEdit m_edit;
CStatic m_static;
CObjectDlg m_objectDlg; //對話框類
void AdjustLayout();
};
ObjectWnd.cpp檔案:
#include "stdafx.h"
#include "ObjectWnd.h"
#include "resource.h"
CObjectWnd::CObjectWnd(void)
{
}
CObjectWnd::~CObjectWnd(void)
{
}
BEGIN_MESSAGE_MAP(CObjectWnd, CDockablePane)
ON_WM_CREATE()
ON_WM_SIZE()
ON_WM_DESTROY()
END_MESSAGE_MAP()
void CObjectWnd::AdjustLayout()
{
if (GetSafeHwnd () == NULL || (AfxGetMainWnd() != NULL && AfxGetMainWnd()->IsIconic()))
{
return;
}
CRect rectClient;
GetClientRect(rectClient);
int height = rectClient.Height()/3;
//控件在視窗中所占空間大小
m_edit.SetWindowPos(this,rectClient.left,rectClient.top,rectClient.Width(),rectClient.Height()/,SWP_NOACTIVATE | SWP_NOZORDER);
m_static.SetWindowPos(this,rectClient.left,rectClient.top+height,rectClient.Width(),rectClient.Height()/,SWP_NOACTIVATE | SWP_NOZORDER);
m_objectDlg.SetWindowPos(this,rectClient.left,rectClient.top+height*,rectClient.Width(),rectClient.Height()/,SWP_NOACTIVATE | SWP_NOZORDER);
}
int CObjectWnd::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CDockablePane::OnCreate(lpCreateStruct) == -)
return -1;
CRect rectDummy;
rectDummy.SetRectEmpty();
// 建立組合:
const DWORD dwViewStyle = WS_CHILD | WS_VISIBLE | CBS_DROPDOWNLIST | WS_BORDER | CBS_SORT | WS_CLIPSIBLINGS | WS_CLIPCHILDREN;
if (!m_edit.Create(dwViewStyle, rectDummy, this, ))
{
TRACE0("未能建立CEdit控件 \n");
return -1; // 未能建立
}
if(!m_static.Create(NULL,dwViewStyle,rectDummy,this,))
{
TRACE0("未能建立CStatic控件\n");
return -1; // 未能建立
}
// 建立對話框視窗:
if (!m_objectDlg.Create(IDD_ObjectDlg,this))
{
TRACE0("未能建立對話框視窗\n");
return -1; // 未能建立
}
m_objectDlg.ShowWindow(SW_SHOW);
AdjustLayout();
//m_edit.SetWindowText(_T("CEdit控件"));
//m_static.SetWindowText(_T("CStatic控件"));
return 0;
}
void CObjectWnd::OnSize(UINT nType, int cx, int cy)
{
CDockablePane::OnSize(nType, cx, cy);
AdjustLayout();
}
void CObjectWnd::OnDestroy()
{
CDockablePane::OnDestroy();
m_objectDlg.DestroyWindow();
// TODO: 在此處添加消息處理程式代碼
}
三、添加完成,運作如下: