2010-05-06 3 views
0

J'ai mentionné le lien suivant:Comment implémenter le code pour plusieurs boutons en utilisant C++ dans Silverlight pour Windows Embedded

Silverlight for Windows Embedded

En se référant ce lien i créé une application de démonstration qui se composent de deux boutons créés à l'aide de Microsoft expression mélange 2 outils. Et puis écrit un code référant au site ci-dessus. Maintenant, les noms de mes boutons sont "Browser Button" et "Media Button". Au clic de l'un des bouton je devrais pouvoir lancer l'application respective. Je pouvais faire pour "Browser Button" mais pas pour "Media Button" et si je fais pour "Media Button" alors je ne suis pas capable de faire pour "Browser Button" .. Je veux dire que comment dois-je créer un événement gestionnaire pour les deux boutons.

C'est le code C++ que je dois modifier

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

Je dois ajouter gestionnaire d'événements, pour le bouton de sorte que sur l'émulateur à chaque fois que je clique sur une du bouton que je devrais être en mesure de lancer les applications respectives.

Merci à l'avance

+0

Où est le code pour le 2ème bouton? – Shaihi

Répondre

2

Vous pouvez créer deux fonctions séparées pour être les gestionnaires pour chaque bouton.
Si vous voulez que le même gestionnaire identifie quel bouton a été enfoncé et agisse en conséquence, vous pouvez lire le following MSDN article qui le démontre.


Je ne l'ai pas essayé, mais vous pouvez également utiliser IXRDependencyObject::GetName de l'objet source de savoir quel bouton a été pressé.

Votre gestionnaire ressemblerait à ceci:

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: Je reçois une erreur en utilisant "_tcscmp" indiquant que "ne peut pas convertir le second paramètre de BSTR * en const wchar_t *". Et quand j'ai typecast le deuxième paramètre c'est-à-dire (_tcscmp (L "BrowserEvent", (const wchar_t *) pName) == 0) puis après avoir démarré l'application à l'émulateur et en cliquant sur le bouton déclenche l'exception. – Abhineet

+0

J'ai mis à jour le code et l'ai testé. Ça devrait marcher. – Shaihi

Questions connexes