
MFC OnSize不调用?
哪位大侠帮我看看为什么我在OnSize()里面的操作不管用,设断点发现好像OnSize()根本就没有调用,不可能吧,到底怎么回事呢?代码如下://CFcModelingD...
哪位大侠帮我看看为什么我在OnSize()里面的操作不管用,设断点发现好像OnSize()根本就没有调用,不可能吧,到底怎么回事呢?
代码如下:
// CFcModelingDlg dialog
class CFcModelingDlg : public CDialog
{
DECLARE_DYNAMIC(CFcModelingDlg)
public:
CFcModelingDlg(CWnd* pParent = NULL); // standard constructor
virtual ~CFcModelingDlg();
int m_dlgWidth;
int m_dlgHeight;
int m_width;
int m_height;
double m_multiWidth;
double m_multiHeight;
BOOL change_flag; //用来判断Onsize()执行时对话框是否已执行;初始化为false
// Dialog Data
enum { IDD = IDD_FC_MODELING };
protected:
virtual BOOL OnInitDialog();
virtual void OnSize(UINT nType, int cx, int cy);
virtual void ReSize(int nID);
DECLARE_MESSAGE_MAP()
CTabCtrl m_tabInfo;
CWtgList m_wtgList;
CSvcList m_svcList;
};
.cpp中
BOOL CFcModelingDlg::OnInitDialog()
{
CDialog::OnInitDialog();
m_tabInfo.InsertItem(0, "zz");
m_tabInfo.InsertItem(1, "aa");
//m_tabInfo.InsertItem(2, "bb");
//m_tabInfo.InsertItem(3, "cc");
//m_tabInfo.InsertItem(4, "dd");
m_wtgList.Create(IDD_DIALOG1, GetDlgItem(IDC_TAB_COMP_INFO));
m_svcList.Create(IDD_DIALOG2, GetDlgItem(IDC_TAB_COMP_INFO));
CRect rc;
m_tabInfo.GetClientRect(rc);
rc.top += 21;
rc.bottom -= 5;
rc.right += 5;
rc.left -= 5;
m_wtgList.MoveWindow(&rc);
m_svcList.MoveWindow(&rc);
m_wtgList.ShowWindow(true);
m_svcList.ShowWindow(false);
m_tabInfo.SetCurSel(0);
::GetWindowRect(m_hWnd, rc);
ScreenToClient(rc);
//对话框宽高
m_dlgWidth = rc.right - rc.left;
m_dlgHeight = rc.bottom - rc.top;
//屏幕分辨率
m_width = GetSystemMetrics(SM_CXSCREEN);
m_height = GetSystemMetrics(SM_CYSCREEN);
//放大倍数
m_multiWidth = (double)m_width/(double)m_dlgWidth;
m_multiHeight = (double)m_height/(double)m_dlgHeight;
change_flag = true;
//ShowWindow(SW_MAXIMIZE); //对话框以最大化方式弹出
return TRUE;
}
void CFcModelingDlg::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy);
if(change_flag)
{
ReSize(IDC_TAB_COMP_INFO);
//恢复放大倍数,并保存 (确保还原时候能够还原到原来的大小)
m_multiWidth = float(1)/m_multiWidth ;
m_multiHeight = float(1)/m_multiHeight ;
}
}
void CFcModelingDlg::ReSize(int nID)
{
CRect rect;
GetDlgItem(nID)->GetWindowRect(rect);
ScreenToClient(rect);
//计算控件左上角点
CPoint OldTLPoint, TLPoint;
OldTLPoint = rect.TopLeft();
TLPoint.x = long(OldTLPoint.x * m_multiWidth);
TLPoint.y = long(OldTLPoint.y * m_multiHeight);
//计算控件右下角点
CPoint OldBRPoint,BRPoint;
OldBRPoint = rect.BottomRight();
BRPoint.x = long(OldBRPoint.x *m_multiWidth);
BRPoint.y = long(OldBRPoint.y * m_multiHeight );
//移动控件到新矩形
rect.SetRect(TLPoint,BRPoint);
GetDlgItem(nID)->MoveWindow(rect,true);
} 展开
代码如下:
// CFcModelingDlg dialog
class CFcModelingDlg : public CDialog
{
DECLARE_DYNAMIC(CFcModelingDlg)
public:
CFcModelingDlg(CWnd* pParent = NULL); // standard constructor
virtual ~CFcModelingDlg();
int m_dlgWidth;
int m_dlgHeight;
int m_width;
int m_height;
double m_multiWidth;
double m_multiHeight;
BOOL change_flag; //用来判断Onsize()执行时对话框是否已执行;初始化为false
// Dialog Data
enum { IDD = IDD_FC_MODELING };
protected:
virtual BOOL OnInitDialog();
virtual void OnSize(UINT nType, int cx, int cy);
virtual void ReSize(int nID);
DECLARE_MESSAGE_MAP()
CTabCtrl m_tabInfo;
CWtgList m_wtgList;
CSvcList m_svcList;
};
.cpp中
BOOL CFcModelingDlg::OnInitDialog()
{
CDialog::OnInitDialog();
m_tabInfo.InsertItem(0, "zz");
m_tabInfo.InsertItem(1, "aa");
//m_tabInfo.InsertItem(2, "bb");
//m_tabInfo.InsertItem(3, "cc");
//m_tabInfo.InsertItem(4, "dd");
m_wtgList.Create(IDD_DIALOG1, GetDlgItem(IDC_TAB_COMP_INFO));
m_svcList.Create(IDD_DIALOG2, GetDlgItem(IDC_TAB_COMP_INFO));
CRect rc;
m_tabInfo.GetClientRect(rc);
rc.top += 21;
rc.bottom -= 5;
rc.right += 5;
rc.left -= 5;
m_wtgList.MoveWindow(&rc);
m_svcList.MoveWindow(&rc);
m_wtgList.ShowWindow(true);
m_svcList.ShowWindow(false);
m_tabInfo.SetCurSel(0);
::GetWindowRect(m_hWnd, rc);
ScreenToClient(rc);
//对话框宽高
m_dlgWidth = rc.right - rc.left;
m_dlgHeight = rc.bottom - rc.top;
//屏幕分辨率
m_width = GetSystemMetrics(SM_CXSCREEN);
m_height = GetSystemMetrics(SM_CYSCREEN);
//放大倍数
m_multiWidth = (double)m_width/(double)m_dlgWidth;
m_multiHeight = (double)m_height/(double)m_dlgHeight;
change_flag = true;
//ShowWindow(SW_MAXIMIZE); //对话框以最大化方式弹出
return TRUE;
}
void CFcModelingDlg::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy);
if(change_flag)
{
ReSize(IDC_TAB_COMP_INFO);
//恢复放大倍数,并保存 (确保还原时候能够还原到原来的大小)
m_multiWidth = float(1)/m_multiWidth ;
m_multiHeight = float(1)/m_multiHeight ;
}
}
void CFcModelingDlg::ReSize(int nID)
{
CRect rect;
GetDlgItem(nID)->GetWindowRect(rect);
ScreenToClient(rect);
//计算控件左上角点
CPoint OldTLPoint, TLPoint;
OldTLPoint = rect.TopLeft();
TLPoint.x = long(OldTLPoint.x * m_multiWidth);
TLPoint.y = long(OldTLPoint.y * m_multiHeight);
//计算控件右下角点
CPoint OldBRPoint,BRPoint;
OldBRPoint = rect.BottomRight();
BRPoint.x = long(OldBRPoint.x *m_multiWidth);
BRPoint.y = long(OldBRPoint.y * m_multiHeight );
//移动控件到新矩形
rect.SetRect(TLPoint,BRPoint);
GetDlgItem(nID)->MoveWindow(rect,true);
} 展开
展开全部
消息映射 WM_SIZE 消息
BEGIN_MESSAGE_MAP(XXX, XXXX)
ON_WM_SIZE()
END_MESSAGE_MAP()
BEGIN_MESSAGE_MAP(XXX, XXXX)
ON_WM_SIZE()
END_MESSAGE_MAP()
已赞过
已踩过<
评论
收起
你对这个回答的评价是?

2022-08-05 广告
苏州蓝晓生物科技有限公司。标准化核心产品:公司拥有完整的琼脂糖介质、葡聚糖介质、聚甲基丙烯酸酯介质生产线,年产分离介质50000L,产品质量稳定并达到国际领先水平。核心优势:公司核心技术人员拥有近二十年不同基质的基球开发和官能化的丰富技术经...
点击进入详情页
本回答由苏州蓝晓生物科技有限公司_提供
展开全部
.h文件:
afx_msg void OnSize(UINT nType, int cx, int cy);
.cpp文件:
BEGIN_MESSAGE_MAP(CFcModelingDlg, CDialog)
ON_WM_SIZE()
END_MESSAGE_MAP()
void CFcModelingDlg::OnSize(UINT nType, int cx, int cy)
{
//处理
}
afx_msg void OnSize(UINT nType, int cx, int cy);
.cpp文件:
BEGIN_MESSAGE_MAP(CFcModelingDlg, CDialog)
ON_WM_SIZE()
END_MESSAGE_MAP()
void CFcModelingDlg::OnSize(UINT nType, int cx, int cy)
{
//处理
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询