主对话框弹不出来,断点在INT_PTR nResponse = dlg.DoModal();处,望高手解答啊,能解决追加分数
对话框弹不出来,跟踪进去发现问题出现在INT_PTRnResponse=dlg.DoModal();再跟进去{ASSERT(::IsWindow(m_hWnd));::G...
对话框弹不出来,跟踪进去发现问题出现在INT_PTR nResponse = dlg.DoModal();再跟进去 { ASSERT(::IsWindow(m_hWnd)); ::GetWindowRect(m_hWnd, lpRect); }
在initDialog函数中加入如下代码出现了该问题
//**********************************************************************************************
//对话框按比例缩放
CRect rect;
::GetWindowRect(m_hWnd,&rect);
ScreenToClient(rect);
m_nDlgWidth = rect.right - rect.left;
m_nDlgHeight = rect.bottom - rect.top;
//计算分辨率
m_nWidth = GetSystemMetrics(SM_CXSCREEN);
m_nHeight = GetSystemMetrics(SM_CYSCREEN);
//计算放大倍数
m_Multiple_width = float(m_nWidth)/float(m_nDlgWidth);
m_Mutiple_heith = float(m_nHeight)/float(m_nDlgHeight);
change_flag=TRUE;//这个是成员变量bool形,用来判断onsize执行时oninitdlg是否已经执行了
//************************************************************************************************
问题重新定位了,问题出现在
void CCloudDemoDlg::ReSize(int nID)//通过控件的ID依次改变每个控件的大小
{
CRect Rect;
GetDlgItem(nID)->GetWindowRect(Rect); //执行到这一步后不能继续往下执行
ScreenToClient(Rect);
//计算控件左上角点
CPoint OldTLPoint,TLPoint;
OldTLPoint = Rect.TopLeft();
TLPoint.x = long(OldTLPoint.x *m_Multiple_width);
TLPoint.y = long(OldTLPoint.y * m_Mutiple_heith );
//计算控件右下角点
CPoint OldBRPoint,BRPoint;
OldBRPoint = Rect.BottomRight();
BRPoint.x = long(OldBRPoint.x *m_Multiple_width);
BRPoint.y = long(OldBRPoint.y * m_Mutiple_heith );
//移动控件到新矩形
Rect.SetRect(TLPoint,BRPoint);
GetDlgItem(nID)->MoveWindow(Rect,TRUE); } 展开
在initDialog函数中加入如下代码出现了该问题
//**********************************************************************************************
//对话框按比例缩放
CRect rect;
::GetWindowRect(m_hWnd,&rect);
ScreenToClient(rect);
m_nDlgWidth = rect.right - rect.left;
m_nDlgHeight = rect.bottom - rect.top;
//计算分辨率
m_nWidth = GetSystemMetrics(SM_CXSCREEN);
m_nHeight = GetSystemMetrics(SM_CYSCREEN);
//计算放大倍数
m_Multiple_width = float(m_nWidth)/float(m_nDlgWidth);
m_Mutiple_heith = float(m_nHeight)/float(m_nDlgHeight);
change_flag=TRUE;//这个是成员变量bool形,用来判断onsize执行时oninitdlg是否已经执行了
//************************************************************************************************
问题重新定位了,问题出现在
void CCloudDemoDlg::ReSize(int nID)//通过控件的ID依次改变每个控件的大小
{
CRect Rect;
GetDlgItem(nID)->GetWindowRect(Rect); //执行到这一步后不能继续往下执行
ScreenToClient(Rect);
//计算控件左上角点
CPoint OldTLPoint,TLPoint;
OldTLPoint = Rect.TopLeft();
TLPoint.x = long(OldTLPoint.x *m_Multiple_width);
TLPoint.y = long(OldTLPoint.y * m_Mutiple_heith );
//计算控件右下角点
CPoint OldBRPoint,BRPoint;
OldBRPoint = Rect.BottomRight();
BRPoint.x = long(OldBRPoint.x *m_Multiple_width);
BRPoint.y = long(OldBRPoint.y * m_Mutiple_heith );
//移动控件到新矩形
Rect.SetRect(TLPoint,BRPoint);
GetDlgItem(nID)->MoveWindow(Rect,TRUE); } 展开
2个回答
展开全部
CRect Rect;
GetDlgItem(nID)->GetWindowRect(Rect); //执行到这一步后不能继续往下执行
ScreenToClient(Rect);
你这个基本函数都用错了,根本就弄不对,必须得需要对象的地址,
GetDlgItem(nID)->GetWindowRect(&Rect);
ScreenToClient(&Rect);
还得检查前面的关于这两个函数的用法,别用错了,再调试一下值到底传递过去了没有
GetDlgItem(nID)->GetWindowRect(Rect); //执行到这一步后不能继续往下执行
ScreenToClient(Rect);
你这个基本函数都用错了,根本就弄不对,必须得需要对象的地址,
GetDlgItem(nID)->GetWindowRect(&Rect);
ScreenToClient(&Rect);
还得检查前面的关于这两个函数的用法,别用错了,再调试一下值到底传递过去了没有
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询