Как реализовать код для нескольких кнопок с помощью 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;
}

Мне нужно добавить обработчик событий для обеих кнопок, чтобы в эмуляторе всякий раз, когда я нажимаю на любую из кнопок, я мог запускать соответствующие приложения.

заранее спасибо


person Abhineet    schedule 06.05.2010    source источник
comment
Где код для 2-й кнопки?   -  person Shaihi    schedule 06.05.2010


Ответы (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;
}
person Shaihi    schedule 06.05.2010
comment
@Shaihi: я получаю сообщение об ошибке при использовании _tcscmp, заявляя, что не могу преобразовать второй параметр из BSTR * в const wchar_t *. И когда я типизирую второй параметр, то есть (_tcscmp (LBrowserEvent, (const wchar_t *) pName) == 0), то после запуска приложения в эмуляторе и нажатия кнопки возникает исключение. - person Abhineet; 07.05.2010