1000的阶乘的处理

来源:互联网 发布:淘宝清仓甩货图 编辑:程序博客网 时间:2024/05/01 03:13

参见: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!!

原创粉丝点击