1000的阶乘的处理

参见:http://www.vccode.com/file_show.php?id=2226

以前我自己也做过类似的程序,原理与此相同,所不同的是我的每个数组元素间的进制是10,而这个程序用1,000,000做进制,好!!

 

下面是初级的讨论,不要见笑,我不太懂MFC。

我想使得这个程序在文本框中敲回车与按下按钮作用相同。这个很自然的想法。按照VB的思路,我找到此文本框的可用事件,根本没有onkeypress之类的东西。心想:这么基本的东西都不会,岂不太那啥了。

找到半天材料,才知道有两条路可走:
1、重写OnOK(),因为在当前窗体上在任何文本框(?有个别例外)上按下回车时都会执行这个方法。因为这个例子中只有一个能接收回车的文本框,自然可直接调用方法即可。但如果有多个呢,用什么区分呢?答案是:GetFocus()会返回当前的焦点元素,做判别就行了,代码:
void CBigDateDlg::OnOK()
{
    if (GetFocus() == GetDlgItem(IDC_VALUE))
        this->OnCalculate();
}
2、上一个方法不通用,所以不推荐使用,最好用下面的方法:重写PreTranslateMessage(MSG* pMsg)!! 不再表述,代码如下:
BOOL CBigDateDlg::PreTranslateMessage(MSG* pMsg)
{
 // 处理IDC_VALUE的消息
 if (pMsg->hwnd == GetDlgItem(IDC_VALUE)->GetSafeHwnd())
 {
  // 避免右键菜单
  if (pMsg->message == WM_RBUTTONUP || pMsg->message == WM_CONTEXTMENU)
   return true;
  // 考虑用户在该文本框中按回车的情况
  if (pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_RETURN)
  {
   CWnd* aw = this->GetFocus();
   ((CEdit*)aw)->SetSel(0, -1);    // 同时,选中文本框中所有的文本,更方便于使用!!
   this->OnCalculate();
  }
 }


 return CDialog::PreTranslateMessage(pMsg);
}

 

通过这个例子,我开始有点理解消息循环的含义了。

Good luck!!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值