回車鍵的使用

2021-04-02 03:15:29 字數 2599 閱讀 7507

在vc中建立一基於對話方塊的工程,編譯執行,成功。面對著剛剛建立的工程,心裡那個高興呀。突然一時心血來潮,按了個回車鍵,工程一閃而過沒了。再編譯執行,成功。按了個esc鍵,工程一閃而過也沒了。

為什麼會這樣,因為cdialog 中有預設對enter和esc鍵的處理。

解決這種一按回車和esc鍵就關閉工程的正確處理方法是:觸發pretranslatemessage訊息,截獲enter和esc對對話方塊的訊息。

**如下:

bool c***::pretranslatemessage(msg* pmsg)

}return cdialog::pretranslatemessage(pmsg);

} ok了,這下好了。突然我在對話方塊上加了乙個編輯框和乙個列表框,我想先在編輯框中輸入內容,然後按一下回車鍵,就把編輯框的內容插入到列表框中。

突然一想還真無從下手,再一想還是在pretranslatemessage裡面做,上面的我是直接return true;的。我在這個return true;上面做就行了。

**如下:

bool c***::pretranslatemessage(msg* pmsg)

return true;

case vk_escape:

return true;

break;

}}  

return cdialog::pretranslatemessage(pmsg);

}要是兩個編輯框呢。在編輯框1中回車,把編輯框1的內容加到列表框,在編輯框2中回車,把編輯框2的內容加到列表框,於是這樣。

**如下:

bool c***::pretranslatemessage(msg* pmsg)

if (pmsg->hwnd == h2)

return true;

case vk_escape:

return true;

break;

}}  

return cdialog::pretranslatemessage(pmsg);

}為了下面的使用,先來講講vc的視窗類和視窗控制代碼的轉換。

視窗類就是cwnd,視窗控制代碼就是hwnd。cwnd和hwnd之間互相轉換**如下:

cwnd *pwnd;

hwnd  hwnd;

hwnd = pwnd->getsafehwnd();        //cwnd->hwnd

pwnd = cwnd::fromhandle(hwnd); //hwnd->cwnd

則這樣上面的兩個編輯框的**,改一下第二個編輯框先得到cwnd,轉一下然後和hwnd比較。

改了的**如下:

bool c***::pretranslatemessage(msg* pmsg)

if (pmsg->hwnd == h2->getsafehwnd())

return true;

case vk_escape:

return true;

break;

}}  

return cdialog::pretranslatemessage(pmsg);

}完成了,功能一模一樣。

好開心!

舉一反三,下面別的控制項你也可以這樣做了。如:列表框

等等。突然一天,我發現這種做法失效了。失效在組合框上了。

原本的希望卻變成了失望。痛苦啊。

程式如下:

bool c***::pretranslatemessage(msg* pmsg)

return true;

case vk_escape:

return true;

break;

}}  

return cdialog::pretranslatemessage(pmsg);

}於是用spy++一看,組合框卻有兩個控制代碼,乙個是combobox,還有乙個是edit的控制代碼。想想也是呀:組合框的可視部分就是由乙個edit組合成的,而pmsg->hwnd得到的控制代碼就是這個edit所指的控制代碼(因為回車就是在這個edit裡面敲的),而hwnd h3 =::getdlgitem(m_hwnd,idc_combo1);得到的這個控制代碼卻是combobox的控制代碼,pmsg->hwnd 和 h3這兩個當然不等了。

呵呵,找到了原因就好辦了。

這下記起來有個這個函式了吧:cwnd* getparent() const;

其實combobox就是edit的父視窗(組合框和編輯框都可以看成是視窗)。

哦,既然pmsg->hwnd是edit的控制代碼,combobox又是edit的父視窗,那用個getparent();就得到父視窗的控制代碼了,就可以和得到的控制代碼比較了。

大功告成,於是**就出來了。

**如下(舉了兩個組合框):

bool centercombodlg::pretranslatemessage(msg* pmsg)

if (hhp == h2)    

return true;

case vk_escape:

return true;

break;

} }  

return cdialog::pretranslatemessage(pmsg);

}哦,不錯。

這只是回車鍵在vc的應用之一。

Swing JDialog監聽回車鍵

在做專案時,發現在jdialog中,直接通過addkeylistener來監聽回車鍵不起作用,無法監聽到回車鍵,後面在網上查了些資料,終於解決了。方法如下 keystroke stroke keystroke.getkeystroke keyevent.vk enter,0 this.getroot...

如何使用回車鍵模仿Tab鍵

李中未 在delphi程式設計中,如何實現用回車鍵在若干個編輯視窗中切換?比如,姓名和密碼兩個輸入視窗,輸入姓名後,只能用tab鍵或用滑鼠定位游標到密碼輸入視窗,我想用回車鍵切換視窗。回答 先將窗體的keypreview屬性設為true。然後在formkeypress事件中加入以下 procedur...

小程式 使用回車鍵搜尋

在data裡面 data 在getsearch txt中獲取輸入框內容 getsearch txt function console.log 搜尋框裡面的值 e.detail.value 然後在searchsubmit函式中寫內容 searchsubmit function options meth...