Показать сообщение отдельно

Решение под MFC
  #12  
Старый 21.05.2009, 03:24
Suteki
Новичок
Регистрация: 18.05.2009
Сообщений: 12
С нами: 8939101

Репутация: 19
Smile Решение под MFC

Проблему решил. Привожу ниже мануал.
Мини-Мануал для MFC

1) В хайдер мейнфрейма (MainFrm.h) добавляем в описание класса прототип функции OnDeviceChange (в protected:)
PHP код:
BOOL OnDeviceChange( UINT nEventType, DWORD dwData ); 
2) В мейнфрейм (MainFrm.cpp) подключаем хайдер dbt.h
PHP код:
#include <dbt.h> 
3) Дописываем в карту откликов после //}}AFX_MSG_MAP отклик ON_WM_DEVICECHANGE ()
PHP код:
ON_WM_DEVICECHANGE () 
4) В конец мейнфрейма дописываем следующий код:

PHP код:

bool inline IsBitSet 
(DWORD64 dwMask, UINT nTHBit)
{
    
DWORD64 dwBit = 1;
    
dwBit <<= nTHBit;
    
dwMask &= dwBit;
    return 
dwMask ? true : false;
}

BOOL CMainFrame::OnDeviceChange( UINT nEventType, DWORD dwData )
{
    
BOOL bReturn = CWnd::OnDeviceChange (nEventType, dwData);

    
DEV_BROADCAST_VOLUME *volume = (DEV_BROADCAST_VOLUME *)dwData;
    
CString log;

    if (
nEventType == DBT_DEVICEARRIVAL)
    {
        if (
volume->dbcv_devicetype == DBT_DEVTYP_VOLUME)
        {
            for (
int n = 0; n < 32; n++)
            {
                if (
IsBitSet (volume->dbcv_unitmask, n))
                {
                    
log.Format ("Drive %c: Inserted\n", n + 'A');
        ::
AfxMessageBox(log);

        
log.Format ("%c", n + 'A');
        
// Флешка подключена. Имя флешки в системе содержит строковая переменная log
                
}
            }
        }
    }

    if (
nEventType == DBT_DEVICEREMOVECOMPLETE)
    {
        if (
volume->dbcv_devicetype == DBT_DEVTYP_VOLUME)
        {
            for (
int n = 0; n < 32; n++)
            {
                if (
IsBitSet (volume->dbcv_unitmask, n))
                {
                    
log.Format ("Drive %c: Removed\n", n + 'A');
        ::
AfxMessageBox(log);

        
log.Format ("%c", n + 'A');
        
// Флешка извлечена. Имя флешки в системе содержит строковая переменная log
                
}
            }
        }
    }

    return 
bReturn;
} 

Файл проекта + собранный exe
 
Ответить с цитированием