1. MDI 화면에 배경 이미지넣기
CWinApp 에서 InitInstance() 에서 Callback 을 실행하는 함수를 추가 해서 WM_ERASEBKGND
WM_SIZE
이벤트가 발생 될때 마다 이미지를 그려주는 기능을 구현한다.
먼저 CWinApp 에 콜백 루틴을 구현해서 배경을 그리는 부분을 추가 한다.
HBITMAP hBmp; // old wnd proc WNDPROC pfnOldWndProc; // new one LRESULT CALLBACK pfnNewWndProc(HWND hwnd, UINT uMsg, WPARAM wParam,LPARAM lParam) { HDC hdc = (HDC)wParam; HDC hcompdc; RECT rect; switch (uMsg) { case WM_SIZE : SendMessage(hwnd, WM_ERASEBKGND, (WPARAM)GetDC(hwnd), 0); return 1; case WM_ERASEBKGND : //CallWindowProc(pfnOldWndProc, hwnd, uMsg, wParam, lParam); hcompdc = CreateCompatibleDC(hdc); SelectObject(hcompdc, hBmp); GetClientRect(hwnd, &rect); // bitmap dimensions are static for better performance (I assume // background image is statically loaded) if (0 == StretchBlt(hdc, rect.left, rect.top, rect.right, rect.bottom, hcompdc, 0, 0, 1152, 864, SRCCOPY)) MessageBox(hwnd, "error", "while StretchBlt", MB_OK); DeleteDC(hcompdc); return 1; default : return CallWindowProc(pfnOldWndProc, hwnd, uMsg, wParam, lParam); } }
2. 다음은 CWinApp 에서 InitInstance() 에서 콜백 함수를 등록 한다
if (!ProcessShellCommand(cmdInfo)) return FALSE; hBmp = LoadBitmap(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDB_BITMAP1)); if (hBmp == NULL) MessageBox(NULL, "Error", "Bitmap could not be loaded !!!", MB_OK); HWND hMain = pMainFrame->GetWindow(GW_CHILD)->GetSafeHwnd(); pfnOldWndProc = (WNDPROC)GetWindowLong(hMain, GWL_WNDPROC); SetWindowLong(hMain, GWL_WNDPROC, (long)pfnNewWndProc); // The main window has been initialized, so show and update it. pMainFrame->ShowWindow(m_nCmdShow); pMainFrame->UpdateWindow();
BitMap을 화면 사이즈에 맞추어 늘려 준다
hcompdc = CreateCompatibleDC(hdc); SelectObject(hcompdc, hBmp); GetClientRect(hwnd, &rect); if (0 == StretchBlt(hdc, rect.left, rect.top, rect.right, rect.bottom, hcompdc, 0, 0, 1152, 864, SRCCOPY)) MessageBox(hwnd, "error", "while StretchBlt", MB_OK); DeleteDC(hcompdc); return 1;
'개발언어 > c++' 카테고리의 다른 글
상속된 템플릿 클래스의 연산자 오버로딩(Operator Overloading) (0) | 2016.11.21 |
---|---|
MSFlexgrid in VC++ (0) | 2016.11.18 |
ATL Error 정보 얻기 (0) | 2016.10.19 |
CFileDialog 사용법 (0) | 2016.10.19 |
JPG, GIF, BMP, WMF, EMF, ICO 열기(IPicture 사용법) (0) | 2016.10.19 |