Code:
#include <windows.h>
#include "resource.h"
class CApp
{
private:
HBITMAP hBitmap;
public:
CApp();
int Run();
LRESULT CALLBACK MainWndProc(HWND, UINT, WPARAM, LPARAM);
static LRESULT CALLBACK StaticWndProc(HWND, UINT, WPARAM, LPARAM);
};
CApp::CApp()
{
WNDCLASSEX wcx;
HINSTANCE hInstance = (HINSTANCE)GetModuleHandle(NULL);
wcx.cbClsExtra = 0;
wcx.cbSize = sizeof(WNDCLASSEX);
wcx.cbWndExtra = 0;
wcx.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
wcx.hCursor = LoadCursor(NULL, IDC_ARROW);
wcx.hIcon = LoadIcon(NULL, IDI_WINLOGO);
wcx.hIconSm = NULL;
wcx.hInstance = hInstance;
wcx.lpfnWndProc = (WNDPROC)StaticWndProc;
wcx.lpszClassName = TEXT("Test");
wcx.lpszMenuName = NULL;
wcx.style = CS_HREDRAW | CS_VREDRAW;
RegisterClassEx(&wcx);
HWND hwnd = CreateWindowEx(0, TEXT("Test"), TEXT("Window"), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, this);
ShowWindow(hwnd, SW_SHOW);
UpdateWindow(hwnd);
}
int CApp::Run()
{
MSG msg;
while (GetMessage(&msg, NULL, 0, 0) > 0)
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
LRESULT CALLBACK CApp::MainWndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch(msg)
{
case WM_CREATE:
{
HINSTANCE hInstance = (HINSTANCE) GetModuleHandle(NULL);
hBitmap = LoadBitmap(hInstance, MAKEINTRESOURCE(IDB_BITMAP1));
if (!hBitmap)
OutputDebugString(TEXT("Error: Unable to load bitmap\n\n"));
}
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
default:
return DefWindowProc(hwnd, msg, wParam, lParam);
}
}
LRESULT CALLBACK CApp::StaticWndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
CApp *ca = (CApp *) GetWindowLongPtr(hwnd, GWL_USERDATA);
if (!ca)
{
CREATESTRUCT *cs = (CREATESTRUCT *) lParam;
ca = (CApp *) cs->lpCreateParams;
SetWindowLongPtr(hwnd, GWL_USERDATA, (LONG_PTR)ca);
}
if (!ca)
return DefWindowProc(hwnd, msg, wParam, lParam);
else
return ca->MainWndProc(hwnd, msg, wParam, lParam);
}
CApp App;
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR szCmdLine, int nCmdShow)
{
App.Run();
return 0;
}
EDIT