Мне нужно две картинки разместить на окне, и затем поменять их местами. Кароче, одна шахмата слева, другая справа, Вопрос в том как хранить эти ресурсы и как загружать в окно? Какие апи почитать? Я только одну картинку могу загружать в DialogBoxParam, две не знаю, ни разу не видел. Может ли быть здесь полезным через GDI рисование фигур и заливка их цветом всмысле скорости работы и более удачного кода? Мне вобщем-то не важно значение фигур на рисунке. Или GDI не нужны. Может готовый пример имеется чтонибудь подходящее? Переключать картинки буду ComboBox-ом...
Semiono На этапе отладки можно хранить в отдельных файлах формата .bmp. Загружать с помощью CreateFile, ReadFile, HeapAlloc. Инициализировать с помощью CreateDIBitmap, CreateCompatibleDC, CreateCompatibleBitmap, SelectObject. Рисовать в окне с помощью BitBlt во время обработки события WM_PAINT, либо в теневом буфере. Удалять выделенные ресурсы с помощью: DeleteDC, DeleteObject, HeapFree.
Вот пару процедурок: Код (Text): ShowBMP2Static proc hSTC:DWORD,hBmp:HBITMAP,Mode:DWORD LOCAL rect:RECT LOCAL BmpInfo:BITMAP LOCAL Hw:DWORD LOCAL Ww:DWORD invoke GetObject,[hBmp],sizeof(BITMAP),ADDR BmpInfo invoke GetClientRect,[hSTC],ADDR rect ; mov eax, [rect].right ; sub eax, [rect].left ; mov [Ww], eax ; ; mov ebx, [rect].bottom ; sub ebx, [rect].top ; mov [Hw], ebx mov eax, 156 mov [Ww], eax mov [Hw], eax .if [Mode]==1 xor edx, edx mov eax, [BmpInfo].bmHeight div [Hw] mov ecx, eax xor edx, edx mov eax, [BmpInfo].bmWidth div [Ww] .if eax>ecx ;Hw=Ww*H/W invoke MulDiv,[Ww],[BmpInfo].bmHeight,[BmpInfo].bmWidth mov [Hw], eax .else ;Ww=W*Hw/H invoke MulDiv,[Hw],[BmpInfo].bmWidth,[BmpInfo].bmHeight mov [Ww], eax .endif .endif invoke CopyImage,[hBmp],IMAGE_BITMAP,[Ww],[Hw],LR_CREATEDIBSECTION push eax invoke SendMessage,[hSTC],STM_SETIMAGE,IMAGE_BITMAP,eax .if eax invoke DeleteObject,eax .endif pop eax ret ShowBMP2Static endp ShowBMP2Button proc hSTC:DWORD,hBmp:HBITMAP,Mode:DWORD LOCAL rect:RECT LOCAL BmpInfo:BITMAP LOCAL Hw:DWORD LOCAL Ww:DWORD invoke GetObject,[hBmp],sizeof(BITMAP),ADDR BmpInfo invoke GetClientRect,[hSTC],ADDR rect mov eax, [rect].right sub eax, [rect].left mov [Ww], eax mov ebx, [rect].bottom sub ebx, [rect].top mov [Hw], ebx ; mov eax, 160 ; mov [Ww], eax ; mov [Hw], eax .if [Mode]==1 xor edx, edx mov eax, [BmpInfo].bmHeight div [Hw] mov ecx, eax xor edx, edx mov eax, [BmpInfo].bmWidth div [Ww] .if eax>ecx ;Hw=Ww*H/W invoke MulDiv,[Ww],[BmpInfo].bmHeight,[BmpInfo].bmWidth mov [Hw], eax .else ;Ww=W*Hw/H invoke MulDiv,[Hw],[BmpInfo].bmWidth,[BmpInfo].bmHeight mov [Ww], eax .endif .endif invoke CopyImage,[hBmp],IMAGE_BITMAP,[Ww],[Hw],LR_CREATEDIBSECTION push eax invoke SendMessage,[hSTC],BM_SETIMAGE,IMAGE_BITMAP,eax .if eax invoke DeleteObject,eax .endif pop eax ret ShowBMP2Button endp File: Dlg.Rc Код (Text): #define IDD_DIALOG 1000 #define IDC_DIR 1001 #define IDC_BTN1 1002 #define IDC_DRIVE 1004 #define IDC_FILE 1005 #define IDC_IMG 1006 IDD_DIALOG DIALOGEX 6,6,268,189 CAPTION "Dialog As Main" FONT 8,"MS Sans Serif",0,0 CLASS "DLGCLASS" STYLE 0x10CB0000 EXSTYLE 0x00000000 BEGIN CONTROL "",IDC_DIR,"ListBox",0x50210541,0,17,123,57,0x00000200 CONTROL "IDC_BTN",IDC_BTN1,"Button",0x50810080,126,77,142,100,0x00000201 CONTROL "",IDC_DRIVE,"ComboBox",0x50210343,0,1,123,67,0x00000000 CONTROL "",IDC_FILE,"ListBox",0x50210143,126,1,142,74,0x00000200 CONTROL "Static",IDC_IMG,"Static",0x5000830E,0,77,124,100,0x00000201 END Используем гдето так. Код (Text): invoke GetDlgItem,[hWnd],IDC_IMG invoke ShowBMP2Static,eax,[hBmp1],1 invoke GetDlgItem,[hWnd],IDC_BTN1 invoke ShowBMP2Button,eax,[hBmp1],1 Нужные картинки подгужаем LoadImage(...) или чем удобно.