用这个办法试试
{
static DWORD wVkey=0;
if(pMsg->wParam!=wVkey)
{
  if (pMsg->wParam ==VK_F6)//选择付款方式
  {
      m_CmbCtrl.SetCurSel(m_CmbCtrl.GetCurSel()+1 );
  }
}
wVkey=pMsg->wParam;
}

解决方案 »

  1.   

    pMsg->wParam ==VK_F6
    可能WM_KEYDOWN一次,WM_KEYUP又一次。CPayType mypay;
    mypay.DoModal(); 怎么样显示的两次?不可能的。想知道第一次?在OnShow里进行计数吧
      

  2.   

    用Spy++查看一下,看看按下f6时发送了几条消息,我同意vcbear(会飞的熊熊,苯苯的那种)的意见,按下,弹起各算一次。(野花正专心的打着字,老板从身后探出头:你还有心在这儿翻贴子,考虑你自己的问题吧!哼哼)
      

  3.   

    我如何在PreTranslateMessage中检测到是keydown还是keyup?
      

  4.   

    经检测确实是dialog显示两次,在PreTranslateMessage中keydown和keyup两次,但如何判断是keydown还是keyup呢?我不知道如何在PreTranslateMessage中区别keydown、keyup?请举个例子好吗?
      

  5.   

    经检测确实是dialog显示两次,在PreTranslateMessage中keydown和keyup两次,但如何判断是keydown还是keyup呢?我不知道如何在PreTranslateMessage中区别keydown、keyup?请举个例子好吗? 
      

  6.   

    MSGtypedef struct tagMSG {
        HWND   hwnd;     
        UINT   message; 
        WPARAM wParam; 
        LPARAM lParam; 
        DWORD  time; 
        POINT  pt; 
    } MSG; 
    keydown & keyup
    message是不同的!