Использование ActiveX компонентов в серде Visual C++, страница 3

                                                           &dispparams,NULL,NULL,NULL);

}

//Аналогично для других свойств с одним параметром.

//         m_Grid.SetBackColorBkg(GetSysColor(COLOR_3DFACE));     

            {

            DISPID dispid;

            WCHAR * name=L"BackColorBkg";

            pDisp->GetIDsOfNames(IID_NULL,&name,1,LOCALE_SYSTEM_DEFAULT,&dispid);

            DISPPARAMS dispparams;

            DISPID mydispid[1] = { DISPID_PROPERTYPUT };

            VARIANTARG vararg[1];

            dispparams.rgvarg = vararg; // 1-element array

            VariantInit(&dispparams.rgvarg[0]);

            dispparams.rgvarg[0].vt = VT_UI4;   // 32-bit integer

            dispparams.rgvarg[0].ulVal = GetSysColor(COLOR_3DFACE);  

            dispparams.rgdispidNamedArgs = mydispid; // name array

            dispparams.cArgs = 1;      // total args

            dispparams.cNamedArgs = 1;   // named args

            pDisp->Invoke(dispid, IID_NULL,LOCALE_SYSTEM_DEFAULT,DISPATCH_PROPERTYPUT,

                                                           &dispparams,NULL,NULL,NULL);

}

//         m_Grid.SetCols(2);

{

            DISPID dispid;

            WCHAR * name=L"Cols";

            pDisp->GetIDsOfNames(IID_NULL,&name,1,LOCALE_SYSTEM_DEFAULT,&dispid);

            DISPPARAMS dispparams;

            DISPID mydispid[1] = { DISPID_PROPERTYPUT };

            VARIANTARG vararg[1];

            dispparams.rgvarg = vararg; // 1-element array

            VariantInit(&dispparams.rgvarg[0]);

            dispparams.rgvarg[0].vt = VT_I2;   // 32-bit integer

            dispparams.rgvarg[0].iVal  = 2;  

            dispparams.rgdispidNamedArgs = mydispid; // name array

            dispparams.cArgs = 1;      // total args

            dispparams.cNamedArgs = 1;   // named args

            pDisp->Invoke(dispid, IID_NULL,LOCALE_SYSTEM_DEFAULT,DISPATCH_PROPERTYPUT,

                                                           &dispparams,NULL,NULL,NULL);

}

//         m_Grid.SetRows(6);

{

            DISPID dispid;

            WCHAR * name=L"Rows";

            pDisp->GetIDsOfNames(IID_NULL,&name,1,LOCALE_SYSTEM_DEFAULT,&dispid);

            DISPPARAMS dispparams;

            DISPID mydispid[1] = { DISPID_PROPERTYPUT };

            VARIANTARG vararg[1];

            dispparams.rgvarg = vararg; // 1-element array

            VariantInit(&dispparams.rgvarg[0]);

            dispparams.rgvarg[0].vt = VT_I2;   // 32-bit integer

            dispparams.rgvarg[0].iVal  = 6;  

            dispparams.rgdispidNamedArgs = mydispid; // name array

            dispparams.cArgs = 1;      // total args

            dispparams.cNamedArgs = 1;   // named args

            pDisp->Invoke(dispid, IID_NULL,LOCALE_SYSTEM_DEFAULT,DISPATCH_PROPERTYPUT,

                                                           &dispparams,NULL,NULL,NULL);

}

9. Изменим свойство с несколькими параметрами. Типы параметров и их количество находим в OLE/COM Object Viewer’е. Их 3 - все они входные (флаг in), два 32 – битных числа и одна строка.

//         m_Grid.SetTextMatrix(0,0,"Parameters");

Рис.23

Порядок передачи параметров в метод Invoke должен быть обратным тому, как описано в OLE/COM Object Viewer’е. Вызов аналогичен рассмотренному ранее, поэтому прокомментируем только отличающиеся строки.