VC 視窗焦點問題以及回車鍵,tab鍵的相關
CDlgaDlg dlg;
m_pMainWnd = &dlg;
應用程式啟動時,必須對CXxxApp的成員變數m_pMainWnd進行賦值,否則無法執行。在單文件的工程中,我們看不到這種賦值操作,它是在
if (!ProcessShellCommand(cmdInfo))
return FALSE;
在ProcessShellCommand函式中對m_pMainWnd賦了值。
一、return false和return ture的區別:
1. 在CXxxApp的InitInstance()函式中:
return false:退出應用程式,不進入訊息迴圈。
return ture:應用程式進入訊息迴圈。
2. 在對話方塊類中的OnInitDialog()中:
return false:如果在OnInitDialog()函式中設定了某控制元件得到焦點,如:
GetDlgItem(IDC_EDIT1))->SetFocus();
應return false,否則上一句程式碼不會生效。
return ture:在OnInitDialog()函式中沒有設定了某控制元件得到焦點,應return ture。
說明:要使對話方塊上的某個控制元件在一顯示對話方塊,就具有焦點,還可以將該控制元件的
Table Order設為1。
二、在對話方塊中響應回車鍵:
在對話方塊中回車,會執行預設按鈕(Default Button)的函式,預設的預設按鈕是IDOK。如果沒有預設按鈕,會執行對話方塊中的OnOK()函式。所以,在一個對話方塊中要控制回車鍵,可以採用下面的方法:
1. 在OnOK()函式中新增程式碼:
在對話方塊中新增四個文字框,我們想使用者按回車鍵時,四個文字框依次迴圈得到焦點:
if(GetFocus()==GetDlgItem(IDC_EDIT4)) //如果第四個文字框得到焦點
GetDlgItem(IDC_EDIT1)->SetFocus(); //使第一個文字框得到焦點
else if (GetFocus()->GetDlgCtrlID()==IDOK) //如果“確定”按鈕得到焦點
CDialog::OnOK(); //對話方塊返回
else
GetFocus()->GetNextWindow()->SetFocus();
//使當前具有焦點視窗的下一個(按照Table Order順序)視窗得到焦點
2. 新增按鈕,將其設定為預設按鈕,Visible屬性設為false,為它新增響應函式,在其中程式設計(程式碼類似1)。
3. 更換回調函式:
我們更換第一個文字框的回撥函式,讓它不響應回車鍵。
i. 定義一個全域性變數WNDPROC oldProc; 用於儲存原來的回撥函式的指標。
ii. 在對話方塊類中的OnInitDialog()中用SetWindowLong函式更換第一個文字框的回撥函式為newProc
oldProc=(WNDPROC)SetWindowLong(GetDlgItem(IDC_EDIT1)->m_hWnd,GWL_WNDPROC,(long) newProc);
iii. 定義newProc函式:
LRESULT CALLBACK newProc (
HWND hwnd,UINT uMsg, WPARAM wParam, LPARAM lParam)
{
if(uMsg==WM_CHAR) //如果是字元訊息
{
if(0xd==wParam) //如果是回車鍵
return 1; //不處理就返回,即不響應回車鍵
}
return oldProc (hwnd,uMsg,wParam,lParam);
//其它訊息仍由原來的回撥函式處理
}
說明:此種方法要文字設定文字框的MultiLine 和Want return屬性設為有效。
三、製作一個可以響應WM_MOUSEMOVE訊息的按鈕:
1. 新建一個類CHide ,從CButton派生,增加成員物件CHide *m_btnFriend,在類中響應WM_MOUSEMOVE訊息,在OnMouseMove中新增程式碼:
ShowWindow(SW_HIDE);
m_pmyFriend->ShowWindow(SW_NORMAL);
2. 在對話方塊的標頭檔案中加入#include “hide.h”
3. 為對話方塊上的“確定”和“取消”按鈕新增捆綁變數
i. 靜態繫結:
a. 用ClassWizard為對話方塊上的“確定”和“取消”按鈕新增捆綁變數,
CHide m_btnOK;
CHide m_btnCancel;
並將其中一個按鈕的Visible屬性設為false。
b. 此種方法會在對話方塊的DoDataExchange函式中新增
DDX_Control(pDX, IDCANCEL, m_btnCancel);
DDX_Control(pDX, IDOK, m_btnOK);
c. 在對話方塊類中的OnInitDialog()中新增程式碼:
m_btnOK.m_pmyFriend=&m_btnCancel;
m_btnCancel.m_pmyFriend=&m_btnOK;
ii. 動態繫結:
a. 定義兩個成員變數:
CHide m_btnOK;
CHide m_btnCancel;
b. 在對話方塊類中的OnInitDialog()中新增程式碼:
m_btnOK.m_pmyFriend=&m_btnCancel;
m_btnCancel.m_pmyFriend=&m_btnOK;
m_btnOK.SubclassDlgItem(IDOK,this);
m_btnCancel.SubclassDlgItem(IDCANCEL,this);
=======================================================================================================
MFC中如何將焦點設定到指定控制元件上
我們常常會有這樣的需求,想在視窗開啟的時候就將焦點(游標)設定到某個指定的控制元件上去。
我們都知道設定焦點需要用到setFocus這個方法(幾乎任何程式設計環境都這樣VC,C#,VB,VF都這樣)。
但在VC中我們使用了setfocus並不一定會達到我們需要的效果。
如果我們僅僅設定了setfocus那是不夠的,我們需要將對話方塊中的OnInitDialog的最後那句return設定為FALSE;
我曾經在對話方塊中對各個控制元件的輸入進行校驗檢測,當檢測到不滿足要求的輸入則會彈出對話方塊提示。
我本來的目的是彈出提示框,但確定後回到窗體中後就將焦點和游標設定到對應的控制元件上,結果死都上不去。
一開始我以為是Setfocus的設定無效,後面發現是邏輯上錯了,因為當提示框顯示的時候,在提示框彈出前通過SetFocus設定的焦點都將作廢。
發現這一點後,我將彈出提示框前需要設定獲得焦點的目標控制元件儲存起來,等提示框顯示完了我仍然可以對該控制元件進行設定焦點的操作,問題總算解決了。
這裡寫出來,希望大家不要走我這樣的彎路哦!
順便說一下如何獲取到焦點所在的控制元件的ID號,也許這對大家操作焦點所在控制元件有作用;
MFC::
CWnd *pWnd = GetFocus();
if(pWnd == NULL)
;//no focus
else
UINT nID = pWnd->GetDlgCtrlID();
SDK:
HWND hWnd = ::GetFocus();
if(hWnd == NULL)
;//no focus
else
UINT nID = ::GetDlgCtrlID(hWnd);
轉載註明出處哦,謝了!
========================================================================================相關推薦
VC 視窗焦點問題以及回車鍵,tab鍵的相關
CDlgaDlg dlg; m_pMainWnd = &dlg; 應用程式啟動時,必須對CXxxApp的成員變數m_pMainWnd進行賦值,否則無法執行。在單文件的工程中,我們看不到這種賦值操作,它是在 if (!ProcessShellCommand(cmdInfo
CRT 連接 ENSP時,Tab 鍵無法補全與回車鍵顯示雙行的解決方法
mark ado 遇到 無效 img ensp title tail 今天 今天使用 CRT 連接 ensp 時,出現了一個煩人的問題:CRT 連接 ENSP時,Tab 鍵無法補全與回車鍵顯示雙行。這個雖然不影響使用,但是總是感覺不舒服,所以只能把它處理掉。在網上找
在介面上用回車鍵代替tab鍵切換焦點的辦法
現在資源視圖裡面,把對話方塊上所有需要切換焦點的視窗或者按鈕的tabstop屬性設定為TRUE。 為視窗對映PreTranslateMessage訊息處理函式 新增以下程式碼: if((pMsg-&
sublim text3快速生成html代碼時,tab鍵失效問題
ext3 ges idt 證明 tab 個人 發現 狀態切換 nbsp sublime text3是一款非常強大的文本編輯器,個人覺得做前端的話這款工具很好用。便攜,秒啟。唯一讓我覺得不是特別爽的就是插件啊,都需要自己安裝。不過瑕不掩瑜,這款編輯器是很適合開發前端和PHP的
jQuery實現文字框回車鍵轉tab鍵
<script type="text/javascript"> //功能:將回車鍵轉tab鍵 jQuery(function () {
如何使用回車鍵模仿Tab鍵
導讀: 李中未: 在Delphi程式設計中,如何實現用回車鍵在若干個編輯視窗中切換?比如,姓名和密碼兩個輸入視窗,輸入姓名後,只能用Tab鍵或用滑鼠定位游標到密碼輸入視窗,我想用回車鍵切換視窗。 回答: 先將窗體的KeyPreview屬性設為T
sqlite(sql)替換特殊字元(換行,tab鍵等)
換tab sql語句: UPDATE table_name SET field_name=REPLACE(field_name,char(09),'') 但是 sqlite會報錯 在sqlite中 換tab 為x'09'所以sql為: update question_
回車鍵替換Tab鍵完成迴圈索引功能。
DRP視訊中有個小例子,為了給使用者更好的體驗,加上了個回車鍵替換Tab鍵的功能。然後把視訊的程式碼放到我這,就出不來了。最後判斷是瀏覽器的問題。因為在我的IE8測試版能夠實現,但是放到IE9
Eclipse設定Tab鍵 跨越四個字元 以及 Eclipse設定 程式碼格式化,非同級時統一採用四個字元區分開。
1. 設定Tab鍵 跨越四個字元 開啟選單欄 【windows】,之後一次選擇【Preferences】-【General】-【Editors】-【Text Editors】,然後勾選【Insert spaces for tabs】- 以及設定 [Displ
java 控制元件實現回車到下一個焦點控制元件,功能同tab鍵。
簡單示例(紅色為關鍵句):import javax.swing.*;import java.awt.*;import java.awt.event.*;public class MyTest extends JFrame implements KeyListener{priv
WinForm中變Enter鍵為Tab鍵實現焦點轉移的方法
+= end prev mar select 窗口 detail com ota if (e.KeyCode == Keys.Enter) { //this.SelectNextControl
20.Shell介紹,history,Tab鍵,通配符,重定向
echo slim 系統 重新 上一條 變量 分享圖片 三次 ali 五周第三次課(1月10日) 8.1 shell介紹 8.2 命令歷史 8.3 命令補全和別名 8.4 通配符 8.5 輸入輸出重定向 shell介紹 shell是一個命令解釋器,提供用戶和機器之間的交
python3實現tkinter視窗懸浮,右鍵選單操作,多執行緒控制
專案需要,做了一個demo直接上程式碼供大家參考,並且留為記錄 需要更深入瞭解,可以加微信qypangu相信交流,請注時"csdn python" #!/usr/bin/python3 # -*- coding: utf-8 -*- import tkinter im
ubuntu12.04 為python3.3安裝readline模組 以及 tab鍵命令補全
解決方法十分簡單:進入Python-3.3.3資料夾,在這裡操作 (1)sudo make clean #將原來編譯好的python刪掉 (2)vim Modules/Setup 找到160行,將這句前面的註釋號去掉(去掉#號) readline readli
Windows 右鍵相關:不用按Shift,直接顯示“在此處開啟命令視窗 ”
分別把登錄檔 [HKEY_CLASSES_ROOT/Drive/shell/cmd] [HKEY_CLASSES_ROOT/Directory/shell/cmd] [HKEY_CLASS
【Qt】Qt之Tab鍵切換焦點順序【轉】
簡介 Qt的視窗部件按使用者的習慣來處理鍵盤焦點。也就是說,其出發點是使用者的焦點能定向到任何一個視窗,或者視窗中任何一個部件。 焦點獲取方式比較多,例如:滑鼠點選、Tab鍵切換、快捷鍵、滑鼠滾輪等。 習慣性的,我們經常會使用Tab鍵來控制焦點順序,比如:使用者註冊時,個人資訊輸入框焦點的切換、執行
Qt之Tab鍵切換焦點順序
void Widget::setorder() { QWidget::setTabOrder(ui->pcComboBox, ui->switcherComboBox); QWidget::setTabOrder(ui->switcherComboBox, u
將回車鍵轉換為Tab鍵
str textbox 技術分享 sha object event mage 知識 rgs 實現效果: 知識運用: KeyEventArgs類的KeyValue屬性 public int KeyValue {get;} //獲取KeyDown或Key
不改動duilib原始碼的情況下,實現tab鍵切換登入介面EDIT控制元件功能
由於duilib是開源無專人管理的介面庫,導致網上流傳了各式各樣的版本。今天某某修復了這個bug上傳一版,明天某某修復另一個bug上傳別的版本,太過雜亂。而且之所以寫這篇文章,是因為公司用的duilib庫,存在EDIT控制元件對table鍵支援的bug。即焦點混亂。花了近一
Qt 之 Tab 鍵切換焦點順序
簡介 Qt的視窗部件按使用者的習慣來處理鍵盤焦點。也就是說,其出發點是使用者的焦點能定向到任何一個視窗,或者視窗中任何一個部件。 焦點獲取方式比較多,例如:滑鼠點選、Tab鍵切換、快捷鍵、滑鼠滾輪等。 習慣性的,我們經常會使用Tab鍵來控制焦點順序,比如: