На главную

On-line справка по Win32 API

Написать письмо
БЕСПЛАТНАЯ ежедневная online лотерея! Выигрывай каждый день БЕСПЛАТНО!
Список всех статей A-B-C-D-E-F-G-H-I-J-K-L-M-N-O-P-Q-R-S-T-U-V-W-X-Y-Z | Скачать Вниз

Processing Commands and Messages from File Manager



The following code shows the FMExtensionProc function for a sample extension DLL. It demonstrates how an extension processes the menu commands and notification messages sent by File Manager.

HINSTANCE hinst;
HMENU hmenu;
WORD wMenuDelta;
BOOL fMultiple = FALSE;
BOOL fLFN = FALSE;

LONG WINAPI FMExtensionProc(hwnd, wMsg, lParam)
HWND hwnd;
WORD wMsg;
LONG lParam;

{
CHAR szBuf[200];
INT count;

switch (wMsg) {
case FMEVENT_LOAD:

#define lpload ((LPFMS_LOAD) lParam)

/* Save the menu-item delta value. */

wMenuDelta = lpload->wMenuDelta;

/* Fill the FMS_LOAD structure. */


lpload->dwSize = sizeof(FMS_LOAD);
lstrcpy(lpload->szMenuName, "&Extension");

/* Return the handle of the menu. */

hinst = GetModuleHandle("ext.dll");
lpload->hMenu = GetSubMenu(LoadMenu(hinst,
MAKEINTRESOURCE(MYMENU)), 0);

return (LONG)TRUE;

case FMEVENT_UNLOAD:

/* Perform any cleanup procedures here. */

break;

case FMEVENT_INITMENU:

/* Copy the menu handle. */


hmenu = (HMENU) lParam;

/*
* Add check marks to menu items as appropriate.
* Add menu-item delta values to menu-item
* identifiers to specify the menu items to check.
*/

CheckMenuItem(hmenu,
wMenuDelta + IDM_MULTIPLE,
fMultiple ? MF_BYCOMMAND | MF_CHECKED :
MF_BYCOMMAND | MF_UNCHECKED);
CheckMenuItem(hmenu,
wMenuDelta + IDM_LFN,

fLFN ? MF_BYCOMMAND | MF_CHECKED :
MF_BYCOMMAND | MF_UNCHECKED);
break;

case FMEVENT_TOOLBARLOAD:
{
static EXT_BUTTON extbtn[] = {
{1, 0, 0},
};

/* Fill the FMS_TOOLBARLOAD structure. */

#define lptbld ((LPFMS_TOOLBARLOAD) lParam)

lptbld->dwSize = sizeof(FMS_TOOLBARLOAD);
lptbld->lpButtons = (LPEXT_BUTTON) &extbtn;
lptbld->cButtons = 1;

lptbld->cBitmaps = 1;
lptbld->idBitmap = ID_BUTTONBITMAP;

return (LONG)TRUE;

}

case FMEVENT_USER_REFRESH:
MessageBox(hwnd, "User refresh event",
"Hey!", MB_OK);
break;

case FMEVENT_SELCHANGE:
break;

/*
* The following messages are generated when the user
* chooses items from the extension menu.
*/

case FMEVENT_HELPSTRING:


#define lphs ((LPFMS_HELPSTRING)lParam)

if (lphs->idCommand == -1)
lstrcpy(lphs->szHelp, "Help for extension menu");
else
wsprintf(lphs->szHelp, "Help for item %d", lphs->idCommand);

break;

case FMEVENT_HELPMENUITEM:

wsprintf(szBuf, "Help for %d", lParam);
MessageBox(hwnd, szBuf, "WinHelp call", MB_OK);

/*
* Use: WinHelp(hwnd, "ExtHelp.hlp", HELP_CONTEXT, lParam);

*/

break;

case IDM_GETFOCUS:
wsprintf(szBuf, "Focus %d",
(INT) SendMessage(hwnd, FM_GETFOCUS, 0, 0));
MessageBox(hwnd, szBuf, "Focus", MB_OK);
break;

case IDM_GETCOUNT:
count = (INT) SendMessage(hwnd,
fLFN ? FM_GETSELCOUNTLFN : FM_GETSELCOUNT,
0, 0);

wsprintf(szBuf, "%d files selected", count);
MessageBox(hwnd, szBuf, "Selection Count", MB_OK);

break;

case IDM_GETFILE:
{
FMS_GETFILESEL file;

count = (INT) SendMessage(hwnd,
fLFN ? FM_GETSELCOUNTLFN : FM_GETSELCOUNT,
FMFOCUS_DIR,
0);

while (count >= 1) {
/*
* Selection indices are zero-based (0 is
* first).
*/

count--;
SendMessage(hwnd, FM_GETFILESEL, count,
(LONG) (LPFMS_GETFILESEL) &file);

wsprintf(szBuf, "file %s\nSize %ld",
(LPSTR) file.szName, file.dwSize);
MessageBox(hwnd, szBuf, "File Information",
MB_OK);

if (!fMultiple)
break;
}
break;
}

case IDM_GETDRIVE:
{
FMS_GETDRIVEINFO drive;

SendMessage(hwnd, FM_GETDRIVEINFO, 0,
(LONG) (LPFMS_GETDRIVEINFO)&drive);
wsprintf(szBuf,
"%s\nFree %ld\nTotal %ld\nVolume %s\nShare %s",

(LPSTR) drive.szPath, drive.dwFreeSpace,
drive.dwTotalSpace, (LPSTR) drive.szVolume,
(LPSTR) drive.szShare);
MessageBox(hwnd, szBuf, "Drive Info", MB_OK);
break;
}

case IDM_LFN:
MessageBox(hwnd, "IDM_LFN", "Hi", MB_OK);
fLFN = !fLFN;
break;

case IDM_MULTIPLE:
MessageBox(hwnd, "IDM_MULTIPLE", "Hi", MB_OK);
fMultiple = !fMultiple;
break;

case IDM_REFRESH:

case IDM_REFRESHALL:
SendMessage(hwnd, FM_REFRESH_WINDOWS,
wMsg == IDM_REFRESHALL, 0);
break;

case IDM_RELOAD:
PostMessage(hwnd, FM_RELOAD_EXTENSIONS, 0, 0);
break;
}
return 0L;
}



Пригласи друзей и счет твоего мобильника всегда будет положительным!
Предыдущая статья
 
Сайт Народ.Ру Интернет
Следующая статья
Пригласи друзей и счет твоего мобильника всегда будет положительным!

Обработка Команд и Сообщений из Файлового Менеджера



Следующее кода показывает функцию FMExtensionProc для расширения образца DLL. Это демонстрирует как расширение обрабатывает команды меню и сообщения уведомления посылались Файловым Менеджером.

HINSTANCE hinst;
HMENU hmenu;
СЛОВО wMenuDelta;
BOOL fMultiple = ЛОЖЬ;
BOOL fLFN = ЛОЖЬ;

ДОЛГО (ДЛИНОЙ) WINAPI FMExtensionProc(hwnd, wMsg, lParam) HWND hwnd;
СЛОВО wMsg;
ДОЛГО (ДЛИНОЙ) lParam;

{
СИМВОЛ szBuf[200];
СЧЕТ INT;

ключ (wMsg) { случай FMEVENT_LOAD:

#define lpload ((LPFMS_LOAD) lParam)

/* Сохраните меню-пункт дельты value. */

wMenuDelta = lpload->wMenuDelta;

/* Заполните structure. FMS_LOAD */


lpload->dwSize = sizeof(FMS_LOAD);
lstrcpy(lpload->szMenuName, "&Расширение");

/* Возвращайте ручку menu. */

hinst = GetModuleHandle("ext.dll");
lpload->hMenu = GetSubMenu(LoadMenu(hinst, MAKEINTRESOURCE(MYMENU)), 0);

возврат (LONG)TRUE;

случай FMEVENT_UNLOAD:

/* Выполните любые процедуры очистки here. */

прерывание;

случай FMEVENT_INITMENU:

/* Скопируйте меню handle. */


hmenu = (HMENU) lParam;

/*
* Добавьте контрольные отметки к пунктам меню как подходящий.
* Добавьте меню-пункт величин дельты к меню-пункту
* идентификаторы, чтобы определять пункты меню, чтобы проверяться.
*/

CheckMenuItem(hmenu, wMenuDelta + IDM_MULTIPLE, fMultiple? MF_BYCOMMAND | MF_CHECKED : MF_BYCOMMAND | MF_UNCHECKED);
CheckMenuItem(hmenu, wMenuDelta + IDM_LFN,

fLFN? MF_BYCOMMAND | MF_CHECKED : MF_BYCOMMAND | MF_UNCHECKED);
прерывание;

случай FMEVENT_TOOLBARLOAD:
{
статический EXT_BUTTON extbtn[] = {
{1, 0, 0},
};

/* Заполните structure. FMS_TOOLBARLOAD */

#define lptbld ((LPFMS_TOOLBARLOAD) lParam)

lptbld->dwSize = sizeof(FMS_TOOLBARLOAD);
lptbld->lpButtons = (LPEXT_BUTTON) &extbtn;
lptbld->cButtons = 1;

lptbld->cBitmaps = 1;
lptbld->idBitmap = ID_BUTTONBITMAP;

возврат (LONG)TRUE;

}

случай FMEVENT_USER_REFRESH: MessageBox(hwnd, "событие восстановления Пользователя", "Эй!", MB_OK);
прерывание;

случай FMEVENT_SELCHANGE: прерывание;

/*
* Следующие сообщения сгенерированы когда пользователь
* пункты выборов из меню расширения.
*/

случай FMEVENT_HELPSTRING:


#define lphs ((LPFMS_HELPSTRING)lParam)

если (lphs->idCommand == -1) lstrcpy(lphs->szHelp, "Подсказка для меню расширения");
еще
wsprintf(lphs->szHelp, "Подсказка для пункта %d", lphs->idCommand);

прерывание;

случай FMEVENT_HELPMENUITEM:

wsprintf(szBuf, "Подсказка для %d", lParam);
MessageBox(hwnd, szBuf, "ВЫЗОВ WinHelp", MB_OK);

/*
* Использование: WinHelp(hwnd, "ExtHelp.hlp", HELP_CONTEXT, lParam);

*/

прерывание;

случай IDM_GETFOCUS: wsprintf(szBuf, "Фокус %d", (INT) SendMessage(hwnd, FM_GETFOCUS, 0, 0));
MessageBox(hwnd, szBuf, "ФОКУС", MB_OK);
прерывание;

случай IDM_GETCOUNT: считать = (INT) SendMessage(hwnd, fLFN? FM_GETSELCOUNTLFN : FM_GETSELCOUNT,
0, 0);

wsprintf(szBuf, "%d файлы выбирались", счет);
MessageBox(hwnd, szBuf, "СЧЕТ Выбора", MB_OK);

прерывание;

случай IDM_GETFILE:
{
файл FMS_GETFILESEL;

считать = (INT) SendMessage(hwnd, fLFN? FM_GETSELCOUNTLFN : FM_GETSELCOUNT, FMFOCUS_DIR,
0);

пока (счет >= 1) {
/*
* Индексы Выбора основаны нуль (0
* сначала).
*/

счет--;
SendMessage(hwnd, FM_GETFILESEL, СЧЕТ, (ДОЛГО (ДЛИНОЙ)) (LPFMS_GETFILESEL) &файл);

wsprintf(szBuf, "файл %s\nSize %ld", (LPSTR) file.szName, file.dwSize);
MessageBox(hwnd, szBuf, "ФАЙЛОВАЯ Информация", MB_OK);

если прерывание (!fMultiple);
}
прерывание;
}

случай IDM_GETDRIVE:
{
накопитель FMS_GETDRIVEINFO;

SendMessage(hwnd, FM_GETDRIVEINFO, 0, (ДОЛГО (ДЛИНОЙ)) (LPFMS_GETDRIVEINFO)&drive);
wsprintf(szBuf,
"%s\nFree %ld\nTotal %ld\nVolume %s\nShare %s",

(LPSTR) drive.szPath, drive.dwFreeSpace, drive.dwTotalSpace, (LPSTR) drive.szVolume, (LPSTR) drive.szShare);
MessageBox(hwnd, szBuf, "НАКОПИТЕЛЬ Инфо", MB_OK);
прерывание;
}

случай IDM_LFN:
MessageBox(hwnd, "IDM_LFN", "ПРИВЕТ", MB_OK);
fLFN = !fLFN;
прерывание;

случай IDM_MULTIPLE:
MessageBox(hwnd, "IDM_MULTIPLE", "ПРИВЕТ", MB_OK);
fMultiple = !fMultiple;
прерывание;

случай IDM_REFRESH:

случай IDM_REFRESHALL: SendMessage(hwnd, FM_REFRESH_WINDOWS, wMsg == IDM_REFRESHALL, 0);
прерывание;

случай IDM_RELOAD:
PostMessage(hwnd, FM_RELOAD_EXTENSIONS, 0, 0);
прерывание;
}
возвращайте 0L;
}



Вверх Version 1.3, Oct 26 2010 © 2007, 2010, mrhx Вверх
 mrhx software  Русский перевод OpenGL  Русский перевод Win32 API
 
Используются технологии uCoz