Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > Вывести картинку на диалоге


Автор: TheVad 11.4.2006, 00:09
Возник еще один вопрос: есть ли что нибудь аналогичное: CONTROL "Bitmap1", -1, "STATIC", SS_BITMAP |WS_CHILD|WS_VISIBLE, 0, 0, -1, -1, но только в .cpp, а то надо заполнить форму битмепами, а в ручную не очень рационально, да и вообще работа с координатами битмепы нужна, а тут никак, тока в ручную как я понял, если есть скажите плиз.

Автор: Fixin 11.4.2006, 14:02
Вобщем, САБЖевый вопрос отсался прежним, но там ушли, решил, что так будет рациональнее.

Автор: TheVad 12.4.2006, 20:29
Все разобрался, может кому нибудь понадобится:
Код

#include <windows.h>
#include "resource.h"
HINSTANCE hinst;
BOOL CALLBACK DlgProc(HWND, UINT, WPARAM, LPARAM);
HBITMAP Bitmap;
void Window_OnPaint(HWND hwnd,int IDDlgItem)
{
    int CoordX=2;
    int CoordY=8;
    BITMAP bm;
    HDC StaticHDC;
    HDC MemoryHDC;
    HWND hwndStatic = GetDlgItem(hwnd,IDDlgItem);
    StaticHDC = GetDC(hwndStatic);
    MemoryHDC = CreateCompatibleDC(StaticHDC);
    SelectObject(MemoryHDC, Bitmap);
    GetObject(Bitmap, sizeof(bm), &bm);
    for(int i=0;i<10;i++)
    {
        for(int j=0,CoordX=2;j<10;j++)
        {
            BitBlt(StaticHDC, CoordX, CoordY, bm.bmWidth, bm.bmHeight, MemoryHDC, 0, 0, SRCCOPY);
            CoordX+=39;
        }
    CoordY+=39;
    }
    DeleteDC(MemoryHDC);
    ReleaseDC(hwndStatic,StaticHDC);    
}
void Window_OnCreate(HWND hwnd)
{
      Bitmap=LoadBitmap(hinst,MAKEINTRESOURCE(IDB_EMPTY));
}

void Window_OnDestroy(HWND hwnd)
{
    DeleteObject(Bitmap);
}
int WINAPI WinMain(HINSTANCE hInst,HINSTANCE, LPSTR lpTemplate , int)
{
    hinst=hInst;
    DialogBox(hInst,(char*)IDD_DIALOG1,0,DlgProc);
    return 0;
}
BOOL CALLBACK DlgProc(HWND hwnd,UINT msg, WPARAM wParam, LPARAM lParam)
{
    
    switch(msg)
    {
    case WM_INITDIALOG:
        Window_OnCreate(hwnd);

    case    WM_PAINT:
        Window_OnPaint(hwnd,IDC_STATIC1);
        Window_OnPaint(hwnd,IDC_STATIC2);
        break;
    case WM_DESTROY:
        DestroyWindow(hwnd);
        break;
   };
    return 0;
}


Автор: Fixin 12.4.2006, 21:20
Когда средствами GDI выводишь много картинок, лучше использовать двойную буфферизацию. А еще лучше, если изучишь GDI+ либо DirectDraw. Но, учитывая, что в морском бое нет особой динамической графики, то, вроде, все нормально.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)