Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Некоторые проблемы с установкой нашей программы поверх всех окон (http://forum.oszone.net/showthread.php?t=161871)

crashtuak 30-12-2009 08:02 1307379

Некоторые проблемы с установкой нашей программы поверх всех окон
 
Делаю вот так:
Код:

SetWindowPos(Form1::Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE);
Компилятор мне выдает вот так:
Код:

error C2664: 'SetWindowPos' : cannot convert parameter 1 from 'System::IntPtr' to 'HWND'
Может я не тот HWND беру?
Ну задача вот такая: установить форму нашей программы поверх всех других окон, даже поверх "Пуска".
Использую Microsoft Visual Studio 2005 (Windows Form Application).
Спасибо за помощь!

Admiral 30-12-2009 08:27 1307388

crashtuak, если проект WinForm (то есть с использованием .NET Framework) лучше использовать строчку кода Form1::TopMost = true;
А для Win32 подхода, по которому уже должна быть прописана функция SetWindowPos (кстати если окно необходимо просто на время вывести поверх всех окон, то тогда лучше использовать SetForegroundWindow), компилятор всё правильно говорит, так как HWND (дескриптор окна) и Handle (дескриптор объекта) разные вещи.
Если всё же интересен и Win32 подход нужно заполучить HWND формы. Это можно сделать, ну скажем Win32 функцией FindWindow.

P.S.
Для VB.NET, коллеге по цеху WinForm, позволительно использовать и Handle, вместо hwnd, объекта Me, в качестве аргумента упомянутой функции SetForegroundWindow.
http://forum.oszone.net/post-1092960.html#post1092960

crashtuak 30-12-2009 15:59 1307672

Admiral, спасибо, ваши советы мне помогли. Решил получить HWND формы с помощью FindWindow, далее в ход пошла SetWindowPos, с помощью которой я заодно и задал нужные размеры и позицию окна(убил сразу трех зайцев:)).

Admiral 31-12-2009 00:32 1307985

crashtuak, между прочим, размер и положение формы можно так же задать и WinForm средствами
Form1::Size::set (System::Drawing::Size(720, 576));
Form1::DesktopLocation::set (System::Drawing::Point(50, 20));

Но это как будет удобнее, дело вкуса. :)


Время: 02:30.

Время: 02:30.
© OSzone.net 2001-