VS C++ 2008 + Регионы

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by POS_troi, 30 Nov 2009.

  1. POS_troi

    POS_troi Elder - Старейшина

    Joined:
    1 Dec 2006
    Messages:
    1,569
    Likes Received:
    466
    Reputations:
    108
    Прошу вашей помощи, дорогие Ачатовцы :p

    В общем задался задачей , сделать окно нестандартной формы а конкретно - прямоугольное с закругленными углами.

    Испытание первое - на легкую решил взять

    берем и рисуем картинку

    [​IMG]

    и ставим её как Фон формы (BackGroundIimage) а также в свойствах формы выставляем TransparentColor такойже как у фона картинки (розовый в данном случае)

    В результате все работает но по краям формы (где закругления) остается артефакт

    [​IMG]

    можно для TransparentColor использовать цвет, как можно ближний к самой картинке и тогда артефакт фактически невиден но нарываемся на другую проблему - невозможность выполнить дизайн в одном стиле ибо артефакты будут уже посреди формы =)

    Вариант два

    Использовать функцию API CreateEllipticRgn() (для элипса)

    но у меня с ней возникает проблема а конкретно

    Code:
    HRGN region = CreateEllipticRgn(0,0,100,100);
    
    при компиляции в Visual Studio 2008 (C++) вываливаются ошибки

    Code:
    1>bash.obj : error LNK2028: ссылка на неразрешенную лексему (0A00000D) "extern "C" struct HRGN__ * __stdcall CreateEllipticRgn(int,int,int,int)" (?CreateEllipticRgn@@$$J216YGPAUHRGN__@@HHHH@Z) в функции "private: void __clrcall bash::Form1::Form1_Load(class System::Object ^,class System::EventArgs ^)" (?Form1_Load@Form1@bash@@$$FA$AAMXP$AAVObject@System@@P$AAVEventArgs@4@@Z)
    1>bash.obj : error LNK2019: ссылка на неразрешенный внешний символ "extern "C" struct HRGN__ * __stdcall CreateEllipticRgn(int,int,int,int)" (?CreateEllipticRgn@@$$J216YGPAUHRGN__@@HHHH@Z) в функции "private: void __clrcall bash::Form1::Form1_Load(class System::Object ^,class System::EventArgs ^)" (?Form1_Load@Form1@bash@@$$FA$AAMXP$AAVObject@System@@P$AAVEventArgs@4@@Z)
    1>F:\Проэкты\bash\Debug\bash.exe : fatal error LNK1120: 2 неразрешенных внешних элементов
    
    и вот не могу въехать в чем трабла, при этом в DEVC++ и Borland C++ все нормально.

    Пожалуйста вырвите мне руки из жо** и вставьте на место.
     
  2. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    VC++ 2008 Pro отлично компилится
     
  3. POS_troi

    POS_troi Elder - Старейшина

    Joined:
    1 Dec 2006
    Messages:
    1,569
    Likes Received:
    466
    Reputations:
    108
    2slesh

    Какой проэкт создавал? Windows Forms?

    Можеш скинуть проэктик? ибо я тоже все это делаю в VS2008.

    Да действительно если создавать Win32 проэкт то все компилиться и регион накладывается но вот если MFC то тут сабака.. пошел рыть дальше =)
     
    #3 POS_troi, 30 Nov 2009
    Last edited: 30 Nov 2009
  4. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    Кстати, насчет артефактов. Ты картинку создаеш в фотошопе наверное с включенным сглаживанием?

    Такие вещи должны иметь четкие цвета без сглаживаний и размытий, по этому лучше рисуй их в паинте который в 98-2003 виндах (Vista и w7 не подойдет)
    ВОт в них можно нарисовать и отлично всё будет. Сам проверял когдато. Но главное чтобы картинка была BMP (там нет потери качества и искажения)

    Но есть и еще лучшая вешь:
    Программно рисуй всё. С экономишь на размере. Прям на форме можеш рисовать нужным цветом, который обеспечивает прозрачность
     
  5. POS_troi

    POS_troi Elder - Старейшина

    Joined:
    1 Dec 2006
    Messages:
    1,569
    Likes Received:
    466
    Reputations:
    108
    Да с картинкой разобрался (вычитал на забугорном форуме) но всеравно спасибо.

    Насчет "ручками рисовать" - оно то можно но тут уже спортивный интерес, как понял нужно копать в сторону GDI (Вот сижу MSDN изучаю)
     
  6. POS_troi

    POS_troi Elder - Старейшина

    Joined:
    1 Dec 2006
    Messages:
    1,569
    Likes Received:
    466
    Reputations:
    108
    UP!

    Все еще интересно - как реализовать работу с регионами в C++.NET
     
  7. nerezus

    nerezus Banned

    Joined:
    12 Aug 2004
    Messages:
    3,191
    Likes Received:
    727
    Reputations:
    266
    Артефакт элементарно убирается - в настройках рисования убирается AA.
     
  8. POS_troi

    POS_troi Elder - Старейшина

    Joined:
    1 Dec 2006
    Messages:
    1,569
    Likes Received:
    466
    Reputations:
    108
    Да но если убрать сглаживание то края формы будут рваные (что кстати не очень и критично).

    Думал рисовать регион на базе картинки а потом доперло что скорее всего в глубине компонента так и происходит и нефиг из .NEt делать WinApi =)