Конференция на VBStreets - Изглед на тема - Как да зададете прозрачност за фона на контрола
Да кажем, че има прозорец с няколко контроли (група, етикет, квадратче за отметка, радио бутон, текст, раздели, връзка*)
Появиха се така наречените "ивици". За да се елиминира това на един от контролите (Етикет), следният код беше добавен към изходния код на приложението, към функцията на прозореца Код: Изберете всички регистър WM_CTLCOLORSTATIC: TCHAR ); GetClassName((HWND)lParam, Class, 64); if((0 == lstrcmp(Class, TEXT("Static")))) SetBkMode((HDC)wParam, TRANSPARENT); връщане (LRESULT)GetStockObject(NULL_BRUSH); > > почивка; Ето какво се случи
Ако не беше хакът WM_CTLCOLORSTATIC, прозорецът щеше да изглежда по същия начин, както на първата екранна снимка, но с показан контрол на връзката.
Правилният път ли е избран? Факт е, че ако добавите превъртане към прозорец или текстово поле с превъртане, тогава при използване на последното (превъртане) ще се наблюдава интересен ефект: замъгляване (припокриване на предишния „кадър“ в нов).
P.S. И двата примера (със и без регистър WM_CTLCOLORSTATIC:) бяха компилирани от командния ред.
P.S.S. Въпреки факта, че темите на манифеста са били обсъждани повече от веднъж, въпросът не е как да се даде съвременен вид на контролите, а как да се преодолеят последствията от такова даване.
Любопитното е, че думата "непрозрачност" се използва в смисъл на технология, но за случая, цитиран в тази тема, тя напълно отговаря на предназначението си.
На същото място не е ясно с какъв параметър werbersoft е предложил стартирането на InitCommonControlsEx от "comctl32.dll". С цялата отговорност казвам, че във Visual C++ манифестът беше достатъчен. Но в този пример има повикване по заявка ICC_LINK_CLASS.