Форум программистов, компьютерный форум, киберфорум
C++: WinAPI
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
art44
1

Функция CreateWindow не создает дочернее окно

24.09.2011, 17:56. Просмотров 1720. Ответов 3
Метки нет (Все метки)

Приветствую! Застрял с довольно идиотской проблемой. Необходимо создать приложение с дочерним окошком средствами WinApi. Я создал win32 приложение, а затем добавил туда код по регистрации и отрисовки дочернего окна. Однако функция CreateWindow не создает окошко.(специально добавил меседжбокс для проверки). Подскажите в чем дело.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
#include "stdafx.h"
#include "1.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 szChildTitle[] = L"233";                  // The title bar text
TCHAR szChildClass[] = L"657";          // the main window class name
 
// 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    ChildWndProc(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_MY1, szWindowClass, MAX_LOADSTRING);
    MyRegisterClass(hInstance);
 
    // Perform application initialization:
    if (!InitInstance (hInstance, nCmdShow))
    {
        return FALSE;
    }
 
    hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_MY1));
 
    
    // 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_MY1));
    wcex.hCursor        = LoadCursor(NULL, IDC_ARROW);
    wcex.hbrBackground  = (HBRUSH)(COLOR_WINDOW+1);
    wcex.lpszMenuName   = MAKEINTRESOURCE(IDC_MY1);
    wcex.lpszClassName  = szWindowClass;
    wcex.hIconSm        = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));
 
    return RegisterClassEx(&wcex);
}
ATOM MyRegisterClass1(HINSTANCE hInstance)
{
 
    WNDCLASS wcex2;
 
    memset(&wcex2, 0, sizeof(wcex2));
 
    wcex2.style         = CS_HREDRAW | CS_VREDRAW;
    wcex2.lpfnWndProc   = ChildWndProc;
    wcex2.cbClsExtra        = 0;
    wcex2.cbWndExtra        = 0;
    wcex2.hInstance     = hInstance;
    wcex2.hIcon         = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_MY1));
    wcex2.hCursor       = LoadCursor(NULL, IDC_ARROW);
    wcex2.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
    wcex2.lpszMenuName  = NULL;
    wcex2.lpszClassName = szChildClass;
    //wcex2.hIconSm     = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));
 
    return RegisterClass(&wcex2);
}
 
 
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
   HWND hWnd, hChildWnd;
 
   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);
 
   hChildWnd = CreateWindow(szChildClass, szChildTitle, WS_CHILDWINDOW,
      CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, hWnd, NULL, hInstance, NULL);
 
   if(!hChildWnd) {MessageBox(hChildWnd,L"Ошибка",L"Ошибка",MB_OK);}
 
   ShowWindow(hChildWnd, SW_SHOW);
   UpdateWindow(hChildWnd);
 
 
   return TRUE;
}
 
 
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    int wmId, wmEvent;
    PAINTSTRUCT ps;
    HDC hdc;
 
    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_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 ChildWndProc(HWND hChildWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch(message)
    {
    //case WM_CREATE:{MessageBox(hChildWnd,"ОШИБКА"); 
    };
    return 0;
}
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.09.2011, 17:56
Ответы с готовыми решениями:

Дочернее окно копируется в не дочернее(хотя не должно)
При нажатии кнопки появляется окно, но вместо того, что бы отрисоваться как надо, в него копируется...

Закрыть дочернее окно и открыть в единственном экземпляре Главное окно
Есть главная форма Main Form , там кнопка Button 1 при нажатии на Button 1 открывыется дочерняя...

Не создается окно CreateWindow
#include <windows.h> #include <stdlib.h> LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);...

Создать модальное окно (дочернее окно) как в одноклассниках
Здраствуйте всем, Нужна помощь. Я хочу создать модальное окно (дочерное окно) в ASP.NET на примере...

3
2818 / 1628 / 252
Регистрация: 03.12.2007
Сообщений: 4,223
24.09.2011, 20:04 2
А GetLastError зачем придумали?
0
237 / 210 / 84
Регистрация: 18.03.2010
Сообщений: 750
24.09.2011, 21:24 3
art44,
1. при создании дочернего окна не хватает стиля WS_VISIBLE
2. все координаты позиции дочернего окна равны 0
0
2818 / 1628 / 252
Регистрация: 03.12.2007
Сообщений: 4,223
25.09.2011, 12:33 4
Цитата Сообщение от jonson Посмотреть сообщение
1. при создании дочернего окна не хватает стиля WS_VISIBLE
2. все координаты позиции дочернего окна равны 0
1. Там дальше ShowWindow.
2. Там координаты CW_USEDEFAULT.
Так что это ни при чём.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.09.2011, 12:33

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Создать дочернее окно из программы (окно внутри окна)
Люди, помогите плиз!!!!!!!!!!!!! Подскажите, как в Lazaruse создать дочернее окно из программы...

Как закрыть или скрыть основное окно и открыть дочернее, и как потом закрыть дочернее окно и открыть основное
Здравствуйте, передо мной возникла проблема, с которой я не могу справиться. Суть проблемы в том,...

Не создается окно функцией CreateWindow
Выводит сообщение Cannot create window. Компилятор: VS 2015 Community. Вызывает интерес то, что...

Ошибка в CreateWindow: окно не появляется
В коде ошибка - определить какая не могу, но прога компилируется запускается а вот симтом это то...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.