Controls HIDE/SHOW =(((

Тема в разделе "WASM.WIN32", создана пользователем gloomyraven, 16 май 2006.

  1. gloomyraven

    gloomyraven Руслан

    Публикаций:
    0
    Регистрация:
    16 апр 2006
    Сообщения:
    288
    Адрес:
    Москва
    Hi!

    Извиняюсь за наиглупейший вопрос (и что он не BEGINNERS), но у меня уже от него крыша едет...

    Такая проблема: приложение создает диалоговое окно, в нем есть конроллы =) И эти конроллы необходимо в ходе выполнения скрывать/показывать (в частности класса "Static"), т.е., если взять аналог на Builder`e, то это будет выглядеть так:

    SomeLabel->Visible=FALSE (TRUE)

    С SendDlgItemMessage, ShowWindow, GetWindowLong/SetWindowLong чёт не получается...

    Пробовал дизассемблировать этот код с билдера, но там Карпатский лес какой-то...

    Help plz!
     
  2. readme

    readme New Member

    Публикаций:
    0
    Регистрация:
    2 июл 2005
    Сообщения:
    271
    Адрес:
    Russia
    хм с ShowWindow должно работать

    получи хэндл перед этим GetDlgItem
     
  3. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    2.348
    в VS6 все статики по умолчанию имеют зарезервированный ID - IDC_STATIC

    контролы с таким ID нельзя скрыть, изменить текст и т.д.



    попробуй его измени (в смысле ID :)).
     
  4. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    Скрываем: ShowWindow(GetDlgItem(hDlg,ID),SW_HIDE);

    Показываем: ShowWindow(GetDlgItem(hDlg,ID),SW_SHOW);
     
  5. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    rmn



    Просто, если ID не уникальный, хендл такого контрола нельзя получить через GetDlgItem, но это не значит, что такой статик нельзя скрыть, изменить текст и т.д.
     
  6. gloomyraven

    gloomyraven Руслан

    Публикаций:
    0
    Регистрация:
    16 апр 2006
    Сообщения:
    288
    Адрес:
    Москва
    readme

    Quantum

    В том-то и дело, что не скрываются они:



    ; получаем HWND

    invoke GetDlgItem,hWnd,IDC_lbl_Error

    invoke ShowWindow,eax,FALSE ; скрываем



    НЕ СКРЫВАЕТ!

    В ресурсах у меня

    CONTROL "Бла-бла-бла",IDC_lbl_Error,"Static",0x50000000,194,35,118,8,0x0000000 0
     
  7. gloomyraven

    gloomyraven Руслан

    Публикаций:
    0
    Регистрация:
    16 апр 2006
    Сообщения:
    288
    Адрес:
    Москва
    Сам контрол, ессесно, находится в шаблоне, т.е. создается с помощью CreateDialogParam. Может в этом проблема и надо их ручками создавать - CreateWindowEx?
     
  8. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    gloomyraven



    Должен скрывать. Раз не скрывает, ищите ошибку:

    1. Проверьте, что IDC_lbl_Error в ресурсе равен IDC_lbl_Error в коде.

    2. Убедитесь, что нет больше контролов в этом диалоге с одинаковым ID.

    3. Убедитесь, что hWnd действительно является хендлом диалога со статиком.



    Проще, конечно, пройтись отладчиком и сразу увидеть причину ошибки.





    Без разницы.



    ЗЫ: А Вы случайно не обрабатываете сообщения WM_PAINT и/или WM_ERASEBKGND в этом диалоге?
     
  9. gloomyraven

    gloomyraven Руслан

    Публикаций:
    0
    Регистрация:
    16 апр 2006
    Сообщения:
    288
    Адрес:
    Москва
    1. GetDlgItem возвращает: ERROR_CONTROL_ID_NOT_FOUND

    2. IDC_lbl_Error в ресурсе равен IDC_lbl_Error в коде

    3. этот конрол уникальный

    4. WM_PAINT и/или WM_ERASEBKGND не обрабатываю



    И ещё:

    lblClass db "Static",0

    ...

    invoke FindWindowEx,hWnd,0,offset lblClass,0

    invoke ShowWindow,eax,FALSE

    Находит и прячет 1-й статик,а



    lblClass db "Static",0

    lbl db "Bla-bla",0

    ...

    invoke FindWindowEx,hWnd,0,offset lblClass,offset lbl

    invoke ShowWindow,eax,FALSE

    Выдает туже ошибку (ERROR_CONTROL_ID_NOT_FOUND)
     
  10. gloomyraven

    gloomyraven Руслан

    Публикаций:
    0
    Регистрация:
    16 апр 2006
    Сообщения:
    288
    Адрес:
    Москва
    Могу сорцы на Mail отослать, если не лень помочь...
     
  11. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    gloomyraven

    Сорс такой тяжёлый, что сюда нельзя приаттачить? Можно и экзешник без сорсов.
     
  12. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    2.348
    2Quantum





    а что, если обрабатывать эти сообщения, нельзя хэндл контрола получить? (просто интересно:))
     
  13. gloomyraven

    gloomyraven Руслан

    Публикаций:
    0
    Регистрация:
    16 апр 2006
    Сообщения:
    288
    Адрес:
    Москва
  14. gloomyraven

    gloomyraven Руслан

    Публикаций:
    0
    Регистрация:
    16 апр 2006
    Сообщения:
    288
    Адрес:
    Москва
    rmn

    А у меня и без этог хэндлы не находит =)
     
  15. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    2.348
  16. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    rmn



    Кто сказал, что нельзя? Просто может так получиться, что спрятанное окно всё равно будет видно, если фон не стирается.



    gloomyraven

    Сейчас гляну.
     
  17. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    gloomyraven

    1. Зачем регистрировать класс DLGCLASS?

    2. В CreateDialogParam нужно передавать адрес обработчика сообщений.



    Я удивляюсь вообще, что винда разрулила такой изврат с классами. А контрол не находится, т.к. его просто нет. Диалог не заполняется контролами из-за ошибки в п1-2.
     
  18. gloomyraven

    gloomyraven Руслан

    Публикаций:
    0
    Регистрация:
    16 апр 2006
    Сообщения:
    288
    Адрес:
    Москва
    Quantum

    DLDCLASS регистрировал, чтобы создать диалоговый шаблон как класс окна и создать "окно" из этого класса. Так проще - не надо вручную создавать контролы.



    - а зачем, если мы создаем

    новый класс и указываем ему WndProc?
     
  19. gloomyraven

    gloomyraven Руслан

    Публикаций:
    0
    Регистрация:
    16 апр 2006
    Сообщения:
    288
    Адрес:
    Москва
    Quantum

    А у тебя вообще окно создалось? Если да, то посмотри: ProgressBar работает нормально... (нажми File->Open и выбери файл)
     
  20. gloomyraven

    gloomyraven Руслан

    Публикаций:
    0
    Регистрация:
    16 апр 2006
    Сообщения:
    288
    Адрес:
    Москва
    Да и к тому же через FindWindowEx эти Statisы видны