Code:
/* Programm: First Window
Author: Stefan Hof
Date: 5. January 2004
*/
#include <windows.h>
#include <iostream>
#include <fstream>
#include <string.h>
using namespace std;
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
LRESULT CALLBACK ChildProc(HWND hWnd,UINT message, WPARAM wParam,LPARAM lParam);
HINSTANCE h_areainstance;
HWND hwnd, hwnd_maparea;
const char szChildName[]="STATIC";
char cords[20][20];
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int showpref)
{
static char AppName[] = "WinTextedit 1.0";
MSG msg;
WNDCLASS wndclass;
wndclass.style = 0;
wndclass.lpfnWndProc = WndProc;
wndclass.cbClsExtra = 0;
wndclass.cbWndExtra = 0;
wndclass.hInstance = hInstance;
wndclass.hIcon = LoadIcon(NULL, IDI_WINLOGO);
wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
wndclass.hbrBackground = (HBRUSH) COLOR_MENU + 3;
wndclass.lpszMenuName = NULL;
wndclass.lpszClassName = AppName;
if (RegisterClass(&wndclass) == false)
{
MessageBox(NULL, "Es ist ein Fehler aufgetreten. ", "Error! ", MB_ICONERROR);
return 0;
}
wndclass.hbrBackground = (HBRUSH) COLOR_MENU + 3;
wndclass.hIcon = NULL;
wndclass.lpfnWndProc = ChildProc;
wndclass.lpszClassName = szChildName;
if (RegisterClass(&wndclass) == false)
{
MessageBox(NULL, "Es ist ein Fehler aufgetreten. ", "Error! ", MB_ICONERROR);
return 0;
}
hwnd = CreateWindow (AppName,
TEXT("WinProgramm 1.0"),
WS_OVERLAPPEDWINDOW,
100,
100,
500,
500,
NULL,
NULL,
hInstance,
NULL);
ShowWindow(hwnd, SW_SHOWNORMAL);
UpdateWindow(hwnd);
while(GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch(message)
{
case WM_CREATE:
hwnd_maparea = CreateWindow(szChildName,
"maparea",
WS_CHILD | WS_VISIBLE | SS_GRAYFRAME,
100, 30, 200, 200,
hwnd,
NULL,
((LPCREATESTRUCT)lParam)->hInstance,
NULL);
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hwnd, message, wParam, lParam);
}
LRESULT CALLBACK ChildProc(HWND hWnd,UINT message, WPARAM wParam,LPARAM lParam){
static int xOffset=100,yOffset=30;
HDC hdc_winclient, hdc_bmp_mem;
static HBITMAP hbitmap = LoadBitmap(NULL,(char*)OBM_CHECK);
int mouse_x, mouse_y;
PAINTSTRUCT ps;
switch(message){
case WM_PAINT:
hdc_winclient = BeginPaint(hwnd, &ps);
hdc_bmp_mem = CreateCompatibleDC(hdc_winclient);
SelectObject(hdc_bmp_mem, hbitmap);
for(int x = 0; x<20; x++)
{
for(int y = 0; y<20; y++)
{
if (cords[x][y] == 1)
{
BitBlt(hdc_winclient, (x*10)*10+xOffset, (y*10)+yOffset, 40, 40, hdc_bmp_mem, 0, 0, SRCCOPY);
}
}
}
EndPaint(hwnd, &ps);
DeleteDC(hdc_bmp_mem);
return 0;
case WM_LBUTTONDOWN:
mouse_x = LOWORD(lParam);
mouse_y = HIWORD(lParam);
cords[mouse_x/10][mouse_y/10] = 1;
hdc_winclient = GetDC(hwnd);
hdc_bmp_mem = CreateCompatibleDC(hdc_winclient);
SelectObject(hdc_bmp_mem, hbitmap);
BitBlt(hdc_winclient, (mouse_x / 10)*10+xOffset, (mouse_y / 10) *10+yOffset, 40, 40, hdc_bmp_mem, 0, 0, SRCCOPY);
ReleaseDC(hwnd, hdc_winclient);
DeleteDC(hdc_bmp_mem);
return 0;
case WM_MOUSEMOVE:
if (wParam == MK_LBUTTON)
{
mouse_x = LOWORD(lParam);
mouse_y = HIWORD(lParam);
cords[mouse_x/10][mouse_y/10] = 1;
hdc_winclient = GetDC(hwnd);
hdc_bmp_mem = CreateCompatibleDC(hdc_winclient);
SelectObject(hdc_bmp_mem, hbitmap);
BitBlt(hdc_winclient, (mouse_x / 10)*10+xOffset, (mouse_y / 10) *10+yOffset, 40, 40, hdc_bmp_mem, 0, 0, SRCCOPY);
ReleaseDC(hwnd, hdc_winclient);
DeleteDC(hdc_bmp_mem);
}
return 0;
case WM_DESTROY:
DeleteObject(hbitmap);
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hWnd, message, wParam, lParam);
}
Also das wäre der Code für das Child Window in einer eigenen Callbackfunktion. Irgendwie ist dabei der Rahmen verschwunden, ich hab leider keine Ahnung warum o_O'.