2010-05-06 4 views
0

я говорил по следующей ссылке:Как реализовать код для нескольких кнопок с использованием C++ в Silverlight для Windows Embedded

Silverlight for Windows Embedded

Ссылаясь на эту ссылку я создал демо-приложение, которое состоит из двух кнопок, созданных с помощью Microsoft выражение blend 2 инструмента. А затем написал код, ссылающийся на вышеуказанный сайт. Теперь моими именами кнопок являются «Кнопка браузера» и «Медиа-кнопка». При нажатии любой из кнопок я должен запустить соответствующее приложение. Я смог сделать это для «Button Browser», но не для «Media Button», и если я это сделаю для «Media Button», то я не смогу сделать это для «Button Browser». Я хочу сказать, как мне создать событие обработчик для обеих кнопок.

Это код в 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

Где находится код для кнопки 2? – Shaihi

ответ

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 *». И когда я привожу второй параметр i.e. (_tcscmp (L "BrowserEvent", (const wchar_t *) pName) == 0), то после запуска приложения в эмуляторе и нажатии кнопки возникает исключение. – Abhineet

+0

Я обновил код и протестировал его. Он должен работать. – Shaihi