首先,放到最前
this->setwindowpos(&wndtopmost,0,0,0,0,swp_nomove|swp_nosize);//使視窗總是在最前面
this->setwindowpos(&wndnotopmost,0,0,0,0,swp_nomove|swp_nosize);//使視窗可以被其他視窗覆蓋
2、改變系統環境引數
這些定義winuser.h裡都有的
#define spi_getforegroundlocktimeout 0x2000#define spi_setforegroundlocktimeout 0x2001
#define spif_updateinifile 0x0001
#define spif_sendwininichange 0x0002
先設定環境變數
dword locktime = 0;
systemparametersinfo(spi_getforegroundlocktimeout, 0, &locktime, 0);
systemparametersinfo(spi_setforegroundlocktimeout, 0, 0,
spif_sendwininichange | spif_updateinifile);
退出程式時還原環境變數
systemparametersinfo(spi_setforegroundlocktimeout, 0, locktime,
spif_sendwininichange | spif_updateinifile);
3、allowsetforegroundwindow
hmodule hmodule = null;
asfw_ptr pprocaddress = null;
hmodule = getmodulehandle("user32");
if (hmodule != null)
pprocaddress = (asfw_ptr)getprocaddress(hmodule, "allowsetforegroundwindow");
if (pprocaddress != null)
獲得焦點:
void cbillvalidatordlg::setactive(hwnd m_hwnd)
1、不同執行緒的處理方法
如何在2k/xp下使視窗獲取焦點 在2k/xp下我們可以用 attachthreadinput 和setforegroundwindow來有效的獲取焦點。
//捕捉並設定當前焦點視窗為我們的視窗
attachthreadinput(
getwindowthreadprocessid(
::getforegroundwindow(),null),
getcurrentthreadid(),true);
//置我們的為焦點視窗
setforegroundwindow();
setfocus();
//釋放thread
attachthreadinput(
getwindowthreadprocessid(
::getforegroundwindow(),null),
getcurrentthreadid(),false);
2、同執行緒下的視窗無焦點彈出的方法
在windows的視窗系統中,popup視窗的焦點是與它的活動狀態密切相關的。只要使
popup視窗不獲得活動狀態,popup視窗就不會自動獲得焦點。具體方法如下:
1. 在建立popup視窗時不要有ws_visible風格,然後呼叫setwindowpos函式顯示
建立的視窗,引數uflag取值swp_showwindow and swp_noactivate,這樣就可以保證
視窗在建立是不會得到活動狀態,也就不會獲得焦點。
2. 響應wm_mouseactivate訊息,返回ma_noactivate表示視窗在滑鼠點選時不需要
獲得活動狀態,這樣就可以保證在滑鼠點選時視窗不會自動獲得焦點。
至於滑鼠輸入的響應,本就與視窗是否獲得焦點無關,不會受到影響。
參考:msdn
setforegroundwindow的正確用法
教你如何設定讓Excel視窗總是在最前面
今天在用excel編輯資料,想讓它總在視窗前顯示,上網搜到了解決辦法,試了一下,很有效,分享出來!在使用excel辦公時我們需要讓excel視窗總是顯示在最前面而不被別的視窗擋住,雖然excel並沒有提供這樣的功能,但可以用下面的方法 在vba中使用api函式 setwindowpos 可以讓exc...
MFC程式視窗標題設定
mfc程式的預設的標題是 無標題 title 其中title是應用程式的名稱,我們應如何修改mfc視窗標題來符合自己的要求?mfc程式的文件類中定義了乙個虛函式settitle,用於設定視窗標題的前半部分,如果只是要修改 無標題 部分,可以過載文件類的該函式。視窗標題的後半部分可以通過setwind...
qt設定視窗置頂 Qt主窗體顯示最前
然而今天在qt中,沒有類似函式供呼叫。嘗試了activewindow,show,shownormal,showmaximized 等函式還是不行。網上有方法設定窗體的windowflags,具體方法為 pmainform setwindowflags pmainform windowflags qt...