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);
}
展开
 我来答
book_read
2010-07-20 · TA获得超过193个赞
知道小有建树答主
回答量:371
采纳率:28%
帮助的人:62.5万
展开全部
消息映射 WM_SIZE 消息

BEGIN_MESSAGE_MAP(XXX, XXXX)

ON_WM_SIZE()
END_MESSAGE_MAP()
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
苏州蓝晓生物科技有限公司_
2022-08-05 广告
苏州蓝晓生物科技有限公司。标准化核心产品:公司拥有完整的琼脂糖介质、葡聚糖介质、聚甲基丙烯酸酯介质生产线,年产分离介质50000L,产品质量稳定并达到国际领先水平。核心优势:公司核心技术人员拥有近二十年不同基质的基球开发和官能化的丰富技术经... 点击进入详情页
本回答由苏州蓝晓生物科技有限公司_提供
超基赫
2010-07-20 · 超过37用户采纳过TA的回答
知道小有建树答主
回答量:91
采纳率:0%
帮助的人:89.2万
展开全部
.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)
{
//处理
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式