Страница: 1 |
|
Вопрос: Как задать окну, чтобы оно рисовалось поверх ос...
|
Добавлено: 13.04.04 01:18
|
|
Автор вопроса: kolyanoid
|
Я программирую на другом языке (другом BASIC'е). Решил сделать браузер 3D моделей, используя windows'овский интерфейс (VB) и 3D возможности DarkBASIC'а. Но без умения сделалать так, чтоб окно просмотра 3D (другой проги) рисовалось поверх всех остальных окон, получается ацтой. Помогите плиз :)
Ответить
|
Номер ответа: 1 Автор ответа: cresta
Вопросов: 117 Ответов: 1538
|
Профиль | | #1
|
Добавлено: 13.04.04 02:49
|
Если твой другой Басик допускает использование API, то вот ф-ция, которая может тебе поставить твоё окно поверх всех: Declare Function SetWindowPos Lib "user32" Alias "SetWindowPos" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long Только нужно сначала найти хэндл того окна, которое надо перенести наверх.
Ответить
|
Номер ответа: 2 Автор ответа: kolyanoid
Вопросов: 19 Ответов: 60
|
Профиль | | #2
|
Добавлено: 13.04.04 20:25
|
Ты уж извини, но в VB я только месяца 2 назад разобрался с "HELLO WORLD!!!" Поэтому я не совсем понял, что ты имел ввиду "Мой basic" не поддерживает winAPI, но может грузить внешние DLL и юзать их функции в своих целях. А winAPI, насколько я знаю - это DLL Расскажи пожалуйста по буквам, какую DLL грузить, как называется функция, и какие в неё данные нужно вводить. (ты это уже написал, но я не въехал ) И ещё. Что такое "хэндл окна"? Единственное, что могу сказать, это то, что у меня 2 проги грузятся одновременно. Сначало ВБшная прога, потом она запускает другую прогу, которую мне и надо заставить рисоваться поверх всего остального.
Ответить
|
Номер ответа: 3 Автор ответа: cresta
Вопросов: 117 Ответов: 1538
|
Профиль | | #3
|
Добавлено: 14.04.04 00:41
|
'На VB это выглядит так: ' если у тебя есть VB, скопируй этот код в форму и запускай Option Explicit Const HWND_TOPMOST = -1 Const HWND_NOTOPMOST = -2 Const SWP_NOSIZE = &H1 Const SWP_NOMOVE = &H2 Const SWP_NOACTIVATE = &H10 Const SWP_SHOWWINDOW = &H40 Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Private Declare Sub SetWindowPos Lib "User32" (ByVal hWnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) Private Declare Function FindWindow Lib "User32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long Dim SearchWnd As Long ' это переменная, куда будешь записывать хэндл - указатель окна ' которое надо перенести наверх Private Sub Form_Load() Dim s As String, a As String ' ждем некоторое время, чтобы твой броузер наверняка успел загрузиться Sleep 2000 ' 2 сек s = "Заголовок" ' того окна, которое надо наверх SearchWnd = FindWindow(vbNullString, s) If SearchWnd <> 0 Then ' если окно появилось Me.Caption = SearchWnd ' посмотришь в заголовке этой проги хэндл искомого окна Beep ' ставим его наверх SetWindowPos SearchWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOACTIVATE Or SWP_SHOWWINDOW Or SWP_NOMOVE Or SWP_NOSIZE End If End Sub ' код проверн, работает. Смотри, как его приспособить к твоему 'делу
Ответить
|
Номер ответа: 5 Автор ответа: cresta
Вопросов: 117 Ответов: 1538
|
Профиль | | #5
|
Добавлено: 16.04.04 02:50
|
Ну в объявлении функции написано ведь SetWindowPos Lib "User32" и Sleep Lib "kernel32" . Только я не понял, зачем тебе их таскать, эти библиотеки, они ж есть в любой Винде?! Просто перед их вызовом их надо задекларировать и всё. Т.е. ты даёшь знать, что будешь использовать те или иные функции, чтобы твой компилятор знал, какие адреса памяти втыкать в код проги вместо названий. И ещё: это объявления для VB, в других языках синтаксис может быть другой. Или ты не под Виндовс пишешь?
Ответить
|
Страница: 1 |
Поиск по форуму