CreateRectRgn на чужие окна не влияет, если это Win98...

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

CreateRectRgn на чужие окна не влияет, если это Win98...

Сообщение BV » 07.08.2005 (Вс) 4:01

Довольно интересно. Оказывается, на Win98 не работает CreateRectRgn, если указан hWnd чужого окна.

Запустите этот код в Win98 - TaskBar останется прежним.

Код: Выделить всё
Option Explicit

Private Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function CreateRectRgn Lib "gdi32.dll" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
Private Declare Function SetWindowRgn Lib "user32.dll" (ByVal hWnd As Long, ByVal hRgn As Long, ByVal bRedraw As Boolean) As Long

Dim hTaskBar As Long

Private Sub Form_DblClick()
    Unload Me
End Sub

Private Sub Form_Load()
    Dim hRect As Long
    hTaskBar = FindWindow("Shell_TrayWnd", vbNullString)
    hRect = CreateRectRgn(0, 0, 500, 15)
    Call SetWindowRgn(hTaskBar, hRect, True)
    Debug.Print hTaskBar
End Sub

Private Sub Form_Unload(Cancel As Integer)
    Call SetWindowRgn(hTaskBar, 0, True)
End Sub



Хм, как это обойти?
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 07.08.2005 (Вс) 8:06

bRedraw As Boolean?
А почему не as long?
И почему true, а не 1?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Kovu
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 924
Зарегистрирован: 29.04.2005 (Пт) 17:38

Сообщение Kovu » 07.08.2005 (Вс) 9:36

GSerg писал(а):bRedraw As Boolean?
А почему не as long?
И почему true, а не 1?

В принципе разницы нет никакой ведь, а :?: :!: :D
Но только в данном случае
Если всё делать своими ручками, они скоро отвалятся !

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 07.08.2005 (Вс) 15:07

2 GSerg

Потому что эту API так написала дружная команда ApiViewer 2004 :)
Разницы нет.

А вопрос ещё есть...
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот, SemrushBot и гости: 142

    TopList