Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

WM_COPYDATA & C++Builder 5

982
03 апреля 2002 года
AndreiKZ
3 / / 20.03.2000
не работает
примерно такой код:

WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR lpCmdLine, int)
{
HWND Wnd = 0;
// нашел хандл нужного окна (если программа уже выполняется)
Wnd = ....
//подготовил сообщение
if(Wnd) {
COPYDATASTRUCT cpd;
cpd.cbData = strlen(lpCmdLine) + 1;
cpd.lpData = lpCmdLine;
cpd.dwData = 0;
SendMessage(Wnd, WM_COPYDATA, unsigned(Wnd), (LPARAM) (PCOPYDATASTRUCT) &cpd);
//вытащим форму на передний план - что-то такого типа...
SendMessage(Wnd, WM_SETFOCUS, unsigned(Wnd), 0);
if(ShowWindow(Wnd, SW_RESTORE))
SetForegroundWindow(Wnd);
return 0;
}
//дальше "стандартный" код:
try {
Application->Initialize();
и так далее...
}
catch(...) {}
return 0;
}

в хидере главной формы:
class TfrmMain : public TForm
{
.....
private:
MESSAGE void OnCopyData(TMessage &Message);
public: // User declarations
__fastcall TfrmMain(TComponent* Owner);

BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(WM_COPYDATA, TMessage, OnCopyData);
END_MESSAGE_MAP(TForm);
};

в .cpp:
void TfrmMain::OnCopyData(TMessage &Message)
{
ShowMessage("OnCopyData");
}

так вот, запускается вторая копия приложения, первая копия поднимается на передний план, т.е. WM_SETFOCUS сработал. А ShowMessage из обработчика WM_COPYDATA не срабатывает.
Помогите, пожалуйста, разобраться почему не отрабатывает обработчик.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог