Прошу вашей помощи, дорогие Ачатовцы В общем задался задачей , сделать окно нестандартной формы а конкретно - прямоугольное с закругленными углами. Испытание первое - на легкую решил взять берем и рисуем картинку и ставим её как Фон формы (BackGroundIimage) а также в свойствах формы выставляем TransparentColor такойже как у фона картинки (розовый в данном случае) В результате все работает но по краям формы (где закругления) остается артефакт можно для 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++ все нормально. Пожалуйста вырвите мне руки из жо** и вставьте на место.
2slesh Какой проэкт создавал? Windows Forms? Можеш скинуть проэктик? ибо я тоже все это делаю в VS2008. Да действительно если создавать Win32 проэкт то все компилиться и регион накладывается но вот если MFC то тут сабака.. пошел рыть дальше =)
Кстати, насчет артефактов. Ты картинку создаеш в фотошопе наверное с включенным сглаживанием? Такие вещи должны иметь четкие цвета без сглаживаний и размытий, по этому лучше рисуй их в паинте который в 98-2003 виндах (Vista и w7 не подойдет) ВОт в них можно нарисовать и отлично всё будет. Сам проверял когдато. Но главное чтобы картинка была BMP (там нет потери качества и искажения) Но есть и еще лучшая вешь: Программно рисуй всё. С экономишь на размере. Прям на форме можеш рисовать нужным цветом, который обеспечивает прозрачность
Да с картинкой разобрался (вычитал на забугорном форуме) но всеравно спасибо. Насчет "ручками рисовать" - оно то можно но тут уже спортивный интерес, как понял нужно копать в сторону GDI (Вот сижу MSDN изучаю)
Да но если убрать сглаживание то края формы будут рваные (что кстати не очень и критично). Думал рисовать регион на базе картинки а потом доперло что скорее всего в глубине компонента так и происходит и нефиг из .NEt делать WinApi =)