Как реализовать код для нескольких кнопок с помощью C++ в Silverlight для Windows Embedded
Я сослался на следующую ссылку:
Silverlight для Windows Embedded
По этой ссылке я создал демонстрационное приложение, состоящее из двух кнопок, созданных с использованием инструментов Microsoft expression blend 2. А потом написал код со ссылкой на вышеуказанный сайт. Теперь мои кнопки называются "Кнопка браузера" и "Кнопка мультимедиа". При нажатии на любую кнопку я могу запустить соответствующее приложение. Я был в состоянии сделать для "Кнопка браузера", но не для "Кнопка мультимедиа", и если я делаю для "Кнопка мультимедиа", то я не могу сделать для "Кнопка обозревателя".. Я хочу сказать, как я должен создать событие обработчик для обеих кнопок.
Это код на C++, который я должен изменить
class BtnEventHandler
{
public:
HRESULT OnClick(IXRDependencyObject* source,XRMouseButtonEventArgs* args)
{
RETAILMSG(1,(L"Browser event"));
Execute(L"\\Windows\\iesample.exe",L"");
return S_OK;
}
};
// entry point for the application.
INT WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,
LPWSTR lpCmdLine,int nCmdShow)
{
PrintMessage();
int exitCode = -1;
HRESULT hr = S_OK;
if (!XamlRuntimeInitialize())
return -1;
HRESULT retcode;
IXRApplicationPtr app;
if (FAILED(retcode=GetXRApplicationInstance(&app)))
return -1;
if (FAILED(retcode=app->AddResourceModule(hInstance)))
return -1;
XRWindowCreateParams wp;
ZeroMemory(&wp, sizeof(XRWindowCreateParams));
wp.Style = WS_OVERLAPPED;
wp.pTitle = L"Bounce Test";
wp.Left = 0;
wp.Top = 0;
XRXamlSource xamlsrc;
xamlsrc.SetResource(hInstance,TEXT("XAML"),MAKEINTRESOURCE(IDR_XAML1));
IXRVisualHostPtr vhost;
if (FAILED(retcode=app->CreateHostFromXaml(&xamlsrc, &wp, &vhost)))
return -1;
IXRFrameworkElementPtr root;
if (FAILED(retcode=vhost->GetRootElement(&root)))
return -1;
IXRButtonBasePtr btn;
if (FAILED(retcode=root->FindName(TEXT("BrowserButton"), &btn)))
return -1;
IXRDelegate<XRMouseButtonEventArgs>* clickdelegate;
BtnEventHandler handler;
if(FAILED(retcode=CreateDelegate
(&handler,&BtnEventHandler::OnClick,&clickdelegate)))
return -1;
if (FAILED(retcode=btn->AddClickEventHandler(clickdelegate)))
return -1;
UINT exitcode;
if (FAILED(retcode=vhost->StartDialog(&exitcode)))
return -1;
return exitCode;
}
Я должен добавить обработчик событий для обеих кнопок, чтобы в эмуляторе каждый раз, когда я нажимал на любую из кнопок, я мог запускать соответствующие приложения.
заранее спасибо
1 ответ
Вы можете создать две отдельные функции для обработки каждой кнопки.
Если вы хотите, чтобы один и тот же обработчик определял, какая кнопка была нажата, и действуйте соответствующим образом, вы можете прочитать следующую статью MSDN, которая демонстрирует это.
Я не пробовал это, но вы также можете использовать IXRDependencyObject::GetName исходного объекта, чтобы узнать, какая кнопка была нажата.
Ваш обработчик будет выглядеть так:
HRESULT OnClick(IXRDependencyObject* source,XRMouseButtonEventArgs* args)
{
BSTR pName[50];
source->GetName(pName);
if (_tcscmp(L"BrowserEvent", LPCWSTR(pName)) == 0)
{
RETAILMSG(1,(L"Browser event"));
Execute(L"\\Windows\\iesample.exe",L"");
}
else if (_tcscmp(L"BrowserEvent", LPCWSTR(pName)) == 0)
{
/* Handle another button or element */
}
return S_OK;
}