gpt4 book ai didi

c++ - 如何在 Silverlight for Windows Embedded 中使用 C++ 实现多个按钮的代码

转载 作者:行者123 更新时间:2023-11-28 03:57:46 25 4
gpt4 key购买 nike

我引用了以下链接:

Silverlight for 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;
}

我必须为这两个按钮添加事件处理程序,以便在模拟器上每当我单击任何一个按钮时我都应该能够启动相应的应用程序。

提前致谢

最佳答案

您可以创建两个单独的函数作为每个按钮的处理程序。
如果您希望相同的处理程序识别按下了哪个按钮并采取相应行动,您可以阅读 following MSDN article这证明了这一点。


我没试过,但你也可以使用 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;
}

关于c++ - 如何在 Silverlight for Windows Embedded 中使用 C++ 实现多个按钮的代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2780599/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com