一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

MFC處理回車窗口消失

 erbiaoge 2014-09-15
我的方法是:找到自己設(shè)計(jì)的按鈕,在屬性-風(fēng)格中選擇default button;
如果沒有自己設(shè)計(jì)的button,按照以下方法:

默認(rèn)焦點(diǎn)在確定按鈕上,回車就觸發(fā)這個(gè)按鈕的OnOK事件,默認(rèn)按回車是觸發(fā)OnOK事件,看看有沒有無(wú)效斷點(diǎn); 注釋掉OnOK();或重設(shè)tab鍵順序;取消ONOK的defaultbutton屬性;

一、原因
        當(dāng)用戶按下Enter鍵時(shí),Windows就會(huì)自動(dòng)去找輸入焦點(diǎn)落在了哪一個(gè)按鈕上,當(dāng)獲得焦點(diǎn)的按鈕的四周將被點(diǎn)線矩形包圍。如果所有按鈕都沒有獲得輸 入焦點(diǎn),Windows就會(huì)自動(dòng)去尋找程序或資源所指定的默認(rèn)按鈕(默認(rèn)按鈕邊框較粗)。如果對(duì)話框沒有默認(rèn)按鈕,那么即使對(duì)話框中沒有OK按 鈕,OnOK函數(shù)也會(huì)自動(dòng)被調(diào)用。 我把對(duì)話框上面的二個(gè)按鈕全刪掉掉,再編譯運(yùn)行還是按下回車鍵會(huì)自動(dòng)關(guān)閉程序啊。mfc 默認(rèn)響應(yīng)enter鍵的啊
二、解決辦法
        為了使Enter鍵無(wú)效,最簡(jiǎn)單的辦法就是將CExDlg的OnOK函數(shù)寫成空函數(shù),然后針對(duì)OK按鈕寫一個(gè)新的函數(shù)來(lái)響應(yīng)。下面是具體步驟:
        首先建立一個(gè)以Ex為名的基于對(duì)話框的程序。
        1.用ClassWizard映射IDOK按鈕到OnOK虛函數(shù)。
        在ClassWizard中,從CExDlg的Object   Ids列表中選擇IDOK,然后單擊BN_CLICKED,這樣即產(chǎn)生了OnOK函數(shù)的原形和框架。
        2.利用對(duì)話框編輯器改變OK按鈕的ID。
        選擇OK按鈕,將它的ID由IDOK改為IDC_OK,并去掉Default   Button屬性的復(fù)選標(biāo)記。這樣OnOK函數(shù)即被分離出來(lái)。
        3.用ClassWizard創(chuàng)建一個(gè)OnClickedOK成員函數(shù)。
        在ClassWizard中,從CExDlg的Object   Ids列表中選擇IDC_OK,然后單擊BN_CLICKED,函數(shù)名用OnClickedOK,產(chǎn)生了OnClickedOK函數(shù)的原形和框架。
        4.編輯代碼。
        void   CExDlg::OnOK()
        {
                //   TODO:   Add   extra   validation   here
                //   CDialog::OnOK();
        }

        void   CExDlg::OnClickedOk()
        {
                //   TODO:   Add   your   control   notification   handler   code   here
                CDialog::OnOK();
        }
        5.編譯并測(cè)試程序。
        重新編譯程序,然后測(cè)試一下Enter鍵,你會(huì)發(fā)現(xiàn)按下Enter鍵后將沒有任何動(dòng)作,而單擊OK按鈕則仍然會(huì)和以前一樣。
三、   OnCancel的處理
        正如Enter鍵可以觸發(fā)對(duì)OnOK函數(shù)的調(diào)用一樣,Esc鍵也可以觸發(fā)對(duì)OnCancel函數(shù)的調(diào)用。它將導(dǎo)致控制從對(duì)話框中退出。不過讀者可以像對(duì)OK按鈕一樣處理,通過設(shè)置一個(gè)無(wú)效的OnCancel函數(shù)來(lái)防止這一情況的出現(xiàn)
第三個(gè)方法
BOOL   CxxxDlg::PreTranslateMessage(MSG*   pMsg)
{
        //   修改回車鍵的操作反應(yīng)
        if(pMsg-> message==WM_KEYDOWN   &&   pMsg-> wParam==VK_RETURN)
        {
                UINT   nID   =   GetFocus()-> GetDlgCtrlID();
                if(ctButton   !=   GetCtrlType(nID))
                {
                        NextDlgCtrl();
                        int   nFocusID   =   GetFocus()-> GetDlgCtrlID();
                        if(nFocusID   ==   1001)
                                ((CComboBox*)(GetFocus()-> GetParent()))-> ShowDropDown();
                        else   if(ctComboBox   ==   GetCtrlType(nFocusID))
                                ((CComboBox*)GetFocus())-> ShowDropDown();

                        return   TRUE;
                }
        }
        return   CDialog::PreTranslateMessage(pMsg);
}

1. 在VC++中如何在對(duì)話框函數(shù)中獲得edit控件的“按下回車鍵”的消息?

處理WM_KEYDOWN 消息,其中的wParam 為VK_RETURN 即是回車消息。

case WM_KEYDWON:
{
  if ( VK_RETURN == msg.wParam )
  {
    // 按下回車
    // 獲取焦點(diǎn)句柄
    HWND hFocus = GetFocus();
    if ( hFocus == hEdit )
    {
       // 處理你的邏輯
    }
  }
}
break;

2.我以前的做法是做一個(gè)PreTranslateMessage,在里面里感應(yīng)到MSG,是回車就該怎么樣就怎么樣,呵呵,現(xiàn)在有個(gè)情況,在對(duì)整 個(gè)Dlg的情況下用PreTranslateMessage判斷回車不太適合,是否有可能從EDIT控件接收到回車就如何如何呢?
有什么做法?

重寫edit控件并添加 wm_keydown 和wm_char的處理函數(shù)能夠攔截普通按鍵消息,但都不能攔截回車消息。
建議你還是使用PreTranslateMessage,具體參考
http://tech.163.com/05/0906/09/1SV5EEQF00091589.html
這個(gè)寫的更簡(jiǎn)單些
http://hi.baidu.com/albertdiao/blog/item/3183ab47d0c0182f879473bf.html

3.我的VS2008對(duì)話框程序怎么沒有PreTranslateMessage消息
用類向?qū)傻幕趯?duì)話框的MFC程序,在屬性的message里看了。全是WM開頭的。都找了。沒找著。。。汗。。。
怎么回事?

呵呵,不是在類的message里面,而是在類的overrides里面哦…就在classview里面,不是有兩上類了嗎?點(diǎn)那個(gè)對(duì)話框類,在“屬性”窗口里,點(diǎn)“重寫”選項(xiàng)卡,里面列了所有可以重載的函數(shù)。

4.在我用MFC生成的對(duì)話框后,用ESC鍵就可以關(guān)閉對(duì)話框,我的程序不想要這個(gè)功能,請(qǐng)教各位,如何去除?
我嘗試了截取WM_CHAR和WM_KEYDONWN以及WM_SYSKEYDOWN,但都沒有觸發(fā).

一開始的cancel按扭不要去掉,雙擊它加入命令OnCancel(),把OnCancel中調(diào)用父類去掉
直接返回,這就沒問題了 如果你已經(jīng)把按鈕刪掉,那就得手工加這個(gè)命令,但效果一樣

5.你有沒有把文本編輯框?qū)傩岳锏膚ant   return選上

//對(duì)鍵盤消息控制
BOOL   CSetupDlg::PreTranslateMessage(MSG*   pMsg)  
{
if   (pMsg-> message==UM_RETURN)
{
//讓組合框響應(yīng)回車獲取文本
GetComboEditText();
}
//處理回車消息
if   (pMsg-> message==WM_KEYDOWN   &&   pMsg-> wParam==VK_RETURN)
{
//響應(yīng)回車為tab鍵
pMsg-> wParam=VK_TAB;
}

return   CDialog::PreTranslateMessage(pMsg);
}
ES_WANTRETURN風(fēng)格只對(duì)multiple-line的Edit才有效。還是用wade_vc(我命由我不由天)的方法,在PreTranslateMessage函數(shù)中處理

注明:轉(zhuǎn)自http://blog.csdn.net/bing_bing/archive/2011/03/18/6258636.aspx

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    国产又粗又爽又猛又黄的| 欧美不卡午夜中文字幕| 粗暴蹂躏中文一区二区三区| 欧美一级特黄特色大色大片| 五月综合婷婷在线伊人| 福利视频一区二区三区| 国产91人妻精品一区二区三区| 日韩人妻精品免费一区二区三区| 欧美日韩国产福利在线观看| 国产一区在线免费国产一区| 亚洲精品有码中文字幕在线观看| 亚洲视频偷拍福利来袭| 自拍偷拍福利视频在线观看| 成年男女午夜久久久精品| 久久99精品国产麻豆婷婷洗澡 | 欧美日韩校园春色激情偷拍| 国产一区二区三区草莓av| 日本东京热视频一区二区三区| 国产精品流白浆无遮挡| 亚洲第一视频少妇人妻系列| 中文字幕91在线观看| 日韩精品视频香蕉视频| 69久久精品亚洲一区二区| 一级片黄色一区二区三区| 亚洲最新中文字幕在线视频| 婷婷激情五月天丁香社区 | 亚洲精品国产美女久久久99| 日本黄色高清视频久久| 国产av熟女一区二区三区蜜桃| 国产精品推荐在线一区| 午夜久久精品福利视频| 麻豆视传媒短视频在线看| 日韩欧美国产亚洲一区| 亚洲中文字幕熟女丝袜久久| 国产原创激情一区二区三区| 亚洲精品国产美女久久久99| 日韩欧美第一页在线观看| 一区二区免费视频中文乱码国产| 青青操在线视频精品视频| 二区久久久国产av色| 久久热九九这里只有精品|