Новичок
Профиль
Группа: Участник
Сообщений: 49
Регистрация: 3.11.2006
Репутация: нет Всего: нет
|
Доброго времени суток. Попробовал создать дочернее окно, оно выводится, но без кнопок (хотя указал WS_MAXIMIZEBOX|WS_MINIMIZEBOX). Подскажите пожалуйста как вывести кнопки на заголовок дочернего окна и как добавить кнопку Close (не нашел её в списке). оконный класс дочернего окна и т.д. с "1" на конце, дочернее окно создаю в WndProc WM_CREATE. String Table такая: Код | IDS_APP_TITLE 103 L_child_win IDC_L_CHILD_WIN 109 L_CHILD_WIN ID_CH1 150 Child ID_CH2 151 Childd
|
Код | #include "stdafx.h" #include "L_child_win.h"
#define MAX_LOADSTRING 100
// Global Variables: HINSTANCE hInst; // current instance TCHAR szTitle[MAX_LOADSTRING]; // The title bar text TCHAR szWindowClass[MAX_LOADSTRING]; // the main window class name
TCHAR szTitle1[MAX_LOADSTRING]; // The title bar text TCHAR szWindowClass1[MAX_LOADSTRING]; // the main window class name
HWND hWndChild; LPARAM lParam;
// Forward declarations of functions included in this code module: ATOM MyRegisterClass(HINSTANCE hInstance); ATOM MyRegisterClass1(HINSTANCE hInstance); BOOL InitInstance(HINSTANCE, int); LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); LRESULT CALLBACK WndProc1(HWND, UINT, WPARAM, LPARAM); INT_PTR CALLBACK About(HWND, UINT, WPARAM, LPARAM);
int APIENTRY _tWinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow){ UNREFERENCED_PARAMETER(hPrevInstance); UNREFERENCED_PARAMETER(lpCmdLine);
// TODO: Place code here. MSG msg; HACCEL hAccelTable;
// Initialize global strings LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING); LoadString(hInstance, IDC_L_CHILD_WIN, szWindowClass, MAX_LOADSTRING); MyRegisterClass(hInstance);
LoadString(hInstance, ID_CH1, szTitle1, MAX_LOADSTRING); LoadString(hInstance, ID_CH2, szWindowClass1, MAX_LOADSTRING); MyRegisterClass1(hInstance);
// Perform application initialization: if (!InitInstance (hInstance, nCmdShow)) return FALSE;
hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_L_CHILD_WIN)); // Main message loop: while (GetMessage(&msg, NULL, 0, 0)) { if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)) { TranslateMessage(&msg); DispatchMessage(&msg); } } return (int) msg.wParam; }
ATOM MyRegisterClass(HINSTANCE hInstance) { WNDCLASSEX wcex;
wcex.cbSize = sizeof(WNDCLASSEX);
wcex.style = CS_HREDRAW | CS_VREDRAW; wcex.lpfnWndProc = WndProc; wcex.cbClsExtra = 0; wcex.cbWndExtra = 0; wcex.hInstance = hInstance; wcex.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_L_CHILD_WIN)); wcex.hCursor = LoadCursor(NULL, IDC_ARROW); wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW); wcex.lpszMenuName = MAKEINTRESOURCE(IDC_L_CHILD_WIN); wcex.lpszClassName = szWindowClass; wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));
return RegisterClassEx(&wcex); } ATOM MyRegisterClass1(HINSTANCE hInstance) { WNDCLASSEX wcex1;
wcex1.cbSize = sizeof(WNDCLASSEX);
wcex1.style = CS_HREDRAW | CS_VREDRAW; wcex1.lpfnWndProc = WndProc1; wcex1.cbClsExtra = 0; wcex1.cbWndExtra = 0; wcex1.hInstance = hInstance; wcex1.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_L_CHILD_WIN)); wcex1.hCursor = LoadCursor(NULL, IDC_ARROW); wcex1.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); wcex1.lpszMenuName = MAKEINTRESOURCE(IDC_L_CHILD_WIN); wcex1.lpszClassName = szWindowClass1; wcex1.hIconSm = LoadIcon(wcex1.hInstance, MAKEINTRESOURCE(IDI_SMALL));
return RegisterClassEx(&wcex1); }
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow) { HWND hWnd;
hInst = hInstance; // Store instance handle in our global variable
hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);
if (!hWnd){return FALSE; }
ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd);
return TRUE; }
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { int wmId, wmEvent; PAINTSTRUCT ps; HDC hdc;
switch (message) { case WM_CREATE: hWndChild=CreateWindow(szWindowClass1,L"ChildWClass",WS_CHILD |WS_THICKFRAME|WS_CAPTION |WS_MAXIMIZEBOX|WS_MINIMIZEBOX|WS_VSCROLL|WS_HSCROLL|WS_VISIBLE,10,10,500,500,hWnd,NULL,hInst,NULL);/*| WS_BORDER*/ break; //return 0; case WM_COMMAND: wmId = LOWORD(wParam); wmEvent = HIWORD(wParam); // Parse the menu selections: switch (wmId) { case IDM_ABOUT: MoveWindow( hWndChild, 100,100,500,500,true); DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About); break; case IDM_EXIT: DestroyWindow(hWnd); break; default: return DefWindowProc(hWnd, message, wParam, lParam); } break; case WM_PAINT: hdc = BeginPaint(hWnd, &ps); // TODO: Add any drawing code here... EndPaint(hWnd, &ps); break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hWnd, message, wParam, lParam); } return 0; } LRESULT CALLBACK WndProc1(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { int wmId, wmEvent; switch (message) { case WM_COMMAND: wmId = LOWORD(wParam); wmEvent = HIWORD(wParam); // Parse the menu selections: switch (wmId) { case IDM_EXIT: DestroyWindow(hWnd); break; default: return DefWindowProc(hWnd, message, wParam, lParam); } break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hWnd, message, wParam, lParam); } return 0; } // Message handler for about box. INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { UNREFERENCED_PARAMETER(lParam); switch (message) { case WM_INITDIALOG: return (INT_PTR)TRUE;
case WM_COMMAND: if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL) { EndDialog(hDlg, LOWORD(wParam)); return (INT_PTR)TRUE; } break; } return (INT_PTR)FALSE; }
|
Добавлено через 11 минут и 50 секундДа, забыл: в VS2005.
|