Я так понял, есть файл bmp. Его надо вывести в окошко. Если так, то держи пример, через двойную буферизацию .
| Код | #include <windows.h> LRESULT CALLBACK DCDemoWndProc(HWND, UINT, UINT, LONG); int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevinstance, LPSTR lpCmdLine,int nCmdShow) { HWND hWnd; WNDCLASS WndClass; MSG Msg; char szClassName[] = "DCDemo"; /* Заполняем структуру типа WNDCLASS */ WndClass.style = CS_HREDRAW|CS_VREDRAW; WndClass.lpfnWndProc = DCDemoWndProc; WndClass.cbClsExtra = 0; WndClass.cbWndExtra = 0; WndClass.hInstance = hInstance; WndClass.hIcon = LoadIcon(NULL,IDI_APPLICATION); WndClass.hCursor = LoadCursor(NULL, IDC_ARROW); WndClass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH); WndClass.lpszMenuName = "MyMenu"; WndClass.lpszClassName = szClassName; if ( ! RegisterClass (&WndClass) ) /* Регистрируем создаваемые класс */ { MessageBox(NULL,"Cannot register class","Error",MB_OK); return 0; } hWnd = CreateWindow(szClassName, "Program #1", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT,CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL,NULL, hInstance,NULL); if (!hWnd) { MessageBox(NULL,"Cannot create window","Error",MB_OK); return 0; } /*Покажем наше окно*/ ShowWindow(hWnd,nCmdShow); UpdateWindow(hWnd); /*Начало цикла сообщений*/ while(GetMessage(&Msg,NULL, 0, 0)) { TranslateMessage(&Msg); DispatchMessage(&Msg) ; } return Msg.wParam; } LRESULT CALLBACK DCDemoWndProc(HWND hWnd, UINT Message, UINT wParam, LONG lParam) { HDC hDC, hCompatibleDC; PAINTSTRUCT PaintStruct; HANDLE hBitmap, hOldBitmap; RECT Rect; BITMAP Bitmap; switch (Message) { case WM_PAINT: hDC = BeginPaint(hWnd,&PaintStruct); // Получаем контекст устройства // загружаем bitmap, который будет отображаться в окне, из файла hBitmap = LoadImage(NULL,"foto.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE); GetObject(hBitmap,sizeof(BITMAP),&Bitmap); // получаем размер загруженного bitmap`а // создаем совместимый с контекстом окна контекст в памяти hCompatibleDC = CreateCompatibleDC(hDC); // делаем загруженный из файла bitmap текущим в совместимом контексте hOldBitmap = SelectObject(hCompatibleDC,hBitmap); GetClientRect(hWnd,&Rect); // Определяем размер рабочей области окна // Копируем bitmap с совместимого в основной контекст с масштабированием StretchBlt(hDC,0,0,Rect.right,Rect.bottom,hCompatibleDC,0,0,Bitmap.bmWidth,Bitmap.bmHeight,SRCCOPY); // вновь делаем старый bitmap текущим SelectObject(hCompatibleDC,hOldBitmap); DeleteObject(hBitmap); // удаляем загруженный с диска bitmap DeleteDC(hCompatibleDC); // Удаляем совместимый контекст // Освобождаем основной контекст, завершая перерисовку рабочей области окна EndPaint(hWnd,&PaintStruct); return 0; case WM_DESTROY: PostQuitMessage(0); return 0; } return DefWindowProc(hWnd,Message,wParam,lParam); }
|
|