如何让窗口始终保持在最前面
飘飘白云 20090110
问题:让目标窗口始终保持在最前面,无论这个窗口是模式的还是模式的。
思路:取得当前最前面窗口的title,如果title不是与目标窗口的title不相同(说明目标窗口不是在最前面),枚举窗口,找到目标窗口,设置它为最前面。
代码说话:
- static wchar_t dstWndTitle[] = L"Test window";
- // Get handle of top window.
- HWND topHwnd = ::GetTopWindow(NULL);
- wchar_t wcTitle[MAX_PATH];
- if(topHwnd != NULL){
- // Get title of top window.
- BOOL failed = (::GetWindowText(topHwnd, wcTitle, MAX_PATH) == 0);
- // Fail to get title of current top window or top window isn't target window.
- if ( failed || wcscmp(wcTitle, dstWndTitle) != 0){
- // Set target window as top window.
- topHwnd = ::GetNextWindow(topHwnd, GW_HWNDNEXT);
- while (topHwnd != NULL){
- if(::GetWindowText(topHwnd, wcTitle, MAX_PATH) != 0){
- if (wcscmp(wcTitle, dstWndTitle) == 0){
- ::SetWindowPos(topHwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_SHOWWINDOW | SWP_NOMOVE | SWP_NOSIZE);
- break;
- }
- }
- topHwnd = ::GetNextWindow(topHwnd, GW_HWNDNEXT);
- }
- }
- }