Скажите что это не глюк...

Обсуждения по программированию для ОС Windows безотносительно используемого языка программирования. Windows NT, Win32, Windows API, ядро и драйверы.
SLIM
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1840
Зарегистрирован: 04.04.2008 (Пт) 18:21
Откуда: Краснодар

Скажите что это не глюк...

Сообщение SLIM » 30.11.2010 (Вт) 2:13

С++

Значит ситуация такая.
Создаю в окне TreeView (Common control 6).
Код: Выделить всё
hViewTree  = CreateWindowEx(0L, WC_TREEVIEW, L"",
               WS_VISIBLE | WS_CHILD | WS_BORDER |
               TVS_HASLINES | TVS_HASBUTTONS | TVS_LINESATROOT,
               8, 315, 600, 193,
               hWnd, NULL, hInst, NULL);


Нужно чтобы размеры контрола менялись вместе с формой.
Обрабатываю WM_SIZE
Код: Выделить всё
RECT rct;
GetClientRect(hWnd, &rct);
SetWindowPos(hViewTree, HWND_TOP,
         10, ((rect.bottom - rect.top)/2) + 40,
         (rect.left + 200), ((rect.bottom - rect.top)/2) - 70, SWP_SHOWWINDOW);


Не работает. GetLastError() показал что "Недопустимый дескриптор окна."
Флаги SetWindowPos перебирал вроде бы в соответствии с MSDN.

Помимо того что контрол не меняет размеры, так появляется куча других глюков. Появляются какие-то левые окна, которые содержат какую-то левую клиентскую область. В общем какой-то бред.
MoveWindow() тоже пробовал - эффект тот же (ну и понятно). Других более подходящих функций не нашел.

Вразумительного ответа не нашел нигде. Вроде такого ни у кого не было.
В чем возможная проблема?

Таким же образом я меняю размеры ListView - все в порядке.
Пишите жизнь на чистовик.....переписать не удастся.....

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Скажите что это не глюк...

Сообщение Хакер » 30.11.2010 (Вт) 4:37

Глюк номер раз: приводить 4-строчные клочочки кода, по которым вообще ничего сказать нельзя.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Re: Скажите что это не глюк...

Сообщение Twister » 30.11.2010 (Вт) 9:43

Во-первых, да, по приведённым кускам ничего сказать нельзя однозначно. Но одно сразу бросилось в глаза: зачем вызывать GetClientRect(), когда нужные величины передаются в lParam?
Во-вторых, такое ощущение, что ты неверно выуживаешь hWnd. Раз уж GetLastError() показал что "Недопустимый дескриптор окна."
А я все практикую лечение травами...

SLIM
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1840
Зарегистрирован: 04.04.2008 (Пт) 18:21
Откуда: Краснодар

Re: Скажите что это не глюк...

Сообщение SLIM » 30.11.2010 (Вт) 22:41

Хакер писал(а):Глюк номер раз: приводить 4-строчные клочочки кода, по которым вообще ничего сказать нельзя.

Дам все что нужно. Только бы знать что имено
Twister писал(а):Во-первых, да, по приведённым кускам ничего сказать нельзя однозначно. Но одно сразу бросилось в глаза: зачем вызывать GetClientRect(), когда нужные величины передаются в lParam?

Да, действительно. Здесь я пропустил
Twister писал(а):Во-вторых, такое ощущение, что ты неверно выуживаешь hWnd. Раз уж GetLastError() показал что "Недопустимый дескриптор окна."

hWnd - это дескриптор родительского окна. При посыле SetWindowPos он не используется. Ошибки на GetClientRect нет.
Пишите жизнь на чистовик.....переписать не удастся.....

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

Re: Скажите что это не глюк...

Сообщение BV » 01.12.2010 (Ср) 1:07

Ну, попробую напрячь телепатические способности и предположить, что hViewTree является не-статической локальной переменной в оконной функции. Либо статической, но обработка WM_SIZE происходит раньше CreateWindow
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;

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Скажите что это не глюк...

Сообщение Хакер » 01.12.2010 (Ср) 1:32

BV писал(а):что hViewTree является не-статической локальной переменной в оконной функции.

Извращенец детектед.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

SLIM
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1840
Зарегистрирован: 04.04.2008 (Пт) 18:21
Откуда: Краснодар

Re: Скажите что это не глюк...

Сообщение SLIM » 01.12.2010 (Ср) 7:30

BV писал(а):Ну, попробую напрячь телепатические способности и предположить, что hViewTree является не-статической локальной переменной в оконной функции. Либо статической, но обработка WM_SIZE происходит раньше CreateWindow

hViewTree - глобальная переменная.
CteateWindowEx вызывается в WM_CREATE родительского окна
Пишите жизнь на чистовик.....переписать не удастся.....

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

Re: Скажите что это не глюк...

Сообщение BV » 01.12.2010 (Ср) 11:53

И значение hViewTree на момент вызова SetWindowPos в точности соответствует значению после CreateWindow?
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;

SLIM
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1840
Зарегистрирован: 04.04.2008 (Пт) 18:21
Откуда: Краснодар

Re: Скажите что это не глюк...

Сообщение SLIM » 01.12.2010 (Ср) 20:13

BV писал(а):И значение hViewTree на момент вызова SetWindowPos в точности соответствует значению после CreateWindow?


Во дела. В WM_SIZE попадает совсем не тот hViewTree что создается CreateWindow (другой адрес).
Причем при почти каждом WM_SIZE адрес меняется. Почему такое может происходить?
Пишите жизнь на чистовик.....переписать не удастся.....

SLIM
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1840
Зарегистрирован: 04.04.2008 (Пт) 18:21
Откуда: Краснодар

Re: Скажите что это не глюк...

Сообщение SLIM » 01.12.2010 (Ср) 21:27

Нашел.
Портил дескриптор в том же WM_SIZE.
Спасибо большое BV и Twister
Пишите жизнь на чистовик.....переписать не удастся.....


Вернуться в Windows-программирование

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

    TopList  
cron