Непонятное поведение диалога, вызываемого из WFX

Только для тех, кто пишет плагины под Total Commander. Обмен опытом, решение проблем.

Модераторы: d-view, Моторокер, Avada, CaptainFlint, Nik

Ответить
mmm3396
Сообщения: 6
Зарегистрирован: Пн янв 14, 2008 20:14
Откуда: Украина

Непонятное поведение диалога, вызываемого из WFX

Сообщение mmm3396 »

Пишу файлсистемный плагин. Нужно вызвать диалог для задания режимов работы. Для этого создал "псевдокаталог". Вызываю из FsFindFirst (пишу на Visual C++ 6.0):
DialogBox(HInstance, MAKEINTRESOURCE(IDD_DIALOG1), window, DlgProc);
Ну, и пишу DlgProc.

Код: Выделить всё

BOOL CALLBACK DlgProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
  switch (uMsg){
    case WM_INITDIALOG:
      break;
    case WM_CLOSE:
      EndDialog(hWnd,0);
      break;
    default:
      return FALSE;
  }// switch
  return TRUE;
}
К сожалению, наблюдается странность. :( После запуска Total Commander диалог появляется, и с ним можно работать. Но стоит перезапустить TC, и диалог уже не показывается. Надо либо перезагружать компьютер, либо что-то немного изменить в исходниках программы, чтобы выполнилась перекомпиляция. До следующего перезапуска TC можно работать.
Я не являюсь крутым программистом, на поиски в литературе или в сети каких-то упоминаний о чем-то подобном могу потратить недели (и уже потратил), поэтому решился обратиться сюда за возможной консультацией... :?
Последний раз редактировалось mmm3396 Ср июн 11, 2008 22:12, всего редактировалось 1 раз.
VadiMGP
Сообщения: 1625
Зарегистрирован: Ср мар 21, 2007 20:58

Сообщение VadiMGP »

Похоже, что ты привел не реальный код, а, только иллюстрацию. По крайней мере диалог с такой процедурой ничего делать не может. Даже на кнопку ОК нету обработки.
Лучше покажи код полностью.
И кто является у тебя родительским окном?
mmm3396
Сообщения: 6
Зарегистрирован: Пн янв 14, 2008 20:14
Откуда: Украина

Сообщение mmm3396 »

Спасибо за намек! "И кто является у тебя родительским окном?"
Я начал внимательнее изучать тему, посвященную определению хэндла окна, и обнаружил твое добавление к ней: "if (strcmp(WindowClass,"TTOTAL_CMD")==0)".
Вставил, и как будто заработало. До этого использовалось "if(IsWindowVisible(hWindow))".
Спавибо! Похоже, тема закрывается...
Ответить