Code:
#include <windows.h>
#define CHILDCLASS "CHILDCLASS"
#define INACTIVATE 0
#define ACTIVATE 1
LRESULT CALLBACK WindowProc(HWND, UINT, WPARAM, LPARAM);
LRESULT CALLBACK ChildWinProc(HWND, UINT, WPARAM, LPARAM);
BOOL InitChildControl();
char szClassName[ ] = "WindowsApp";
int WINAPI WinMain (HINSTANCE hThisInstance,
HINSTANCE hPrevInstance,
LPSTR lpszArgument,
int nFunsterStil)
{
HWND hwnd;
MSG messages;
WNDCLASSEX wincl;
wincl.hInstance = hThisInstance;
wincl.lpszClassName = szClassName;
wincl.lpfnWndProc = WindowProc;
wincl.style = CS_DBLCLKS;
wincl.cbSize = sizeof (WNDCLASSEX);
wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);
wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
wincl.lpszMenuName = NULL;
wincl.cbClsExtra = 0;
wincl.cbWndExtra = 0;
wincl.hbrBackground = (HBRUSH)COLOR_BTNSHADOW;
if(!RegisterClassEx(&wincl))
return 0;
if(!InitChildControl())
return 0;
hwnd = CreateWindowEx (
0,
szClassName,
"Windows App",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
544,
375,
HWND_DESKTOP,
NULL,
hThisInstance,
NULL
);
ShowWindow (hwnd, nFunsterStil);
while(GetMessage(&messages, NULL, 0, 0))
{
if(!IsDialogMessage(hwnd,&messages))
{
TranslateMessage(&messages);
DispatchMessage(&messages);
}
}
return messages.wParam;
}
LRESULT CALLBACK ChildWinProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
static RECT rc;
long ActParamAnt;
long ActParam = ActParamAnt = GetWindowLongPtr(hwnd, GWL_USERDATA);
switch(message)
{
case WM_PAINT:
{
PAINTSTRUCT ps;
GetClientRect(hwnd,&rc);
if(BeginPaint(hwnd,&ps))
{
if(ActParam == ACTIVATE)
{
FillRect(ps.hdc,&rc,(HBRUSH)4);
SetBkMode(ps.hdc,TRANSPARENT);
DrawText(ps.hdc,"ACTIVE",6,&rc,DT_SINGLELINE|DT_CENTER|DT_VCENTER);
}
else
{
FillRect(ps.hdc,&rc,(HBRUSH)13);
SetBkMode(ps.hdc,TRANSPARENT);
DrawText(ps.hdc,"INACTIVE",8,&rc,DT_SINGLELINE|DT_CENTER|DT_VCENTER);
}
EndPaint(hwnd,&ps);
}
}break;
case WM_MOUSEACTIVATE:
{
if(LOWORD(lParam) == HTNOWHERE)
{
ActParam = INACTIVATE;
SetFocus(hwnd);
InvalidateRect(hwnd,NULL,TRUE);
return MA_NOACTIVATE;
}
else
{
ActParam = ACTIVATE;
SetFocus(hwnd);
InvalidateRect(hwnd,NULL,TRUE);
return MA_ACTIVATE;
}
}break;
case WM_SETFOCUS:
{
ActParam = ACTIVATE;
InvalidateRect(hwnd,NULL,TRUE);
}break;
case WM_KILLFOCUS:
{
ActParam = INACTIVATE;
InvalidateRect(hwnd,NULL,TRUE);
}break;
case WM_NCLBUTTONDBLCLK:
{
return 0;
}break;
case WM_NCHITTEST:
{
return HTCAPTION;
}break;
default:
return DefWindowProc(hwnd, message, wParam, lParam);
}
if(ActParamAnt != ActParam)SetWindowLongPtr(hwnd, GWL_USERDATA, ActParam);
return 0;
}
BOOL InitChildControl()
{
WNDCLASSEX Wnd;
Wnd.cbSize = sizeof(WNDCLASSEX);
Wnd.lpszClassName = CHILDCLASS;
Wnd.lpfnWndProc = ChildWinProc;
Wnd.hInstance = GetModuleHandle(NULL);
Wnd.style = CS_HREDRAW|CS_VREDRAW;
Wnd.hIcon = LoadIcon (NULL, IDI_APPLICATION);
Wnd.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
Wnd.hCursor = LoadCursor (NULL, IDC_ARROW);
Wnd.lpszMenuName = NULL;
Wnd.cbClsExtra = 0;
Wnd.cbWndExtra = 0;
Wnd.hbrBackground = (HBRUSH)COLOR_BTNSHADOW;
if(!RegisterClassEx(&Wnd))
{
return FALSE;
}
return TRUE;
}
LRESULT CALLBACK WindowProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
static HWND Control[4];
switch (message)
{
case WM_CREATE:
{
Control[0] = CreateWindow(CHILDCLASS,"",WS_CHILD|WS_VISIBLE|WS_TABSTOP,10,10,85,25,hwnd,NULL,GetModuleHandle(NULL),NULL);
Control[1] = CreateWindow(CHILDCLASS,"",WS_CHILD|WS_VISIBLE|WS_TABSTOP,110,10,85,25,hwnd,NULL,GetModuleHandle(NULL),NULL);
Control[2] = CreateWindow(CHILDCLASS,"",WS_CHILD|WS_VISIBLE|WS_TABSTOP,210,10,85,25,hwnd,NULL,GetModuleHandle(NULL),NULL);
Control[3] = CreateWindow(CHILDCLASS,"",WS_CHILD|WS_VISIBLE|WS_TABSTOP,310,10,85,25,hwnd,NULL,GetModuleHandle(NULL),NULL);
}break;
case WM_DESTROY:
PostQuitMessage (0);
break;
default:
return DefWindowProc(hwnd, message, wParam, lParam);
}
return 0;
}
bye