WinAPI
От: FantomCat Украина  
Дата: 12.03.03 11:44
Оценка:
Помогите мне пожалуйста! Я начинающий программитс, у меня возникла необходимость создавать дочерние окна с невидимыми границами без всяких там титлбаров, т.е. просто прямоугольничек, но имеющий свойства дочернего окна. Какие должны быть параметры при регистрации классов окон и при создании?
Re: WinAPI
От: SchweinDeBurg Россия https://zarezky.spb.ru/
Дата: 12.03.03 12:12
Оценка:
Здравствуйте, FantomCat, Вы писали:

FC>Помогите мне пожалуйста! Я начинающий программитс, у меня возникла необходимость создавать дочерние окна с невидимыми границами без всяких там титлбаров, т.е. просто прямоугольничек, но имеющий свойства дочернего окна. Какие должны быть параметры при регистрации классов окон и при создании?


При создании окон в CreateWindowEx() нужно передать в качестве стиля только WS_CHILD — и не будет ни рамок (WS_BORDER, WS_THICKFRAME), ни заголовка (WS_CAPTION). Регистрация класса тут ИМХО не при чем.
- Искренне ваш, Поросенок Пафнутий
Re[2]: WinAPI
От: FantomCat Украина  
Дата: 12.03.03 14:33
Оценка:
Здравствуйте, SchweinDeBurg, Вы писали:


SDB>При создании окон в CreateWindowEx() нужно передать в качестве стиля только WS_CHILD — и не будет ни рамок (WS_BORDER, WS_THICKFRAME), ни заголовка (WS_CAPTION). Регистрация класса тут ИМХО не при чем.

Вы знаете, это оказалось не совсем то, что мне нужно. Мне в таком окошечке нужно выводить рисуночек, а окошка совсем не видно. Если я добавляю WS_VISIBLE, то получается стандартное виндозовское окно. Помогите, пожалуйста!!!!!
Re[3]: WinAPI
От: SergH Россия  
Дата: 12.03.03 14:48
Оценка:
Здравствуйте, FantomCat, Вы писали:

FC>Вы знаете, это оказалось не совсем то, что мне нужно. Мне в таком окошечке нужно выводить рисуночек, а окошка совсем не видно. Если я добавляю WS_VISIBLE, то получается стандартное виндозовское окно. Помогите, пожалуйста!!!!!


Код покажи — помогем.
Делай что должно, и будь что будет
Re[4]: WinAPI
От: FantomCat Украина  
Дата: 12.03.03 15:14
Оценка:
Здравствуйте, SergH, Вы писали:

SH>Код покажи — помогем.

Показываю
hwndClient = CreateWindowEx(NULL,"MDICLIENT", NULL,
WS_CHILD /*|WS_VISIBLE*/, 0, 0, 25, 25,
hwnd, NULL, g_hInst, (LPVOID)&ccsClientCreate);
****************************
mdicCreate.szClass = "ChildWindowClass";
mdicCreate.szTitle = NULL;
mdicCreate.hOwner = hModule;
mdicCreate.x = mdicCreate.y = 0;
mdicCreate.cx = mdicCreate.cy = 250;
mdicCreate.style =0L;
mdicCreate.lParam = 0L;

**********************
Это окно дожно обрабатывать
case WM_PAINT:
{
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hwnd, &ps);
HPEN pen = CreatePen(PS_SOLID, 1, RGB(0, 255, 0));
HPEN old_pen=(HPEN)SelectObject(hdc, pen);
Rectangle(hdc,0, 0,200,150);
SelectObject(hdc, old_pen);
DeleteObject(pen);

EndPaint(hwnd, &ps);
return 0L;
}
А этого нигде не видно, только окно-владелец.
Re[5]: WinAPI
От: SergH Россия  
Дата: 12.03.03 15:33
Оценка:
Здравствуйте, FantomCat, Вы писали:

SH>>Код покажи — помогем.

FC>Показываю
[..]

Не уверен, что понял, что именно ты показал. Понял следующее: ты создаёшь MDICLIENT, посылаешь ему WM_MDICREATE с приведённой структурой, у него какая-то оконная процедура с приведённым WM_PAINT-ом.

Правильно? Если да, то в следующий раз так и пиши, если нет — тем более

в стилях укажи че-нибудь такое: WS_CHILD | WS_VISIBLE
если не поможет — попробуй CreateMDIWindow

Но может и это непомочь. С MDI я таких штук не пробовал.
Делай что должно, и будь что будет
Re[6]: WinAPI
От: FantomCat Украина  
Дата: 12.03.03 15:46
Оценка:
Здравствуйте, SergH, Вы писали:

SH>Здравствуйте, FantomCat, Вы писали:


SH>>>Код покажи — помогем.

FC>>Показываю
SH>[..]

SH>Не уверен, что понял, что именно ты показал. Понял следующее: ты создаёшь MDICLIENT, посылаешь ему WM_MDICREATE с приведённой структурой, у него какая-то оконная процедура с приведённым WM_PAINT-ом.


SH>Правильно? Если да, то в следующий раз так и пиши, если нет — тем более


SH>в стилях укажи че-нибудь такое: WS_CHILD | WS_VISIBLE

SH>если не поможет — попробуй CreateMDIWindow

SH>Но может и это непомочь. С MDI я таких штук не пробовал.


Ты правильно понял, но!!!! Мне надо, чтобы у этого окна не было видно границ и чтобы оно было жестко прикреплено (нельзя его передвигать)к владельцу. Т.е. я не могу сделать позрачной границу. Во как!
Re[7]: WinAPI
От: SergH Россия  
Дата: 12.03.03 15:51
Оценка:
Здравствуйте, FantomCat, Вы писали:

FC>Ты правильно понял,


Это радует

FC>но!!!! Мне надо, чтобы у этого окна не было видно границ и чтобы оно было жестко прикреплено (нельзя его передвигать)к владельцу. Т.е. я не могу сделать позрачной границу. Во как!


0. Без MDI в простом приложении пробовал? Там-то уж точно должно работать.
1. CreateMDIWindow пробовал?
2. SetWindowLong + GWL_STYLE пробовал?
Делай что должно, и будь что будет
Re[7]: WinAPI
От: Slicer [Wirkwood] Россия https://ru.linkedin.com/in/maksim-gumerov-039a701b
Дата: 12.03.03 15:52
Оценка:
Не совсем понял, на чем ты пишешь.
Попробовал у себя прогнать аналогичный по смыслу код, но вообще без перерисовки — все ок.
Вот:
var hwndclient:hwnd;
    SCreate:CREATESTRUCT;
begin
SCreate.lpszClass:= 'ChildWindowClass';
SCreate.lpszName:= 0;
SCreate.hInstance:= HInstance;
SCreate.x:= 0;
SCreate.y:= 0;
SCreate.cx:=250;
SCreate.cy:=250;
SCreate.style:=0;
SCreate.lpCreateParams:= 0;
SCreate.hMenu:=0;
SCreate.hwndParent:=self.Handle;

hwndClient:= CreateWindowEx(0,'MDICLIENT', 0,
WS_CHILD or WS_VISIBLE, 0, 0, 25, 25,
self.Handle, 0, HInstance, @SCreate);
ShowWindow(hwndclient,WS_VISIBLE);


Ну и типа окно показывает. Конечно, реально придется или субклассировать окно через SetWindowLong,
или регистрить оконный класс. Чтобы ловить перерисовку.
А так — может, забыли ShowWindow вызвать?

Slicer
Специалист — это варвар, невежество которого не всесторонне :)
Re[8]: WinAPI
От: Slicer [Wirkwood] Россия https://ru.linkedin.com/in/maksim-gumerov-039a701b
Дата: 12.03.03 15:54
Оценка:
Хотя, кому нафиг надо ShowWindow? И без него должно бы...

Ищи отличия от своего варианта.
Специалист — это варвар, невежество которого не всесторонне :)
Re[8]: WinAPI
От: FantomCat Украина  
Дата: 12.03.03 16:13
Оценка:
Здравствуйте, Slicer [Wirkwood], Вы писали:

SW>Не совсем понял, на чем ты пишешь.


Пишу на С++

SW>Попробовал у себя прогнать аналогичный по смыслу код, но вообще без перерисовки — все ок.

SW>Вот:
SW>
SW>var hwndclient:hwnd;
SW>    SCreate:CREATESTRUCT;
SW>begin
SW>SCreate.lpszClass:= 'ChildWindowClass';
SW>SCreate.lpszName:= 0;
SW>SCreate.hInstance:= HInstance;
SW>SCreate.x:= 0;
SW>SCreate.y:= 0;
SW>SCreate.cx:=250;
SW>SCreate.cy:=250;
SW>SCreate.style:=0;
SW>SCreate.lpCreateParams:= 0;
SW>SCreate.hMenu:=0;
SW>SCreate.hwndParent:=self.Handle;

SW>hwndClient:= CreateWindowEx(0,'MDICLIENT', 0,
SW>WS_CHILD or WS_VISIBLE, 0, 0, 25, 25,
SW>self.Handle, 0, HInstance, @SCreate);
SW>ShowWindow(hwndclient,WS_VISIBLE);
SW>


SW>Ну и типа окно показывает. Конечно, реально придется или субклассировать окно через SetWindowLong,

SW>или регистрить оконный класс. Чтобы ловить перерисовку.
SW>А так — может, забыли ShowWindow вызвать?

SW>Slicer


Не знаю, уже все испробовано. Не получается.Если при создании окна не задаю WS_VISIBLE, то никокие шоувиндоу не помогают — не видно этого окна, в противном случае есть границы и титлбар.

SergH
Мне нужно именно MDI-приложение
CreateWindowEx не помогает — все та же фигня
SetWindowLong + GWL_STYLE аналогично!!!

А мне позарез надо!
Re[9]: WinAPI
От: SLion  
Дата: 16.11.03 19:30
Оценка:
Здравствуйте, FantomCat, Вы писали:
...
FC>Не знаю, уже все испробовано. Не получается.Если при создании окна не задаю WS_VISIBLE, то никокие шоувиндоу не помогают — не видно этого окна, в противном случае есть границы и титлбар.

FC>SergH

FC>Мне нужно именно MDI-приложение
FC>CreateWindowEx не помогает — все та же фигня
FC>SetWindowLong + GWL_STYLE аналогично!!!

FC>А мне позарез надо!


Обязательно ли делать дочернее окно. Если нет, то в PreCreateWindow(CREATESTRUCT& cs) достаточно сделать

cs.style = WS_POPUP;

и будет окно без границ и титла. Естественно нужен CreateWindowEx.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.