Окно с прозрачным цветом в Windows Forms

Тема в разделе "WASM.BEGINNERS", создана пользователем vg, 2 ноя 2008.

  1. vg

    vg New Member

    Публикаций:
    0
    Регистрация:
    16 апр 2007
    Сообщения:
    475
    В Microsoft Visual Studio создаю Windows Forms проект – окно с картинкой.
    Как сделать определённый цвет окна полностью прозрачным, так как это делают через SetLayeredWindowAttributes в чистом API?
     
  2. mc black

    mc black Member

    Публикаций:
    0
    Регистрация:
    19 янв 2005
    Сообщения:
    213
    Адрес:
    Russia, N.Novgorod
    Код (Text):
    1. invoke SetLayeredWindowAttributes,hWnd,dTransparentColor,dTransparency,LMA_ALPHA or LMA_COLORKEY
    dTransparentColor - цвет, который станет полностью прозрачным
    dTransparency - степень непрозрачности всех остальных цветов (0-255), где 0 - полная прозрачность, а 255 - полная непрозрачность.

    Есть вопрос к знатокам на смежную тему: как сделать окошко неоднородной полупрозрачности? Видел пример на VB6, который показывал этот эффект, загружая картинку png с неоднородной прозрачностью и делал из этого окно. Таким способом можно получить края окна без "зубчиков", которые в вышеприведенном примере будут на закругленных частях изображения за счёт пикселей. Могу найти этот пример, там используется API. Я пытался, но у меня ничего не получилось с портированием VB'шного кода в MASM.
     
  3. vg

    vg New Member

    Публикаций:
    0
    Регистрация:
    16 апр 2007
    Сообщения:
    475
    Это я знаю.
    Вопрос в том, как зделать то же в проекте Microsoft Visual Studio --> Windows Forms.
     
  4. mc black

    mc black Member

    Публикаций:
    0
    Регистрация:
    19 янв 2005
    Сообщения:
    213
    Адрес:
    Russia, N.Novgorod
    Ну это тогда тебя надо отправлять в MSDN, чтобы ты почитал справку по .NET Framework. Или спроси на любом форуме с .NET тематикой. Это очень просто делается, тоже в одну строчку.
     
  5. vg

    vg New Member

    Публикаций:
    0
    Регистрация:
    16 апр 2007
    Сообщения:
    475
    mc black
    А что, Windows Forms это всегда .NET ?
     
  6. mc black

    mc black Member

    Публикаций:
    0
    Регистрация:
    19 янв 2005
    Сообщения:
    213
    Адрес:
    Russia, N.Novgorod
    Нет, но ты не указал, какая у тебя VS, я подумал, что "современная".. ) Если ты пишешь не на .NET, то решение на API - это для тебя.
     
  7. vg

    vg New Member

    Публикаций:
    0
    Регистрация:
    16 апр 2007
    Сообщения:
    475
    Да, я знаю, но т. к. это проект Windows Forms наверное лучше было бы через MFC.
    Но если всё-таки делать через API, тогда как получить hWnd окна?
     
  8. Arthur

    Arthur New Member

    Публикаций:
    0
    Регистрация:
    27 янв 2007
    Сообщения:
    494
    vg
    В .NET: HWND = юзай myForm.Handle. А вообще есть атрибут управляющий прозрачностью, вроде бы myForm.Transparent (указываешь в диапазоне от 0.0 до 1.0, т.е. полупрозрачный = 0.50 в double формате).

    Если унаследованный класс, что то типа этого:
    Код (Text):
    1. System.Windows.Forms.Form
    то это .NET. Можешь готовый exe'шник пихнуть в peid, он покажет тебе что у тебя.
     
  9. mc black

    mc black Member

    Публикаций:
    0
    Регистрация:
    19 янв 2005
    Сообщения:
    213
    Адрес:
    Russia, N.Novgorod
    У него MFC, скажите ему кто знает: как там получить hWnd на его форме (Windows Forms)?
     
  10. Arthur

    Arthur New Member

    Публикаций:
    0
    Регистрация:
    27 янв 2007
    Сообщения:
    494
    mc black
    С чего это вы решили, что это MFC Application?
     
  11. mc black

    mc black Member

    Публикаций:
    0
    Регистрация:
    19 янв 2005
    Сообщения:
    213
    Адрес:
    Russia, N.Novgorod
    Arthur, из #7
     
  12. Arthur

    Arthur New Member

    Публикаций:
    0
    Регистрация:
    27 янв 2007
    Сообщения:
    494
    mc black
    А... ну если уж на MFC, то по моему там есть оператор HWND и мембер m_hWnd.
    если не ошибаюсь (MFC не юзал):
    Код (Text):
    1.    HWND hWnd = (HWND)myForm; // myForm is a CWnd based object.
    должно работать :)