Войти

Показать полную графическую версию : Некоторые проблемы с установкой нашей программы поверх всех окон


crashtuak
30-12-2009, 08:02
Делаю вот так:
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
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
Admiral, спасибо, ваши советы мне помогли. Решил получить HWND формы с помощью FindWindow, далее в ход пошла SetWindowPos, с помощью которой я заодно и задал нужные размеры и позицию окна(убил сразу трех зайцев:)).

Admiral
31-12-2009, 00:32
crashtuak, между прочим, размер и положение формы можно так же задать и WinForm средствами
Form1::Size::set (System::Drawing::Size(720, 576));
Form1::DesktopLocation::set (System::Drawing::Point(50, 20));
Но это как будет удобнее, дело вкуса. :)




© OSzone.net 2001-2012