我编译了Netmeeting的sdk中的Avphone3的例子发现CreateNetmeetingWindow返回零,也就是里面的CreateWindow 没有成功,用GetLastError()查看了一下错误代码为1407,是没有找到窗口类,代码如下:
HWND CNetmeetingDlg::CreateNetMeetingWindow(HWND hWndParent, int x, int y, LPCTSTR szMode)
{ USES_CONVERSION;
TCHAR szFormatModeString[MAX_PATH];
wsprintf(szFormatModeString, _T("MODE=%s"), szMode); NmInitStruct nmis;
nmis.wSize = sizeof(nmis.str);
wcscpy(nmis.str, T2OLE(szFormatModeString)); LPOLESTR strGUIDNetMeetingActiveXControl = NULL;
StringFromCLSID(CLSID_NetMeeting, &strGUIDNetMeetingActiveXControl);
HWND hWndCtl =
::CreateWindow("AtlAxWin",
// Use ATL's string conversion routine to convert to a LPTSTR from an LPOLESTR
OLE2T(strGUIDNetMeetingActiveXControl),
WS_CHILD | WS_VISIBLE | WS_GROUP,
x,
y,
0,
0,
hWndParent,
NULL,
::GetModuleHandle(NULL),
&nmis
);
if (!hWndCtl)
{
CString cs;
cs.Format("%d", GetLastError());
AfxMessageBox(cs);
} // Remember to free memory given to you by StringFromCLSID
CoTaskMemFree(strGUIDNetMeetingActiveXControl ); if(hWndCtl)
{
// get the IUnknown for the video window (we want to get it's size)
IUnknown* pUnk = NULL;
HRESULT hr = AtlAxGetControl(hWndCtl, &pUnk);
if(SUCCEEDED(hr))
{
// Now get the IOleObject interface for the netmeeting control
IOleObject* pOleObjVideoWindow = NULL;
hr = pUnk->QueryInterface(&pOleObjVideoWindow);
if(SUCCEEDED(hr))
{
// get the Extent
SIZEL sizel = {0, 0};
hr = pOleObjVideoWindow->GetExtent(DVASPECT_CONTENT, &sizel);
if(SUCCEEDED(hr))
{
// Convert the Extent from HIMETRIC to pixels.
SIZEL sizeInPixels = {0, 0};
AtlHiMetricToPixel(&sizel, &sizeInPixels);
::SetWindowPos(hWndCtl, NULL, 0, 0, 100, 100, SWP_NOMOVE | SWP_NOZORDER | SWP_NOACTIVATE);
} // Don't forget to release interfaces!
pOleObjVideoWindow->Release();
} // Don't forget to release interfaces!
pUnk->Release();
}
} return hWndCtl;
}问题好象出在了”AtlAxWin“了。望指教!
HWND CNetmeetingDlg::CreateNetMeetingWindow(HWND hWndParent, int x, int y, LPCTSTR szMode)
{ USES_CONVERSION;
TCHAR szFormatModeString[MAX_PATH];
wsprintf(szFormatModeString, _T("MODE=%s"), szMode); NmInitStruct nmis;
nmis.wSize = sizeof(nmis.str);
wcscpy(nmis.str, T2OLE(szFormatModeString)); LPOLESTR strGUIDNetMeetingActiveXControl = NULL;
StringFromCLSID(CLSID_NetMeeting, &strGUIDNetMeetingActiveXControl);
HWND hWndCtl =
::CreateWindow("AtlAxWin",
// Use ATL's string conversion routine to convert to a LPTSTR from an LPOLESTR
OLE2T(strGUIDNetMeetingActiveXControl),
WS_CHILD | WS_VISIBLE | WS_GROUP,
x,
y,
0,
0,
hWndParent,
NULL,
::GetModuleHandle(NULL),
&nmis
);
if (!hWndCtl)
{
CString cs;
cs.Format("%d", GetLastError());
AfxMessageBox(cs);
} // Remember to free memory given to you by StringFromCLSID
CoTaskMemFree(strGUIDNetMeetingActiveXControl ); if(hWndCtl)
{
// get the IUnknown for the video window (we want to get it's size)
IUnknown* pUnk = NULL;
HRESULT hr = AtlAxGetControl(hWndCtl, &pUnk);
if(SUCCEEDED(hr))
{
// Now get the IOleObject interface for the netmeeting control
IOleObject* pOleObjVideoWindow = NULL;
hr = pUnk->QueryInterface(&pOleObjVideoWindow);
if(SUCCEEDED(hr))
{
// get the Extent
SIZEL sizel = {0, 0};
hr = pOleObjVideoWindow->GetExtent(DVASPECT_CONTENT, &sizel);
if(SUCCEEDED(hr))
{
// Convert the Extent from HIMETRIC to pixels.
SIZEL sizeInPixels = {0, 0};
AtlHiMetricToPixel(&sizel, &sizeInPixels);
::SetWindowPos(hWndCtl, NULL, 0, 0, 100, 100, SWP_NOMOVE | SWP_NOZORDER | SWP_NOACTIVATE);
} // Don't forget to release interfaces!
pOleObjVideoWindow->Release();
} // Don't forget to release interfaces!
pUnk->Release();
}
} return hWndCtl;
}问题好象出在了”AtlAxWin“了。望指教!
解决方案 »
- 如何在多文档程序中指定窗口刷新?
- 有那位大侠做过视频会议系统没有(基于netmeeting的也行),分数任取求代码。
- 调试时出现“Database.exe 中的 0x7174bbc0 处最可能的异常:0xC0000005: 写入位置 0x0046904c 时发生访问冲突 。”
- 关于在无线网卡上用WINPCAP开发802.1x TLS 认证软件的问题
- 在clistctrl中改变字体大小的问题,高手指教!
- VC++ 模块式代码库,有人搜集整理吗?
- 在客户端,如何恢复服务务器的备份过的SQL SERVER的数据?
- 为什么一个变量即可以用"."又可以用"->"的??
- 假如程序中开了100个线程去连接监测设备,会不会有问题
- C++ 无标题栏窗体移动时,有阴影
- 如何在WTL中使用MFC的控件类。
- 这么个问题,堂堂的一个大中国就没人会了吗???
http://www.mail-archive.com/[email protected]/msg01583.html