MFC如何設定視窗最前

2022-06-13 18:06:10 字數 2136 閱讀 6578

首先,放到最前

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...