Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/12: Рейтинг темы: голосов - 12, средняя оценка - 4.92
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
1

Найти дочернее окно

04.02.2011, 16:13. Показов 2223. Ответов 18
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте!

Ребята подскажите по такому вопросу! Создаю окно похожее на Balloon таким кодом

C++
1
THandle*hWndTip = (unsigned int*)CreateWindow("tooltips_class32",NULL,WS_POPUP | TTS_NOPREFIX | TTS_BALLOON,0, 0, 0, 0, hWnd, NULL, HInstance, NULL);
Так вот вопрос можно как-нить узнать хендл этого окна? FindWindow не помог.

Скриншот прилагаю
Заранее благодарю
Миниатюры
Найти дочернее окно  
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.02.2011, 16:13
Ответы с готовыми решениями:

Как найти дочернее окно из родительского
Функция не должна допускать повторного запуска дочернего окна. Если она находит уже созданное...

"Дочернее окно"
Помогите это реализовать. Буду очень благодарен. "Нажатие клавиши мыши на кнопке "Дочернее окно"...

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

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

18
LK
Заблокирован
04.02.2011, 17:05 2
С какой целью ?

Добавлено через 6 минут
HWND = Control->Handle;
0
Now I Matrix
137 / 134 / 28
Регистрация: 01.03.2010
Сообщений: 223
04.02.2011, 19:24 3
C++
1
2
3
4
5
HWND hWndTip =
CreateWindow("tooltips_class32",NULL,WS_POPUP
| TTS_NOPREFIX | TTS_BALLOON,0, 0, 0, 0, hWnd, NULL, HInstance, NULL);
if(hWndTip==NULL)exit(1); //у меня выхода не произошло, значит хендл есть!
/*но вот вылазить тултип отказался =( */
0
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
04.02.2011, 22:49  [ТС] 4
Цитата Сообщение от LK Посмотреть сообщение
С какой целью ?
С целью узнать хендл тултипа и закрыть это окно через хендл


Цитата Сообщение от Matrica Посмотреть сообщение
/*но вот вылазить тултип отказался =( */
Ну конечно он вылазить отказался я тебе не весь код выложил
0
LK
Заблокирован
05.02.2011, 00:11 5
Цитата Сообщение от Sasha Посмотреть сообщение
Ну конечно он вылазить отказался я тебе не весь код выложил
- такой большой секрет ?
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
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    RECT rcClient;
    UnicodeString str= "Some Text Some Text Some Text Some Text Some Text Some Text Some Text";
    HWND toolTip = CreateWindow( TOOLTIPS_CLASS,
    NULL,
    WS_POPUP | TTS_NOPREFIX | TTS_BALLOON,
//  CW_USEDEFAULT, CW_USEDEFAULT,
//  CW_USEDEFAULT, CW_USEDEFAULT,
//  0, NULL,
//  0, NULL);
 
    TTS_ALWAYSTIP,
    TTS_NOPREFIX,
    0, 0, 0, 0,
    NULL, toolTip); // NULL, toolTip , NULL, NULL);
 
    TOOLINFO info;
    memset(&info, 0, sizeof(TOOLINFO));
 
    info.cbSize = sizeof(TOOLINFO);
    info.uFlags = TTF_SUBCLASS|TTF_IDISHWND|TTF_PARSELINKS|TTF_TRACK; // TTF_TRACK|TTF_CENTERTIP|TTF_TRANSPARENT|TTF_SUBCLASS;
//  info.hwnd   = RichEdit1->Handle;
    info.uId    = 0; // ID_OF_CONTROL;
    info.hinst  = NULL;
    info.lpszText = str.c_str();
    ::GetClientRect(RichEdit1->Handle, &rcClient);
    //GetClientRect(main_form,&info.rect); // Error
    SendMessage(toolTip, TTM_ADDTOOL, 0, (LPARAM)&info );
    SendMessage(toolTip, TTM_SETMAXTIPWIDTH, 0, 300 );
    SendMessage(toolTip, TTM_SETTITLE, 4, (LPARAM)&info); // int - номер іконки
    SendMessage(toolTip, TTM_TRACKACTIVATE, 1, (LPARAM)&info);
    SendMessage(toolTip, TTM_GETTOOLCOUNT, 0, (LPARAM)&info);
    SendMessage(toolTip, TTM_SETTIPBKCOLOR, clRed, (LPARAM)&info);
    SendMessage(toolTip, TTF_TRANSPARENT, 0, (LPARAM)&info);
    SendMessage(toolTip, TTM_SETTIPTEXTCOLOR, clRed, (LPARAM)&info);
    SendMessage(toolTip, TTM_TRACKPOSITION, 0, (LPARAM)(DWORD) MAKELONG(100, 100));
//  SendMessage(toolTip, TTF_CENTERTIP, 1, (LPARAM)&info);
}
//---------------------------------------------------------------------------
0
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
05.02.2011, 00:40  [ТС] 6
Цитата Сообщение от LK Посмотреть сообщение
- такой большой секрет ?
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
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    RECT rcClient;
    UnicodeString str= "Some Text Some Text Some Text Some Text Some Text Some Text Some Text";
    HWND toolTip = CreateWindow( TOOLTIPS_CLASS,
    NULL,
    WS_POPUP | TTS_NOPREFIX | TTS_BALLOON,
//  CW_USEDEFAULT, CW_USEDEFAULT,
//  CW_USEDEFAULT, CW_USEDEFAULT,
//  0, NULL,
//  0, NULL);
 
    TTS_ALWAYSTIP,
    TTS_NOPREFIX,
    0, 0, 0, 0,
    NULL, toolTip); // NULL, toolTip , NULL, NULL);
 
    TOOLINFO info;
    memset(&info, 0, sizeof(TOOLINFO));
 
    info.cbSize = sizeof(TOOLINFO);
    info.uFlags = TTF_SUBCLASS|TTF_IDISHWND|TTF_PARSELINKS|TTF_TRACK; // TTF_TRACK|TTF_CENTERTIP|TTF_TRANSPARENT|TTF_SUBCLASS;
//  info.hwnd   = RichEdit1->Handle;
    info.uId    = 0; // ID_OF_CONTROL;
    info.hinst  = NULL;
    info.lpszText = str.c_str();
    ::GetClientRect(RichEdit1->Handle, &rcClient);
    //GetClientRect(main_form,&info.rect); // Error
    SendMessage(toolTip, TTM_ADDTOOL, 0, (LPARAM)&info );
    SendMessage(toolTip, TTM_SETMAXTIPWIDTH, 0, 300 );
    SendMessage(toolTip, TTM_SETTITLE, 4, (LPARAM)&info); // int - номер іконки
    SendMessage(toolTip, TTM_TRACKACTIVATE, 1, (LPARAM)&info);
    SendMessage(toolTip, TTM_GETTOOLCOUNT, 0, (LPARAM)&info);
    SendMessage(toolTip, TTM_SETTIPBKCOLOR, clRed, (LPARAM)&info);
    SendMessage(toolTip, TTF_TRANSPARENT, 0, (LPARAM)&info);
    SendMessage(toolTip, TTM_SETTIPTEXTCOLOR, clRed, (LPARAM)&info);
    SendMessage(toolTip, TTM_TRACKPOSITION, 0, (LPARAM)(DWORD) MAKELONG(100, 100));
//  SendMessage(toolTip, TTF_CENTERTIP, 1, (LPARAM)&info);
}
//---------------------------------------------------------------------------
Ты можешь подсказать, как можно сделать это окно с крестиком с правой стороны, чтобы закрыть его и поставить время, чтобы оно через определённое время закрывалось?

Заранее благодарен
0
LK
Заблокирован
05.02.2011, 05:51 7
C++
1
2
3
toolTip = CreateWindow( TOOLTIPS_CLASS,
NULL,
WS_POPUP | TTS_NOPREFIX | TTS_BALLOON | TTS_CLOSE /*кнопка закрытия*/,
0
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
07.02.2011, 00:58  [ТС] 8
Неа, крестик не появился
C++
1
hWndTip = CreateWindow(TOOLTIPS_CLASS,NULL,WS_POPUP|TTS_NOPREFIX |TTS_BALLOON|TTS_CLOSE, 0, 0, 0, 0, hWnd, NULL, HInstance, NULL);
0
LK
Заблокирован
07.02.2011, 01:06 9
ну, не знаю, может, какого SendMessage не хватает. У меня есть:
C++
1
2
3
4
5
6
7
8
9
10
11
12
hWndTip = CreateWindow( TOOLTIPS_CLASS, NULL,
//                        WS_POPUP|
                        TTS_NOPREFIX|
                        TTM_ADJUSTRECT|
                        TTS_BALLOON|
                        TTS_ALWAYSTIP|
//                        TTS_NOANIMATE|
                        CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,
                        hWnd,
                        NULL,
                        hinstance, // HInstance hinstance;
                        NULL);
0
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
07.02.2011, 01:22  [ТС] 10
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
TForm1 *Form1;
TOOLINFO  ti = {0};
HWND hWndTip = NULL;
bool vis = false;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
 
 
//---------------------------------------------------------------------------
void __fastcall TForm1::CreateBalloonTip(TWinControl* Control,int Icon, char* Title,char* Text, TColor BackCL, TColor TextCL)
{
  HWND hWnd = Control->Handle;
  hWndTip = CreateWindow(TOOLTIPS_CLASS,NULL,WS_POPUP|TTS_NOPREFIX |TTS_BALLOON|TTS_CLOSE, 0, 0, 0, 0, hWnd, NULL, HInstance, NULL);
  //hWndTip = CreateWindow( TOOLTIPS_CLASS,NULL,WS_POPUP | TTS_NOPREFIX | TTS_BALLOON|TTS_CLOSE,TTS_ALWAYSTIP,TTS_NOPREFIX,0, 0, 0, 0,NULL, hWndTip);
  //  hWndTip = CreateWindow(TOOLTIPS_CLASS,NULL,TTS_NOPREFIX|TTM_ADJUSTRECT|TTS_BALLOON|TTS_ALWAYSTIP,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,hWnd,NULL,HInstance,NULL);
 
  if (hWndTip != 0)
      {
 
           ti.cbSize = sizeof(ti);
           ti.uFlags = NIF_INFO|TTF_TRANSPARENT | TTF_TRACK;
           ti.hwnd = hWnd;
           ti.uId = 0;
           ti.hinst = HInstance;
           ti.lpszText = Text;
 
            ::GetClientRect(hWnd, &ti.rect);
            SendMessage(hWndTip, TTM_ADDTOOL, 0, (LPARAM) &ti );
            SendMessage(hWndTip, TTM_SETTITLE, Icon % 4, (int)Title);
            SendMessage(hWndTip, TTM_SETTIPBKCOLOR, BackCL, 0);
            SendMessage(hWndTip, TTM_SETTIPTEXTCOLOR, TextCL, 0);
 
     }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ShowToolTip(bool show,TControl* Control)
{
   SendMessage(hWndTip, TTM_TRACKACTIVATE, show, (LPARAM) &ti );
 
  if(show)
  {
    TPoint tp = ClientToScreen(TPoint(Control->Left,Control->Top+Control->Height-2));
    SendMessage(hWndTip, TTM_TRACKPOSITION, 0, (LPARAM)MAKELPARAM(tp.x,tp.y));
    vis = true;
  }
 
}
//------------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
   if(vis==false)
    {
     CreateBalloonTip(Edit1, 2, "Îïîâåùåíèå", "Ïðèâåò", 0xFFFFFF, 0);
     ShowToolTip(true, Edit1);//Ïîêàæåò îêíî âîçëå Edit1
    }
}
 
void __fastcall TForm1::Edit1Click(TObject *Sender)
{
 ShowToolTip(false,NULL);
 vis = false;
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Edit1Change(TObject *Sender)
{
 ShowToolTip(false,NULL);
 vis = false;
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::FormCreate(TObject *Sender)
{
 Timer1->Enabled = false;
 Timer1->Interval = 5000;
}
//---------------------------------------------------------------------------
Добавлено через 1 минуту
У меня вот такой код, но крестик не появляется.

Что скажешь?
0
LK
Заблокирован
07.02.2011, 01:32 11
ну, не знаю, можно попробовать перебрат отсутствующее, кто его знает, что за что отвечает
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
SendMessage(hwnndTT, TTM_ADDTOOL, 0, (LPARAM)&info );
SendMessage(hwnndTT, TTM_SETMAXTIPWIDTH, 0, 200 );
SendMessage(hwnndTT, TTM_SETTITLE, 4, (LPARAM)&info);
SendMessage(hwnndTT, TTM_TRACKACTIVATE, 1, (LPARAM)&info);
SendMessage(hwnndTT, TTM_GETTOOLCOUNT, 0, (LPARAM)&info);
SendMessage(hwnndTT, TTM_SETTIPBKCOLOR, clRed, (LPARAM)&info);
SendMessage(hwnndTT, TTF_TRANSPARENT, 0, (LPARAM)&info);
SendMessage(hwnndTT, TTM_SETTIPTEXTCOLOR, clRed, (LPARAM)&info);
//  SendMessage(hwnndTT, TTN_NEEDTEXT, 0, (LPARAM)&info);
/* TTM_TRACKPOSITION - If we want the tip to point to a specific point,
  we will have to send a message to the tip window alerting it of the desired position: */
// Сообщение TTM_TRACKPOSITION задаёт координаты всплывающей подсказки
//  ::GetClientRect(Button4->Handle, &info.rect);  // Не працює - прозору выкно
//GetClientRect(main_form,&info.rect); // Error
SendMessage(hwnndTT,TTM_TRACKPOSITION,0,(LPARAM)(DWORD)MAKELONG(500,500)); // Left,Top
// TTM_TRACKACTIVATE - Сообщение о активизации всплывающей подсказки,
// где true параметр указывающий на отображение подсказки
// при выборе false, подсказка будет скрыта.
SendMessage(hwnndTT, TTM_TRACKACTIVATE, true, (LPARAM)(LPTOOLINFO) &info);
/*  The TTF_CENTERTIP flag given to uFlags specifies that we want
  our ballon to have its dialog arrow in the center of the balloon,
  as opposed to one of the sides. */
SendMessage(hwnndTT, TTF_CENTERTIP, 0, (LPARAM)&info);
SendMessage(hwnndTT, TTN_NEEDTEXT, 0, (LPARAM)&info);
SendMessage(hwnndTT, TTM_SETTIPBKCOLOR, BackCL, 0); // колір тла
SendMessage(hwnndTT, TTM_SETTIPTEXTCOLOR, TextCL, 0); // колір тексту
SendMessage(hwnndTT, TTM_SETTITLE, /*Icon mod*/ 4, (int)Title); // Заголовок ? Icon mod 4
// Specify the tooltip text to be shown
SendMessage(hwnndTT, TTN_NEEDTEXT, 0, (LPARAM)&info);
//  SendMessage(hwnndTT, TTM_TRACKACTIVATE, false, (LPARAM)(LPTOOLINFO) &info);
Добавлено через 2 минуты
Что скажешь?
- чичас, только проектик соорудю ...
0
LK
Заблокирован
07.02.2011, 02:07 12
тупо скопировал код - да есть же крестик, и даже работает :
шо это за иероглифы вместо заголовка ?
Миниатюры
Найти дочернее окно  
0
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
07.02.2011, 02:12  [ТС] 13
Выложи код?
0
LK
Заблокирован
07.02.2011, 02:17 14
да там все твое, кроме текста
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
#pragma resource "*.dfm"
TForm1 *Form1;
TOOLINFO  ti = {0};
HWND hWndTip = NULL;
bool vis = false;
UnicodeString Text = "LALALALALALA";
 
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
  : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::CreateBalloonTip(TWinControl* Control,int Icon, char* Title,char* Text, TColor BackCL, TColor TextCL)
{
  HWND hWnd = Control->Handle;
  hWndTip = CreateWindow(TOOLTIPS_CLASS,NULL,WS_POPUP|TTS_NOPREFIX |TTS_BALLOON|TTS_CLOSE, 0, 0, 0, 0, hWnd, NULL, HInstance, NULL);
  //hWndTip = CreateWindow( TOOLTIPS_CLASS,NULL,WS_POPUP | TTS_NOPREFIX | TTS_BALLOON|TTS_CLOSE,TTS_ALWAYSTIP,TTS_NOPREFIX,0, 0, 0, 0,NULL, hWndTip);
  //  hWndTip = CreateWindow(TOOLTIPS_CLASS,NULL,TTS_NOPREFIX|TTM_ADJUSTRECT|TTS_BALLOON|TTS_ALWAYSTIP,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,hWnd,NULL,HInstance,NULL);
 
  if (hWndTip != 0) {
     ti.cbSize = sizeof(ti);
     ti.uFlags = NIF_INFO|TTF_TRANSPARENT | TTF_TRACK;
     ti.hwnd = hWnd;
     ti.uId = 0;
     ti.hinst = HInstance;
     ti.lpszText = UnicodeString("LALALALALALA").c_str();
     ::GetClientRect(hWnd, &ti.rect);
     SendMessage(hWndTip, TTM_ADDTOOL, 0, (LPARAM) &ti );
     SendMessage(hWndTip, TTM_SETTITLE, Icon % 5, (int)Title);
     SendMessage(hWndTip, TTM_SETTIPBKCOLOR, BackCL, 0);
     SendMessage(hWndTip, TTM_SETTIPTEXTCOLOR, TextCL, 0);
 
  }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ShowToolTip(bool show,TControl* Control)
{
  SendMessage(hWndTip, TTM_TRACKACTIVATE, show, (LPARAM) &ti );
  if(show) {
    TPoint tp = ClientToScreen(TPoint(Control->Left,Control->Top+Control->Height-2));
    SendMessage(hWndTip, TTM_TRACKPOSITION, 0, (LPARAM)MAKELPARAM(tp.x,tp.y));
    vis = true;
  }
}
//------------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  if(vis==false) {
    CreateBalloonTip(Edit1, 2, "Оповещение", "Привет", 0xFFFFFF, 0);
    ShowToolTip(true, Edit1);//Покажет окно возле Edit1
  }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Edit1Click(TObject *Sender)
{
  ShowToolTip(false,NULL);
  vis = false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Edit1Change(TObject *Sender)
{
  ShowToolTip(false,NULL);
  vis = false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
  Timer1->Enabled = false;
  Timer1->Interval = 5000;
}
//---------------------------------------------------------------------------
Добавлено через 39 секунд
ты, как обычно, показал не весь исходник , относящийся к подсказке, естественно ?
0
Sasha
07.02.2011, 09:32  [ТС]
  #15

Не по теме:


Я тебе показал весь исходник, но к сожалению не понятно по какой причине у меня крестик не появляется.

0
LK
Заблокирован
07.02.2011, 19:54 16
Какая стройка и система (версии) ? Можешь кинуть проект - попробую у себя, ничего не меняя.
0
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
08.02.2011, 09:32  [ТС] 17
Держи проект. Делал в 6 билдере
Вложения
Тип файла: rar Balloon.rar (342.7 Кб, 29 просмотров)
0
LK
Заблокирован
08.02.2011, 21:23 18
Попробовал - скомпилировалось, єкзешник запустиля нормально - реакции на нажатие кнопки нет - балун не появляется .
0
Sasha
09.02.2011, 00:13  [ТС]     Найти дочернее окно
  #19

Не по теме:


Странно, у меня запускается

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.02.2011, 00:13

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

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

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

Дочернее окно
Есть код, в нём создал главное окно, и дочернее. Но как сделать так, что бы по щелчку на дочернее...


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

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