2010-05-06 13 views
0

我已經提到了以下鏈接:如何實現使用C++在Silverlight的Windows多個按鈕的代碼嵌入

Silverlight for Windows Embedded

通過參照此鏈接我創建了一個演示應用程序,包括使用微軟創建了兩個按鈕表達式混合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; 
} 

我必須添加事件處理兩個按鈕,這樣在模擬器每當我按一下按鈕中的任何一個,我應該能夠推出各自的應用程序。

在此先感謝

+0

其中,是第二個按鈕的代碼? – Shaihi 2010-05-06 14:02:21

回答

2

您可以創建兩個單獨的功能是爲每個按鈕的處理程序。
如果您希望使用相同的處理程序來識別哪個按鈕被按下,並據此採取行動,您可以閱讀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; 
} 
+0

@Shaihi:我使用「_tcscmp」得到錯誤,指出「無法將第二個參數從BSTR *轉換爲const wchar_t *」。當我第二個參數,即(_tcscmp(L「BrowserEvent」,(const wchar_t *)pName)== 0),然後在模擬器啓動應用程序並點擊按鈕引發異常。 – Abhineet 2010-05-07 07:11:32

+0

我更新了代碼並進行了測試。它應該工作。 – Shaihi 2010-05-09 06:47:47

相關問題