Обработка сообщений

Deczy

Можно-ли в проекте WindowsForms обрабатывать сообщения windows или это только можно делать в Win32?
7 ответов

Deczy

Deczy, можно. Для этого нужно переопределить виртуальный метод Form::WndProc или использовать класс NativeWindow.


Deczy

Непосредственна где его надо переопределять в хедере формы в каком куске кода? Мне надо отследить сообщениe WM_DEVICECHANGE


Deczy

Deczy, нужно переопределять в классе формы где требуется обработать данное сообщение. При организации проекта по умолчанию физически это будет .h файл формы.


Deczy

Что не так?
namespace DeviceMgr {
 
    using namespace System;
    using namespace System::ComponentModel;
    using namespace System::Collections;
    using namespace System::Windows::Forms;
    using namespace System::Data;
    using namespace System::Drawing;
 
    /// <summary>
    /// Summary for MyForm
    /// </summary>
    public ref class MyForm : public System::Windows::Forms::Form
    {
    public:
        MyForm(void)
        {
            InitializeComponent();
            //
            //TODO: Add the constructor code here
            //
        }
    
    
 
 
    protected:
        /// <summary>
        /// Clean up any resources being used.
        /// </summary>
        ~MyForm()
        {
            if (components)
            {
                delete components;
            }
        }
    protected:
        virtual void WndProc(Message% m) override {
            
            const int WM_DEVICECHANGE = 0x0219;
            const int ADD_DEVICE = 0x8000;
            const int REMOVE_DEVICE = 0x8004;
            
            if (m.Msg == WM_DEVICECHANGE) {
                switch ((int)m.WParam)
                {
                    case ADD_DEVICE:
                        MessageBox::Show("Device Add");
                        break;
                    case REMOVE_DEVICE:
                        MessageBox::Show("Remove Add");
                        break;
                }
            }
        }


Deczy

Deczy, не знаю. Но начать стоить с проверки получает ли окно данное сообщение с помощью Spy++ или аналогичной утилиты.


Deczy

Так теперь скомпилилось на сообщения вроде как надо подписываться но я не знаю, вы не подскажите?Как подписываться на сообщения и что за флаги надо указываь?


Deczy

Deczy, ответы на эти вопросы нужно искать в документации RegisterDeviceNotification Registering for Device NotificationВопросы по работе с Windows API лучше задавать в разделе C++ и WinAPI