背景:筆者在做一個項目,客戶端本身是置頂的,但是同時需要集成POS-MIS的組件的時候發現,MIS自己有一個界面需要置頂,這樣的話需要系統會出現兩個窗體同時搶置頂權限的情況
在調用MIS動態庫的時候起一個進程,獲取MIS窗體句柄,然後將MIS窗體設置爲客戶端窗體的子窗體,再利用SetWindowPos將MIS窗體置頂
廢話不多說上代碼
#include <Windows.h>
DWORD WINAPI TopMost(LPVOID lpParamter)
{
HWND hMis ;
HWND hBrowser;
do
{
hMis = FindWindow(NULL, L"APP_SOFTPOS");//獲取父窗體句柄
if(hMis){
int cx = ::GetSystemMetrics(SM_CXSCREEN);
int cy = ::GetSystemMetrics(SM_CYSCREEN);
hBrowser = FindWindow(NULL,L"sinosoft");
SetParent(hMis,hBrowser);
SetWindowPos(hMis,HWND_TOPMOST,0,0,cx,cy,SWP_NOZORDER|SWP_NOMOVE);//窗口置頂 SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE
}
} while (NULL==hMis);
return 0L;
}
void main(){
HANDLE hThread = CreateThread(NULL, 0, TopMost, NULL, 0, NULL);
CloseHandle(hThread);
}
切忌一定要把需要置頂的窗體設置爲當前置頂窗體的子窗體,再將其置頂纔可生效!!!!