// 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);
Вы можете поводить мышкой и увидите, что курсор в дочернем окне изменяться. |