0 / 0 / 1
Регистрация: 11.04.2010
Сообщений: 34
1

Дочернее окно не перемещается

27.04.2010, 19:59. Показов 2124. Ответов 18
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
При выборе определённого пункта меню, должно быть создано новое дочернее окно. Окно открывается, но не перемещается.
Код:
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
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
#include "stdafx.h"
#include <commdlg.h>
#include <windows.h>
#include <stdio.h>
#include <iostream>
#include "test.h"
#include <commctrl.h>
#include <winuser.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
 
// Forward declarations of functions included in this code module:
ATOM                MyRegisterClass(HINSTANCE hInstance);
BOOL                InitInstance(HINSTANCE, int);
LRESULT CALLBACK    WndProc(HWND, UINT, WPARAM, LPARAM);
INT_PTR CALLBACK    About(HWND, UINT, WPARAM, LPARAM);
INT_PTR CALLBACK    About1(HWND, UINT, WPARAM, LPARAM);
 
 
char filename[MAX_PATH]="";
 
OPENFILENAME ofn;
static char szFile[260];                   //открыть файл
static HANDLE hf;
HFONT fn1;
HWND hEdit;
HWND hStatusWindow;
HWND hChildWnd;                         //дочернее окно
 
 
void RegisterCommonControls();                  //необходимо для кнопки IP адреса
 
#pragma comment(lib, "comctl32.lib")
 
void RegisterCommonControls()
{
  INITCOMMONCONTROLSEX iccex;
 
  iccex.dwSize = sizeof(INITCOMMONCONTROLSEX); 
  iccex.dwICC  = ICC_TREEVIEW_CLASSES  // tree view and tooltip control classes
                  | ICC_LISTVIEW_CLASSES; // list view and header control classes
                           // see INITCOMMONCONTROLSEX in MSDN for a complete list
  InitCommonControlsEx(&iccex);
}
 
int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPTSTR    lpCmdLine,
                     int       nCmdShow)
{
    InitCommonControls();
    UNREFERENCED_PARAMETER(hPrevInstance);
    UNREFERENCED_PARAMETER(lpCmdLine);
 
    // TODO: Place code here.
 
    MSG msg;
    HACCEL hAccelTable;
    RegisterCommonControls();
 
    // Initialize global strings
    LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
    LoadString(hInstance, IDC_KOHONENMAPS, szWindowClass, MAX_LOADSTRING);
    MyRegisterClass(hInstance);
    
        // Perform application initialization:
    if (!InitInstance (hInstance, nCmdShow))
    {
        return FALSE;
    }
 
    hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_KOHONENMAPS));
 
    // Main message loop:
    while (GetMessage(&msg, NULL, 0, 0))
    {
        if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
        {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
    }
    return (int) msg.wParam;
}
 
//
//  FUNCTION: MyRegisterClass()
//
//  PURPOSE: Registers the window class.
//
//  COMMENTS:
//
//    This function and its usage are only necessary if you want this code
//    to be compatible with Win32 systems prior to the 'RegisterClassEx'
//    function that was added to Windows 95. It is important to call this function
//    so that the application will get 'well formed' small icons associated
//    with it.
//
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_KOHONENMAPS));
    wcex.hCursor        = LoadCursor(NULL, IDC_ARROW);
    wcex.hbrBackground  = (HBRUSH)(COLOR_WINDOW+1);
    wcex.lpszMenuName   = MAKEINTRESOURCE(IDC_KOHONENMAPS);
    wcex.lpszClassName  = szWindowClass;
    wcex.hIconSm        = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));
 
    return RegisterClassEx(&wcex);
}
 
//
//   FUNCTION: InitInstance(HINSTANCE, int)
//
//   PURPOSE: Saves instance handle and creates main window
//
//   COMMENTS:
//
//        In this function, we save the instance handle in a global variable and
//        create and display the main program window.
//
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);
 
//=====================================================
    ZeroMemory(&ofn, sizeof(ofn));
    ofn.lStructSize = sizeof(ofn);
    ofn.hwndOwner = hWnd;
    ofn.lpstrFile = szFile;
    ofn.lpstrFile[0] = '\0';
    ofn.nMaxFile = MAX_PATH;
    ofn.lpstrFilter = "Текстовые файлы \0*.txt\0 Все файлы\0*.*\0\0";
    ofn.nFilterIndex = 1;
    ofn.lpstrFileTitle = NULL;
    ofn.nMaxFileTitle = 0;
    ofn.lpstrInitialDir = NULL;
    ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;
//=================================================
 
   return TRUE;
}
//
//  FUNCTION: WndProc(HWND, UINT, WPARAM, LPARAM)
//
//  PURPOSE:  Processes messages for the main window.
//
//  WM_COMMAND  - process the application menu
//  WM_PAINT    - Paint the main window
//  WM_DESTROY  - post a quit message and return
//
//
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    int wmId, wmEvent;
    int pri;
    
    static HWND hButton = NULL;
    
    static HWND hwndStatusBar;
    static HINSTANCE hInstance;
 
    char* buf;
    int len;
    DWORD len1;
    
    static POINTS m;
    PAINTSTRUCT ps;
    HDC hdc;
 
    switch (message)
    {
            
        case WM_CREATE:
        {
            RECT rcClient;
            ::GetClientRect(hWnd,&rcClient);
            hEdit=CreateWindow("EDIT",NULL,WS_CHILD | WS_VISIBLE | WS_VSCROLL | 
                ES_LEFT | ES_MULTILINE | ES_AUTOVSCROLL, 0, 0, 0, 0,  
                hWnd,(HMENU) IDC_EDIT11, (HINSTANCE)::GetModuleHandle(NULL), NULL); 
                       ::SendMessage(hEdit,WM_SETFONT,WPARAM(fn1),TRUE);         
            ::SendMessage(hEdit,EM_SETLIMITTEXT,WPARAM(-1),0);
 
            InitCommonControls ();
            hStatusWindow=CreateStatusWindow(WS_CHILD|WS_VISIBLE|SBARS_SIZEGRIP,"text",hWnd,100);
            int widths[5]={100,150,200,-1};
            SendDlgItemMessage(hWnd,100,SB_SETPARTS,4,(LPARAM)widths);
            SendDlgItemMessage(hWnd,100,SB_SETTEXT,2,(LPARAM)"part 2");
            SendDlgItemMessage(hWnd,100,SB_SETTEXT,3,(LPARAM)"last part");
        break;
        }
 
         case WM_SIZE:
        {
            MoveWindow(hEdit,0, 0,LOWORD(lParam),HIWORD(lParam),TRUE);
            SendMessage(hStatusWindow, WM_SIZE, wParam, lParam);
            return 0;
        }
        
        case WM_COMMAND:
        wmId    = LOWORD(wParam);
        wmEvent = HIWORD(wParam);
 
        // Parse the menu selections:
        switch (wmId)
        {
        case IDM_ABOUT:
            DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
            break;
        case IDM_INPUT2:
            case IDM_INPUT4:
                if (GetOpenFileName(&ofn)==TRUE) 
                {
                    hf=CreateFile(ofn.lpstrFile,GENERIC_READ,FILE_READ_DATA,NULL,OPEN_EXISTING,0,0);
                    if (hf==INVALID_HANDLE_VALUE) 
                    {
                        MessageBox(hWnd,"Open failed","Error",MB_ICONHAND|MB_OK);
                        break;
                    }
                    len=GetFileSize(hf,NULL);
                    buf=(char*)malloc(len+1); /* доп. байт под символ-терминатор (0) */
                        if (!buf) 
                        {
                            MessageBox(hWnd,"Mem alloc failed","Error",MB_ICONHAND|MB_OK);
                            break;
                        }
                    ReadFile(hf,buf,len,&len1,NULL);
                    buf[len1]=0;
                    CloseHandle(hf);
                    SetDlgItemText(hWnd,IDC_EDIT11,buf);
                    free(buf);
                }
                InitCommonControls ();
                hwndStatusBar = CreateStatusWindow (WS_CHILD |
                WS_VISIBLE, "Открыт файл", hWnd, IDC_STATUS_BAR);   //создан статус бар после открытия файла
 
            break; 
 
            case IDM_SAVEAS:        /* команда меню "Save As" */
                ofn.lStructSize=OPENFILENAME_SIZE_VERSION_400A;
                ofn.hwndOwner=hWnd;
                ofn.lpstrFilter="Текстовые файлы \0*.txt\0 Все файлы\0*.*\0\0";
                ofn.lpstrCustomFilter=NULL; 
                ofn.nMaxCustFilter=0;
                ofn.nFilterIndex=1;
                ofn.lpstrFile=filename; 
                ofn.nMaxFile=MAX_PATH;
                ofn.lpstrFileTitle=NULL; 
                ofn.nMaxFileTitle=0;
                ofn.lpstrInitialDir=NULL;
                ofn.Flags=OFN_PATHMUSTEXIST|OFN_OVERWRITEPROMPT|OFN_HIDEREADONLY;
            if (!GetSaveFileName(&ofn)) break;
            case IDM_SAVE:          /* команда меню "Save" */
        /* для нового файла - вызываем диалог "Save As" */
            if (lstrlen(filename)==0) 
            {
                PostMessage(hWnd,WM_COMMAND,IDC_SAVEAS,lParam);
                break;
            }
            SetDlgItemText(hWnd,ID_STATUS,filename);
     /* сохраняем файл */
            hf=CreateFile(filename,GENERIC_WRITE,0,NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
            if (hf==INVALID_HANDLE_VALUE) 
            {
                MessageBox(hWnd,"Save failed","Error",MB_ICONHAND|MB_OK);
                break;
            }
            len=SendDlgItemMessage(hWnd,IDC_EDIT11,WM_GETTEXTLENGTH,0,0);
            buf=(char*)malloc(len+1); /* доп. байт под символ-терминатор (0) */
            GetDlgItemText(hWnd,IDC_EDIT11,buf,len+1);
            if (!buf) 
            {
                MessageBox(hWnd,"Mem alloc failed","Error",MB_ICONHAND|MB_OK);
                break;
            }
             WriteFile(hf,buf,len,&len1,NULL);
            CloseHandle(hf);
            free(buf);
            break;
                    
            case IDM_INPUT1:
                DialogBox(hInst, MAKEINTRESOURCE(IDD_DIALOG1), hWnd, About);
                break;
            case IDM_INPUT3:
                DialogBox(hInst, MAKEINTRESOURCE(IDD_DIALOG3), hWnd, CELL);
                break;
            case IDM_INPUT5:
                DialogBox(hInst, MAKEINTRESOURCE(IDD_PARAM), hWnd, About1);
                break;
            case IDM_RUN:
                hChildWnd =CreateWindow (TEXT("STATIC"), NULL,  WS_OVERLAPPEDWINDOW| WS_VISIBLE | WS_BORDER,
                        10, 10, 600, 600, hEdit, NULL, hInstance, NULL);//дочернее окно
                    break;
            case IDM_EXIT:
/*-------------------------*/
pri=MessageBox(NULL,"Завершить работу?","Выход",MB_OKCANCEL);
if (pri==MB_OKCANCEL)
{
    PostQuitMessage(0);
    break;
}
else break;
            /*-------------*/
/*
            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_LBUTTONDOWN:
            {
                SetCapture (hChildWnd);
                SendMessage (hChildWnd, WM_SYSCOMMAND, SC_MOVE,0);
                break;
            }
        case WM_LBUTTONUP:
            {
                ReleaseCapture();
                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)
            {
                GetDlgItemText(hDlg,IDC_IPADDRESS1,chBuffer,sizeof(chBuffer));
                GetDlgItemText(hDlg,IDC_EDIT4,grida,30);
                GetDlgItemText(hDlg,IDC_EDIT5,cell,30);
            
                EndDialog(hDlg, LOWORD(wParam));
                return (INT_PTR)TRUE;
}
else            
if (LOWORD(wParam) == IDCANCEL) 
            {
                EndDialog(hDlg, LOWORD(wParam));
                return (INT_PTR)TRUE;
            }
}
    return (INT_PTR)FALSE;
}
Проблема даже не в том, что оно не перемещается... почему-то программа не обрабатывает действия мышки. В чём может быть проблема?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.04.2010, 19:59
Ответы с готовыми решениями:

Дочернее окно
скажите, как создать дочернее окно с помощью WinAPI, чтобы внешне оно не отличалось от...

Дочернее окно (MFC / C++)
Прощу помощи, перерыл весь интернет в поисках проблемы. Есть задание: &quot;В созданном основном...

Дочернее окно внутри родительского
Доброго времяни суток! Помогите полиз с программой! Хочется сделать так, чтобы при нажатии кнопки...

Как программно развернуть дочернее окно
В приложении закрываю дочернее окно (оно сворачивается) как его программно развернуть, назначить на...

18
2343 / 499 / 22
Регистрация: 01.04.2009
Сообщений: 2,200
28.04.2010, 10:33 2
Цитата Сообщение от rtr Посмотреть сообщение
Проблема даже не в том, что оно не перемещается... почему-то программа не обрабатывает действия мышки. В чём может быть проблема?
так...
ты делаешь окно типа "STATIC", дочернее для "EDIT", развернутого на все основное окно...
и хочешь, чтобы это окно типа "STATIC" обрабатывало сообщения от системного меню?
да нет у этого типа окон системного меню.

DefWindowProc окна класса "STATIC" закономерно игнорирует сообщения группы WM_SYSCOMMAND.
точно не помню, но и WM_MOVE он, кажется, тоже игнорирует.
0
0 / 0 / 1
Регистрация: 11.04.2010
Сообщений: 34
18.05.2010, 16:25  [ТС] 3
Цитата Сообщение от Patch Посмотреть сообщение
так...
ты делаешь окно типа "STATIC", дочернее для "EDIT", развернутого на все основное окно...
и хочешь, чтобы это окно типа "STATIC" обрабатывало сообщения от системного меню?
да нет у этого типа окон системного меню.

DefWindowProc окна класса "STATIC" закономерно игнорирует сообщения группы WM_SYSCOMMAND.
точно не помню, но и WM_MOVE он, кажется, тоже игнорирует.
а как нужно сделать?
0
2343 / 499 / 22
Регистрация: 01.04.2009
Сообщений: 2,200
18.05.2010, 18:49 4
Цитата Сообщение от rtr Посмотреть сообщение
а как нужно сделать?
поставить точки останова и самому отладить программу.

в этой мешанине, да еще и без четкого описания проблемы, никто разбираться не будет.
0
0 / 0 / 1
Регистрация: 11.04.2010
Сообщений: 34
01.06.2010, 02:26  [ТС] 5
Проблема, насколько я понимаю вот здесь

C++
1
2
3
4
5
hEdit=CreateWindow("EDIT",NULL,WS_CHILD | WS_VISIBLE | WS_VSCROLL | 
                ES_LEFT | ES_MULTILINE | ES_AUTOVSCROLL, 0, 0, 0, 0,  
                hWnd,(HMENU) IDC_EDIT11, (HINSTANCE)::GetModuleHandle(NULL), NULL); 
hChildWnd =CreateWindow (TEXT("STATIC"), NULL,  WS_OVERLAPPEDWINDOW| WS_VISIBLE | WS_BORDER,
                                                10, 10, 600, 600, hEdit, NULL, hInstance, NULL);//дочернее окно
Я по всей видимости неправильно создаю окно дочернее. вместо TEXT("STATIC") должно быть что-то другое?
0
2343 / 499 / 22
Регистрация: 01.04.2009
Сообщений: 2,200
01.06.2010, 07:08 6
Цитата Сообщение от rtr Посмотреть сообщение
Я по всей видимости неправильно создаю окно дочернее.
А откуда мы можем знать?
Ты-же не написал, что ты хотел получить.
Что за программу ты вообще пишешь.
И какой обработки мыши тебе не хватает.

Комментариев в программе - тоже ноль-повдоль.
Вот и поди разберись, что ты там делаешь, и зачем.

Как в анекдоте:
Приходит ученик токаря к мастеру и говорит, мол посмотрите, у меня там не получается.
Приходит мастер, смотрит на то, что ученик делал и выдает:
- Отличная ху*ня!
- Но я хотел сделать дверную ручку...
- А где у тебя чертеж с названием, %?"№*!!!
0
0 / 0 / 1
Регистрация: 11.04.2010
Сообщений: 34
01.06.2010, 18:49  [ТС] 7
Цитата Сообщение от Patch Посмотреть сообщение
А откуда мы можем знать?
Ты-же не написал, что ты хотел получить.
Что за программу ты вообще пишешь.
И какой обработки мыши тебе не хватает.
Комментариев в программе - тоже ноль-повдоль.
Вот и поди разберись, что ты там делаешь, и зачем.
я делаю следующее:
Цитата Сообщение от Patch Посмотреть сообщение
ты делаешь окно типа "STATIC", дочернее для "EDIT", развернутого на все основное окно...
которое открывается при выборе пункта(IDM_RUN из меню

при вышеописанном коде окно появляется, но не перемещается...

я так понял проблема из-за TEXT("STATIC") в CreateWindow.. как это исправить можно?
0
2343 / 499 / 22
Регистрация: 01.04.2009
Сообщений: 2,200
02.06.2010, 08:43 8
Цитата Сообщение от rtr Посмотреть сообщение
я так понял проблема из-за TEXT("STATIC") в CreateWindow.. как это исправить можно?
ладно, спрошу по другому: а куда и почему это окно должно перемещаться?
задача никак не описана.
ты мне моего ребенка напоминаешь - тот то-же выложет что нибудь из мозаики, придет показывать, а ты попробуй догадайся, что он хотел там изобразить.
то ли это была машинка, то ли рыбка, то ли просто абстрактная живопись...
0
0 / 0 / 1
Регистрация: 11.04.2010
Сообщений: 34
02.06.2010, 10:24  [ТС] 9
Цитата Сообщение от Patch Посмотреть сообщение
ладно, спрошу по другому: а куда и почему это окно должно перемещаться?
задача никак не описана.
просто перемещаться мышкой, например
0
2343 / 499 / 22
Регистрация: 01.04.2009
Сообщений: 2,200
02.06.2010, 16:53 10
Цитата Сообщение от rtr Посмотреть сообщение
просто перемещаться мышкой, например
ну, напиши вместо "STATIC" "EDIT"

И еще немного о птичках - так, для общего развития.
нет такого понятия "просто перемещаться".
для перемещения конкретно мышкой, окно должно обрабатывать это перемещение мышки - "делать Track".
в стандартом окне автоматический track встроен в обработку кликов на заголовке окна.
т.е., если у окна нет заголовка, автоматического таскания мышкой не получится.
а заголовка у окон типа элементов диалога: "Button", "Edit", "Static" и пр. - нет по определению.

кроме того, обычно, сообщения track мышки при перемещении в клиентской части родительского окна отслеживается самим родительским окном.
т.е. решение о перемещении, или не перемещении окна принимает даже не само окно, а его окно-родитель.
для этого, родитель отслеживает сообщения WM_PARENT_NOTIFY и WM_NOTIFY

кроме того, элементы диалога по-умолчанию создаются с флагом WS_EX_NOPARENTNOTIFY, и сообщение родительскому окну не посылают.
обойти это можно лишь создав элемент диалога функцией CreateWindowEx(), соответственно, принудительно убрав этот флаг.
кроме того, некоторые типы элементов диалога, как например "STATIC", вообще не обрабатывают нажатий мышки, и, соответственно, перемещаться стандартными операциями с любыми флагами не могут.
0
0 / 0 / 1
Регистрация: 11.04.2010
Сообщений: 34
02.06.2010, 20:29  [ТС] 11
Цитата Сообщение от Patch Посмотреть сообщение
ну, напиши вместо "STATIC" "EDIT"
т.е. мне надо создать окно EDIT1 через CreateWindowEx()? для которого окно EDIT будет родительским?
0
2343 / 499 / 22
Регистрация: 01.04.2009
Сообщений: 2,200
02.06.2010, 23:24 12
Цитата Сообщение от rtr Посмотреть сообщение
т.е. мне надо создать окно EDIT1 через CreateWindowEx()? для которого окно EDIT будет родительским?
нет, можно просто "EDIT".
Если ты его делаешь со стилем WS_OVERLAPPEDWINDOW, то оно замечательно будет передвигаться по всему экрану.
0
0 / 0 / 1
Регистрация: 11.04.2010
Сообщений: 34
03.06.2010, 01:55  [ТС] 13
Цитата Сообщение от Patch Посмотреть сообщение
нет, можно просто "EDIT".
Если ты его делаешь со стилем WS_OVERLAPPEDWINDOW, то оно замечательно будет передвигаться по всему экрану.
Я так понимаю, что это новое окно наследует те же свойства, что и окно Edit?

Добавлено через 2 часа 18 минут
точнее вопрос в том, как избавить это окно от свойств EDIT

в WM_CREATE создаю новое окно, но в пункте меню оно даже не открывается
0
2343 / 499 / 22
Регистрация: 01.04.2009
Сообщений: 2,200
03.06.2010, 12:21 14
Цитата Сообщение от rtr Посмотреть сообщение
Я так понимаю, что это новое окно наследует те же свойства, что и окно Edit?
Да. Свойства стандартного поля ввода диалога.
Цитата Сообщение от rtr Посмотреть сообщение
точнее вопрос в том, как избавить это окно от свойств EDIT
Не понял.
А какие у него должны быть свойства?
Опять вопрос к ХРЕНОВОМУ ОПИСАНИЮ ЗАДАЧИ.

Пойми, пока ты не сможешь внятно, на нормальном русском языке, сформулировать, что ты хочешь получить в итоге - никакой программы ты не напишешь.
0
0 / 0 / 1
Регистрация: 11.04.2010
Сообщений: 34
03.06.2010, 13:51  [ТС] 15
Цитата Сообщение от Patch Посмотреть сообщение
Не понял.
А какие у него должны быть свойства?
В начале программы создаётся дефолотное окно

C++
1
2
hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
     CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);
В моей программе для открытия файла создаётся такое окно

C++
1
2
3
hEdit=CreateWindow("EDIT",NULL,WS_CHILD | WS_VISIBLE | WS_VSCROLL | 
                ES_LEFT | ES_MULTILINE | ES_AUTOVSCROLL, 0, 0, 0, 0,  
                hWnd,(HMENU) IDC_EDIT11, (HINSTANCE)::GetModuleHandle(NULL), NULL);
При нажатии пункта меню должно открыться дочернее окно. Я сделал его так:
C++
1
2
hChildWnd=CreateWindow ("Edit", NULL,  WS_OVERLAPPEDWINDOW| WS_VISIBLE | WS_BORDER,
                                                10, 10, 600, 600, hEdit, NULL, hInstance, NULL);
Всё бы хорошо, но оно не даёт рисовать (по всей видимости потому, что у hChildWnd свойства hEdit)

Каким образом можно от этих свойств hEdit избавиться? Я понимаю, что для этого необходимо описать hChildWnd . но как и где?
0
2343 / 499 / 22
Регистрация: 01.04.2009
Сообщений: 2,200
03.06.2010, 15:33 16
ёпрст!!!
слов нет...
ты бот? или просто русский язык понимаешь ограниченно?

ты можешь написать: "Я хочу сделать программу, выполняющую то-то и то-то" ??
я задолбался понимать, что ты хочешь сделать.
"В начале программы создаётся дефолотное окно" - это не описание того, что ты ХОЧЕШЬ ПОЛУЧИТЬ, это описание того что ты ДЕЛАЕШЬ.
А правильно ты это делаешь или нет - никому кроме тебя не видно, ведь нефига не понятно ЗАЧЕМ ты это дефолтное окно, и все остальное делаешь.

Цитата Сообщение от rtr Посмотреть сообщение
В моей программе для открытия файла создаётся такое окно
Вообще супер.
Зачем тебе окно для открытия файла?
Функции у этого окна какие?

Цитата Сообщение от rtr Посмотреть сообщение
При нажатии пункта меню должно открыться дочернее окно. Я сделал его так:
Опять-же, зачем тебе дочернее окно?
Цитата Сообщение от rtr Посмотреть сообщение
Всё бы хорошо, но оно не даёт рисовать (по всей видимости потому, что у hChildWnd свойства hEdit)
Правильно.
Ты графический редактор делаешь?

И все-таки, сделай над собой титаническое усилие, и попробуй описать работу программы, как ты ее видишь.
Вот тебе пример описания:
Notepad - простой текстовый редактор для создания документов или Web страниц. Позволяет открывать и сохранять страницы в текстовом формате(*.txt). Позволяет устанавливать размер шрифта, отступы абзацев...
0
0 / 0 / 1
Регистрация: 11.04.2010
Сообщений: 34
03.06.2010, 15:40  [ТС] 17
программа производит считывание файла, затем выполняются некоторые функции по итогам которой по итогам происходит отрисовка...для чтения hEdit, а для рисования создаётся новое окно
0
2343 / 499 / 22
Регистрация: 01.04.2009
Сообщений: 2,200
03.06.2010, 20:39 18
Цитата Сообщение от rtr Посмотреть сообщение
программа производит считывание файла, затем выполняются некоторые функции по итогам которой по итогам происходит отрисовка...для чтения hEdit, а для рисования создаётся новое окно
так. уже понятнее.
значит нужно сделать новое окно для вывода картинки?
или для рисования в окне мышкой?
хотя, зачем окно должно быть плавающим? хотя это уже не так важно.

проще всего зарегистрировать новый класс, и прописать в обработке WndProc нужные реакции.
0
0 / 0 / 1
Регистрация: 11.04.2010
Сообщений: 34
03.06.2010, 21:51  [ТС] 19
Цитата Сообщение от Patch Посмотреть сообщение
значит нужно сделать новое окно для вывода картинки?
да, рисуются геометрические фигуры

Цитата Сообщение от Patch Посмотреть сообщение
или для рисования в окне мышкой?
нет


Цитата Сообщение от Patch Посмотреть сообщение
зачем окно должно быть плавающим?
чтобы можно было сравнить полученную картину с тем, что было прочитано при открытии файла . Текст при открытии создаётся в hEdit.
0
03.06.2010, 21:51
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.06.2010, 21:51
Помогаю со студенческими работами здесь

Передача CStringArray в дочернее диалоговое окно
В основном окне при открытии файла считываются необходимые строки в массив CDlgSpec spis;...

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

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

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


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru