GDI+.что я делаю не так?
От: Hypertonyc  
Дата: 19.10.08 20:59
Оценка:
Знаю что на эту тему ужэ было много разговоров но на свой вопрос ответа ненашёл...
Кароче я хочу сделать окно нестандартной формы (окно WS_POPUP...на него красивая картинка с закруглёнными углами...весёлым фоном...ну кароче)...Самая главная загвоздка что помимо этого мне нужно чтоб это окошко ещё было полупрозрачным...Кароче к делу:

hwnd=CreateWindowEx(classname, wndname,WS_POPUP ,x,y, cx,acy,NULL,NULL,hinst, NULL);
SetWindowLong(hwnd,GWL_EXSTYLE,GetWindowLong(hwnd, GWL_EXSTYLE) | WS_EX_LAYERED);
SetLayeredWindowAttributes(hwnd, RGB(255,255,255), 100, LWA_COLORKEY|LWA_ALPHA);
создаём "слоёное" окошко ... ставим цвет маски и значение прозрачности...и соответственные флаги через "или"...по сути всё ок!

далее в обработчике WM_PAINT пишу...предварительно сделав GdiplusStartup(&gditok, &gsi, NULL):

hdc = BeginPaint(hWnd, &ps);
Graphics graph(hdc);
Bitmap img(L"C:\\Okno.BMP");
graph.DrawImage(& img, 0, 0,200,640);
EndPaint(hWnd, &ps);

Окошко получается полупрозрачным...но углы не округлились...то есть LWA_COLORKEY не сработал...
если в SetLayeredWindowAttributes убрать LWA_ALPHA то углы становятса круглыми...но окошко соответственно непрозрачным...я уж было думал что это невозможно...НО...если в WM_PAINT написать:

hdc = BeginPaint(hWnd, &ps);
HDC dcMem;
HBITMAP hBmp;
hBmp = (HBITMAP)LoadImage( ahInstance,"C:\\okno.BMP",IMAGE_BITMAP,400,640,LR_LOADFROMFILE);
dcMem=CreateCompatibleDC(hdc);
SelectObject(dcMem,hBmp);
StretchBlt(hdc,0, 0, 200, 640, dcMem, 0, 0,cx,cy, SRCCOPY);
EndPaint(hWnd, &ps);

ТО ВСЁ НАЧИНАЕТ РАБОТАТЬ ТАК КАК МНЕ НУЖНО!!!ЗНАЧИТ ЭТО ВОЗМОЖНО...но я хочу через GDI+...ибо она умеет JPEG,PNG...и ещё много много всего...

низнаю пачиму но неработает дажэ воттак:

HDC dcMem;
HBITMAP hBmp;

Bitmap* btmp;
btmp = new Bitmap(L"C:\\Okno.BMP");
btmp->GetHBITMAP(NULL,&hBmp);
dcMem=CreateCompatibleDC(hdc);
SelectObject(dcMem,hBmp);
StretchBlt(hdc,0, 0, 200, 640, dcMem, 0, 0,400,640, SRCCOPY);

тачнее работает...но раздельно...либо прозрачно с углами...либо с гладкими углами но непрозрачно...
так в чём же дело???объясните кто нибудь...а лутше расскажите как мне быть...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.