Создание дочерних окон

// ChildWin.cpp : Defines the entry point for the application.
//


#include "stdafx.h"
#include "windows.h"
#include "windowsx.h"

// Идентификаторы окон
#define ID_FIRSTCHILD100
#define ID_SECONDCHILD101
#define ID_THIRDCHILD102


LRESULT CALLBACK WndProc(HWND, UINT, WPARAM,LPARAM);
LRESULT CALLBACK ChildProc(HWND, UINT, WPARAM,LPARAM);

HINSTANCE hinst;

int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
HWND hwnd;
MSG msg;
WNDCLASS w;
hinst=hInstance;
memset(&w,0,sizeof(WNDCLASS));
w.style = CS_HREDRAW | CS_VREDRAW;
w.lpfnWndProc = WndProc;
w.hInstance = hInstance;
w.hbrBackground = GetStockBrush(WHITE_BRUSH);
w.lpszClassName = "C Windows";
w.hCursor=LoadCursor(NULL,IDC_ARROW);
RegisterClass(&w);
hwnd = CreateWindow("C Windows","C Windows", WS_OVERLAPPEDWINDOW,
10,10,600,480,NULL,NULL,hInstance,NULL);
ShowWindow(hwnd,nCmdShow);
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:// создание основного окна
for (int i = 0; i < 3; i++)// Создание трех дочерних окна
{
WNDCLASS w;
memset(&w,0,sizeof(WNDCLASS));
w.lpfnWndProc = ChildProc;
w.hInstance = hinst;
w.hbrBackground = GetStockBrush(WHITE_BRUSH);
w.lpszClassName = "ChildWClass";
w.hCursor=LoadCursor(NULL,IDC_CROSS);
RegisterClass(&w);
HWND child;
child=CreateWindowEx(0,"ChildWClass",(LPCTSTR) NULL,
WS_CHILD | WS_BORDER | WS_VISIBLE ,i*10,i*10,
50,50,hwnd,(HMENU) (int) (ID_FIRSTCHILD + i),hinst,NULL);
ShowWindow(child,SW_NORMAL);
UpdateWindow(child);
}
return 0;
}

if (Message == WM_DESTROY )
{
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hwnd,Message,wparam,lparam);
}


LRESULT CALLBACK ChildProc(HWND hwnd, UINT Message, WPARAM wparam,LPARAM lparam)
{
if (Message == WM_DESTROY )
{
return 0;
}
return DefWindowProc(hwnd,Message,wparam,lparam);
}

В момент обработки сообщения WM_CREATE мы создаем дочерние окна, для этого нужно сделать все естественно, зарегистрировать класс окна, вызвать функцию CreateWindow. Нужно создать функцию обработки сообщений ChildProc. Все мы это сделали. И как результат окна с дочерними окнами.

Если обратили внимание, я добавил разные описания курсоров:

// родительское окно
w.hCursor=LoadCursor(NULL,IDC_ARROW);
// дочернее окно
w.hCursor=LoadCursor(NULL,IDC_CROSS);

Вы можете поводить мышкой и увидите, что курсор в дочернем окне изменяться.

 

 
« Предыдущая статья   Следующая статья »