Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> отсутствуют кнопки в дочернем окне 
:(
    Опции темы
Andrej23
Дата 8.6.2012, 15:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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.
PM MAIL   Вверх
Andrej23
Дата 8.6.2012, 16:04 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 49
Регистрация: 3.11.2006

Репутация: нет
Всего: нет



Нашел на одном из форумов. Флаг WS_SYSMENU
И показывает кнопки и добавляет "крестик". А я-то думал что он менюшку на дочернее окно добавляет.

Так бы ни за что не догадался (то, что меню "в области заголовка" я благополучно пропустил).

Вопрос снимаю.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0785 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.