void CCalculatorDlg::OnScientific()
{
// TODO: Add your control notification handler code here
m_bIsExpand=1; //应将对话框窗口扩大以显示科学型计算器
m_isSentific=0; //设置单选按钮选项为科学型
ExpandToSentific();
}void CCalculatorDlg::OnStandard()
{
// TODO: Add your control notification handler code here
m_bIsExpand=0; //将对话框窗口缩小以显示标准型计算器
m_isSentific=1; //设置单选按钮选项为标准型
ExpandToSentific();
}void CCalculatorDlg::ExpandToSentific()
{
if(m_bIsExpand) //如果是科学型,则扩大对话框尺寸
{
SetWindowPos(NULL,0,0,rcSentific.Width(),rcSentific.Height(),
SWP_NOMOVE|SWP_NOZORDER); //设置对话框窗口大小
SetVisibleCtrl(); //设置对话框中的控件 }
else //否则将对话框尺寸设置为标准型
{
SetWindowPos(NULL,0,0,rcStandard.Width(),rcSentific.Height(),
SWP_NOMOVE|SWP_NOZORDER);
SetVisibleCtrl();
}
UpdateData(FALSE);}void CCalculatorDlg::SetVisibleCtrl()
{
CWnd* pCtrl=GetWindow(GW_CHILD);//获得对话框中控件的指针
CRect rcTest; //检验矩形
CRect rcControl; //控件矩形
CRect rcShow; //对话框矩形 GetWindowRect(rcShow); //循环获得对话框的子窗口 while(pCtrl!=NULL) //如果控件指针为空则停止循环,否则对其进行可视化处理
{
pCtrl->GetWindowRect(rcControl); //获取子窗口的矩形位置(屏幕坐标)
if(rcTest.IntersectRect(rcShow,rcControl)) //求两个矩形的交集
pCtrl->EnableWindow(TRUE); //如果有交集设置子窗口有效
else
pCtrl->EnableWindow(FALSE); //没有交集设子集无效
pCtrl=pCtrl->GetWindow(GW_HWNDNEXT); //获得下一个子窗口
}
}
{
// TODO: Add your control notification handler code here
m_bIsExpand=1; //应将对话框窗口扩大以显示科学型计算器
m_isSentific=0; //设置单选按钮选项为科学型
ExpandToSentific();
}void CCalculatorDlg::OnStandard()
{
// TODO: Add your control notification handler code here
m_bIsExpand=0; //将对话框窗口缩小以显示标准型计算器
m_isSentific=1; //设置单选按钮选项为标准型
ExpandToSentific();
}void CCalculatorDlg::ExpandToSentific()
{
if(m_bIsExpand) //如果是科学型,则扩大对话框尺寸
{
SetWindowPos(NULL,0,0,rcSentific.Width(),rcSentific.Height(),
SWP_NOMOVE|SWP_NOZORDER); //设置对话框窗口大小
SetVisibleCtrl(); //设置对话框中的控件 }
else //否则将对话框尺寸设置为标准型
{
SetWindowPos(NULL,0,0,rcStandard.Width(),rcSentific.Height(),
SWP_NOMOVE|SWP_NOZORDER);
SetVisibleCtrl();
}
UpdateData(FALSE);}void CCalculatorDlg::SetVisibleCtrl()
{
CWnd* pCtrl=GetWindow(GW_CHILD);//获得对话框中控件的指针
CRect rcTest; //检验矩形
CRect rcControl; //控件矩形
CRect rcShow; //对话框矩形 GetWindowRect(rcShow); //循环获得对话框的子窗口 while(pCtrl!=NULL) //如果控件指针为空则停止循环,否则对其进行可视化处理
{
pCtrl->GetWindowRect(rcControl); //获取子窗口的矩形位置(屏幕坐标)
if(rcTest.IntersectRect(rcShow,rcControl)) //求两个矩形的交集
pCtrl->EnableWindow(TRUE); //如果有交集设置子窗口有效
else
pCtrl->EnableWindow(FALSE); //没有交集设子集无效
pCtrl=pCtrl->GetWindow(GW_HWNDNEXT); //获得下一个子窗口
}
}
解决方案 »
- 谁能给我一个截屏为jpg的函数
- 真心求你联系上下文帮我分析分析::SetWindowsHookEx(WH_GETMESSAGE, GetMsgProc,
- 想要蒋晟大哥MSN的兄弟请留下QQ或MSN,并说明你所从事哪方面开发,在哪个城市。我把你们的信息给蒋哥,合适就加你们,机会难得哦
- Cdialog::domodal 问题
- 请问用VC如何网数据库中添加新记录~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- 一个MFC的单文档程序,怎样让一个对话框取得Doc的指针?
- 请问一下,如何用属性页实现向导,最好有例子代码,谢谢大家,急需
- 如何读取和写入WORD和PowerPoint文档?
- 打印的DLL问题(请问怎么样能够调出系统的打印预览)~~~~~~~~~~~~~~~~~
- setup factory打包exe文件与另一个驱动程序的问题
- 可以发一份XTreme.Toolkit.Pro.v9.6.0.1的函数使用说明文档我吗?my email:
- 现有两台计算机,一台做计算用,一台做显示用,现在要两台计算机之间通信,怎么实现,有代码吗?请帮助,谢谢!!!
调试一下宽度和高度是否正确.或者直接使用MoveWindow()函数
{
UINT index=uID- IDC_NUM_0;
CString num;
CString str;
num.Format(_T("%d"),index);
//AfxMessageBox(num);//弹出对话框提醒
switch(st)
{
case _CE:
str=num;
m_ctlDisplay.SetWindowText(str);
st=_A;
break;
case _A:
m_ctlDisplay.GetWindowText(str);
str+=num;
m_ctlDisplay.SetWindowText(str);
break;
case _B:
str=num;
m_ctlDisplay.SetWindowText(str);
st=_C;
break;
case _C:
m_ctlDisplay.GetWindowText(str);
str+=num;
m_ctlDisplay.SetWindowText(str);
break;
case _D:
str=num;
m_ctlDisplay.SetWindowText(str);
st=_A;
break;
default:;
}
}
double CCCalculatorDlg::GetCurrentNum()
{ double num=0;
CString str;
m_ctlDisplay.GetWindowText(str);
num=atof(str);
return num;
}//获得当前显示的数字void CCCalculatorDlg::DisplayNum(double d)
{
CString str;
str.Format(_T("%f"),d);
m_ctlDisplay.SetWindowText(str);}//显示数字
void CCCalculatorDlg:: Clear()
{ op=None;
st=_CE;
m_dCurrentNum=m_dPreNum=0;
}
void CCCalculatorDlg::OnOperator(_operator_ _op)
{
switch(st){
case _A:
op=_op;
m_dPreNum=GetCurrentNum();
st=_B;
break;
case _C:
m_dCurrentNum=GetCurrentNum();
m_dPreNum=GetValue(m_dPreNum,m_dCurrentNum);
DisplayNum(m_dPreNum);
op=_op;
st=_B;
break;
case _D:
st=_B;
m_dPreNum=GetCurrentNum();
op=_op;
break;
default:;
}
}
double CCCalculatorDlg::GetValue(double m,double n)
{ double dr=0;
double br=m;
double cr=1/m;//求第一个操作数的倒数用来求x^y
int i;
switch(op)
{
case Add:
dr=m+n;
break;
case Multi:
dr=m*n;
break;
case Minus:
dr=m-n;
break;
case Div:
if(n==0.0)
{
AfxMessageBox(_T("分母不能为0!"));
OnCe();
}
else
{
dr=m/n;
}
break;
case Mod:
dr=(int)m%(int)n;//这里简单起见,转换为整数求余数
break;
case Exp:
if(n>=0)//n为正数
for(i=0;i<n;i++)
{
br=br*10;//乘以10的n次幂
}
else//n为负数
{ n=-n;
for(i=0;i<n;i++)
{
br=br*0.1;//乘以0.1的n次幂
}
}
dr=br;
break;
case SQUAR:
if(n>=0)
for (i=0;i<n-1;i++)
{
br=br*m;
}
else
{ br=1/br;
n=-n;
for(i=0;i<n-1;i++)
{
br=br*cr;//乘以0.1的n次幂
}
} dr=br;
break;
default:;
}
return dr; }