ActiveX是Microsoft对于一系列策略性面向对象程序技术和工具的称呼,其中主要的技术是组件对象模型(COM)。 —— [ 百度百科 ]
* 这里注意字符串尽量使用BSTR类型 *
* 注意添加事件的地方不在Events菜单里面,迁移到 Ctrl菜单里面 *
<HEAD>
<TITLE>Test ActiveXTITLE>
HEAD>
<body>
<OBJECT name="MFCActiveXDemo" ID="Test_MFCActiveXDemo" WIDTH=528 HEIGHT=545 classid="CLSID:5ab0294d-c437-4f20-b3ad-e9b1888ccf45">
<PARAM NAME="_Version" VALUE="65536">
<PARAM NAME="_ExtentX" VALUE="12806">
<PARAM NAME="_ExtentY" VALUE="1747">
<PARAM NAME="_StockProps" VALUE="0">
OBJECT>
<script language="javascript">
function doTest()
{
MFCActiveXDemo.AboutBox();
}
<input type="button" value="ActiveX About" id="Test" onclick="doTest();">
body>
HTML>
void UnicodeToUtf8(const wchar_t* unicode, char* UTF8, int size)
{
int len = WideCharToMultiByte(CP_UTF8, 0, (wchar_t *)unicode, -1, NULL, 0, NULL, NULL);
memset(UTF8, 0, size);
len = min(len, size);
WideCharToMultiByte(CP_UTF8, 0, (wchar_t *)unicode, -1, UTF8, len, NULL, NULL);
}
void UTF8ToUnicode(const char* UTF8, wchar_t* UnicodeStr, int size)
{
DWORD dwUnicodeLen = MultiByteToWideChar(CP_UTF8, 0, UTF8, -1, NULL, 0);
memset(UnicodeStr, 0, size);
if (dwUnicodeLen < size / sizeof(wchar_t)) {
MultiByteToWideChar(CP_UTF8, 0, UTF8, -1, UnicodeStr, dwUnicodeLen);
} else {
MultiByteToWideChar(CP_UTF8, 0, UTF8, -1, UnicodeStr, size / sizeof(wchar_t));
}
}
2
回调js的代码一定要在UI线程当中执行,可以用PostMessage的方式,将消息转发到主线程当中回调,否则回调会失败
3
使用StretchDIBits函数在hwnd上面画RGB图像时
SetStretchBltMode(pdc->m_hDC, COLORONCOLOR);
StretchDIBits(pdc, 0, 0, width, height,
0, 0, mVideoWidth, mVideoHeight,
mVideoBuffer, m_pBmpInfo, DIB_RGB_COLORS, MERGECOPY);
DWORD *mask = (DWORD*)&m_pBmpInfo->bmiColors;
*mask++ = 0x00FF0000;
*mask++ = 0x0000FF00;
*mask = 0x000000FF;
来控制RGB的排列
如果ocx编译提示无法注册输出,则使用管理员权限打开vs环境,因为要注册控件到系统,需要权限,同样在cmd通过regsvr32注册的时候,也要以管理员权限打开cmd
如果最终打包成的ocx无法在系统当中注册,比如缺失一些库,可以用dependencywalker程序去看一下缺少什么库
MFC要静态依赖,可以减少安装环境对MFC库的依赖。