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

WS_CHILD и WM_LBUTTONUP

09.09.2009, 20:52. Показов 2391. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как сделать, чтобы диалог со стилем WS_CHILD обрабатывал сообщения мыши?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
09.09.2009, 20:52
Ответы с готовыми решениями:

WS_CHILD и EDIT, обновление окна
Создано главное окно в котором есть кнопки, при нажатии на которые открываются дочерние окна, проблема - при задании стиля WS_CHILD поля...

WM_LBUTTONUP или VK_LBUTTON
Всем привет! Начал самостоятельно изучать winapi, так что если ответ в каких то теоретических аспектах, не ругайте. В случае, когда пишу...

Отловить WM_LBUTTONUP для конкретного контрола
Есть ли способы, альтернативные влезанию в обработчик событий этого контрола?

9
Эксперт С++
 Аватар для valeriikozlov
4728 / 2549 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
10.09.2009, 06:11
Сделай класс на основе этого диалога, и в этом классе создай свой обработчик сообщений мыши.
0
0 / 0 / 1
Регистрация: 25.02.2009
Сообщений: 22
10.09.2009, 16:33  [ТС]
Обработчики событий существует, вот только все события от окна обрабатваются тем окном, которое ниже
0
2343 / 499 / 22
Регистрация: 01.04.2009
Сообщений: 2,200
10.09.2009, 16:39
что-то сделано неправильно.
покажи код.
0
0 / 0 / 1
Регистрация: 25.02.2009
Сообщений: 22
10.09.2009, 17:05  [ТС]
Цитата Сообщение от Patch Посмотреть сообщение
что-то сделано неправильно.
покажи код.
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
void CConnectedServerListViewDialog::Show(CPoint bottomLeftCornerPosition, CStringArray& serverList, HWND parentHwnd)
{
  CWnd* pParent = FromHandlePermanent(parentHwnd);
  if (!Create(CConnectedServerListViewDialog::IDD, pParent))
  {
    return;
  }
  
  CString infoStr;//заполняется, здесь это не важно
 
  int totalTextHeight = 100;
  int maxTextWidth = 100;
    int windowHeaderHeight = 10;//сейчас константы, долдны рассчитываться, это я думаю тоже не важно
 
    int dHeight = 10;
    int dWidth = 10;
 
    int windowHeight = totalTextHeight + dHeight + windowHeaderHeight;
    int windowWidth = maxTextWidth + dWidth;
 
    int X = bottomLeftCornerPosition.x;
    int Y = bottomLeftCornerPosition.y - windowHeight;
 
    m_serverListStatic.SetWindowText(infoStr);
 
    m_serverListStatic.MoveWindow(dWidth / 2, dHeight / 2, maxTextWidth, totalTextHeight);
    this->MoveWindow(X, Y, windowWidth, windowHeight);//SetWindowPos(&CWnd::wndTop, X, Y, windowWidth, windowHeight, SWP_SHOWWINDOW); 
    this->ShowWindow(SW_SHOW);
}
0
 Аватар для oxotnik
1665 / 1134 / 80
Регистрация: 21.08.2008
Сообщений: 4,734
Записей в блоге: 1
10.09.2009, 17:13
код к проблеме никак не относится
где определение класса этого окна с макросами обработки сообщений и где сама ф-я-обработчик?
0
0 / 0 / 1
Регистрация: 25.02.2009
Сообщений: 22
10.09.2009, 17:34  [ТС]
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
BEGIN_MESSAGE_MAP(CConnectedServerListViewDialog, CDialog)
    //{{AFX_MSG_MAP(CConnectedServerListViewDialog)
    ON_WM_LBUTTONUP()
    ON_WM_RBUTTONUP()
    ON_BN_CLICKED(IDC_BUTTON1, OnButton1)
    //}}AFX_MSG_MAP
END_MESSAGE_MAP()
 
void CConnectedServerListViewDialog::Close()
{
    if (::IsWindow(m_hWnd))
    {
        DestroyWindow();
    }
}
 
void CConnectedServerListViewDialog::OnLButtonUp(UINT nFlags, CPoint point) 
{
  Close();  
    CDialog::OnLButtonUp(nFlags, point);
}
 
void CConnectedServerListViewDialog::OnRButtonUp(UINT nFlags, CPoint point) 
{
  Close();
    CDialog::OnRButtonUp(nFlags, point);
}
 
void CConnectedServerListViewDialog::OnButton1() 
{
    // TODO: Add your control notification handler code here
    Close();
}
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
#if !defined(AFX_CONNECTEDSERVERLISTVIEWDIALOG_H__14176C57_D7C1_4373_9AFB_09B17487CE39__INCLUDED_)
#define AFX_CONNECTEDSERVERLISTVIEWDIALOG_H__14176C57_D7C1_4373_9AFB_09B17487CE39__INCLUDED_
 
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
// ConnectedServerListViewDialog.h : header file
//
 
/////////////////////////////////////////////////////////////////////////////
// CConnectedServerListViewDialog dialog
 
class CConnectedServerListViewDialog : public CDialog
{
// Construction
public:
  CConnectedServerListViewDialog();
  
  void Show(CPoint bottomLeftCornerPosition, CStringArray& serverList, HWND parentHwnd);
    bool IsActive() { return ::IsWindow(m_hWnd) == TRUE; }
  void Close();
 
// Dialog Data
    //{{AFX_DATA(CConnectedServerListViewDialog)
    enum { IDD = IDD_CONNECTED_SERVER_LIST_VIEW_DIALOG };
    CStatic m_serverListStatic;
    //}}AFX_DATA
 
 
// Overrides
    // ClassWizard generated virtual function overrides
    //{{AFX_VIRTUAL(CConnectedServerListViewDialog)
    protected:
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
    //}}AFX_VIRTUAL
 
// Implementation
protected:
 
    // Generated message map functions
    //{{AFX_MSG(CConnectedServerListViewDialog)
    afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
    afx_msg void OnRButtonUp(UINT nFlags, CPoint point);
    afx_msg void OnButton1();
    //}}AFX_MSG
    DECLARE_MESSAGE_MAP()
 
};
 
//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
 
#endif // !defined(AFX_CONNECTEDSERVERLISTVIEWDIALOG_H__14176C57_D7C1_4373_9AFB_09B17487CE39__INCLUDED_)
Я подозреваю, что дело не в коде, а в стиле диалог WS_CHILD
0
 Аватар для oxotnik
1665 / 1134 / 80
Регистрация: 21.08.2008
Сообщений: 4,734
Записей в блоге: 1
10.09.2009, 17:46
а где в карте событий прописано WM_LBUTTONUP ?


упс... сори
0
2343 / 499 / 22
Регистрация: 01.04.2009
Сообщений: 2,200
10.09.2009, 18:12
дело не в WS_CHILD.
данных все еще мало.
могу предположить, что в шаблоне указан стиль WS_DISABLE.
0
0 / 0 / 1
Регистрация: 25.02.2009
Сообщений: 22
10.09.2009, 18:45  [ТС]
Господа, дело двухдневных раскопок привело к гениальному результату! Как оказалось проблема возникает, когда у родительского окна существует несколько дочерних, перекрывающихся окон. Решается путем добавления стиля WS_CLIPCHILDREN родительскому окну и стиля WS_CLIPSIBLINGS дочернему (в дополнение к WS_CHILD). Всем спасибо, все свободны!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
10.09.2009, 18:45
Помогаю со студенческими работами здесь

Двойной щелчок мышью: два WM_LBUTTONUP при одном WM_LBUTTONDOWN - как так?
Делая двойной щелчок в клиентской зоне я проверял какие приходят Message.Msg и получалось что одно WM_LBUTTONDOWN и два WM_LBUTTONUP....

Двойной щелчок мышью: два WM_LBUTTONUP при одном WM_LBUTTONDOWN - как так?
Делая двойной щелчок в клиентской зоне я проверял какие приходят Message.Msg и получалось что одно WM_LBUTTONDOWN и два WM_LBUTTONUP....


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

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

Новые блоги и статьи
Вывод данных через динамический список в справочнике
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 01.04.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru