OpenGL渲染多个窗口的问题 我用vc建了个多文档应用程序,想用两个菜单项控制显示用OpenGL渲染的图.点击第一个菜单项,程序正常显示了渲染图.可再点击第二个菜单项的时候,第一个的视图就空了,只有第二个菜单项对应的渲染图.我也用了两个dc分别对应不同的hrc,不知是什么原因还是这样. 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 两个窗口都要做OpenGL初始化操作. 我现在是这样初使化的,这样对吗? PIXELFORMATDESCRIPTOR pfd; int n; my_pDC2 = new CPaintDC(this); ASSERT(my_pDC2 != NULL); if (!mypixelformat()) return; n =::GetPixelFormat(my_pDC2->GetSafeHdc()); ::DescribePixelFormat(my_pDC2->GetSafeHdc(), n, sizeof(pfd), &pfd); hrc2 = wglCreateContext(my_pDC2->GetSafeHdc()); wglMakeCurrent(my_pDC2->GetSafeHdc(), hrc2); glClearDepth(1.0f); glEnable(GL_DEPTH_TEST); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); 任何时候你想要从渲染一个窗口转到渲染另一个窗口,你需要重新调用wglMakeCurrent 已解决,确实是没有用wglMakeCurrent非常感谢! #include <stdio.h>#include <windows.h>//#include "Setupapi.h"//#include "objbase.h"#include <setupapi.h>#pragma comment(lib,"setupapi.lib")void EnumDevices(HDEVINFO hDevInfo){ SP_DEVINFO_DATA DeviceInfoData = {sizeof(SP_DEVINFO_DATA)}; LPOLESTR guid; char devName[128]; char instanceId[128]; for (int i=0;SetupDiEnumDeviceInfo(hDevInfo,i,&DeviceInfoData);i++) { StringFromCLSID(DeviceInfoData.ClassGuid,&guid); SetupDiClassNameFromGuid(&DeviceInfoData.ClassGuid,devName,128,NULL); if(!strcmp(devName,"Net")) { SetupDiGetDeviceInstanceId(hDevInfo,&DeviceInfoData,instanceId,128,NULL); if(!strncmp(instanceId,"PCI",3)) { // wprintf(L"%s\n",guid); printf("%s\n",devName); printf("%s\n",instanceId); SP_PROPCHANGE_PARAMS params = {sizeof(SP_CLASSINSTALL_HEADER )}; params.ClassInstallHeader.InstallFunction = DIF_PROPERTYCHANGE; params.Scope = DICS_FLAG_CONFIGSPECIFIC; params.StateChange = DICS_ENABLE; //禁用:DICS_DISABLE,DICS_ENABLE启用// params.StateChange = DICS_DISABLE; //禁用:DICS_DISABLE,DICS_ENABLE启用 params.HwProfile = 0; SetupDiSetClassInstallParams(hDevInfo, &DeviceInfoData, (SP_CLASSINSTALL_HEADER*)¶ms, sizeof(SP_PROPCHANGE_PARAMS)); SetupDiChangeState(hDevInfo, &DeviceInfoData); } } CoTaskMemFree(guid); }}int main(int argc, char* argv[]){ HDEVINFO hDevInfo = INVALID_HANDLE_VALUE; hDevInfo = SetupDiGetClassDevs(NULL,NULL,NULL, DIGCF_PRESENT | DIGCF_ALLCLASSES); if(INVALID_HANDLE_VALUE == hDevInfo) return GetLastError(); EnumDevices(hDevInfo); SetupDiDestroyDeviceInfoList(hDevInfo); return 0;} 这个没法用了,原来是windows上的 这个没法用了,原来是windows上的 这个没法用了,原来是windows上的 如何删除listbox中选中的多行记录 对于完成端口很是不解? BUTTON的标题问题 uint和int的区别 security descriptor的具体使用问题 [请教]关于DirectShow的路径配置问题 求高手指点,怎么把一个视频流分路播放,还有一起同步播放 简单的Serialize问题。在线等! CWebBrowser 和 CShockwaveflash 能播放 .flv文件吗? 为何客户机调用服务器上的DCOM时,出现Access Denied呢? CTreeCtrl遍历问题 如何保护自己的密码框?
PIXELFORMATDESCRIPTOR pfd;
int n;
my_pDC2 = new CPaintDC(this); ASSERT(my_pDC2 != NULL); if (!mypixelformat())
return;
n =::GetPixelFormat(my_pDC2->GetSafeHdc());
::DescribePixelFormat(my_pDC2->GetSafeHdc(), n, sizeof(pfd), &pfd);
hrc2 = wglCreateContext(my_pDC2->GetSafeHdc());
wglMakeCurrent(my_pDC2->GetSafeHdc(), hrc2); glClearDepth(1.0f);
glEnable(GL_DEPTH_TEST);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
非常感谢!
#include <stdio.h>
#include <windows.h>
//#include "Setupapi.h"
//#include "objbase.h"
#include <setupapi.h>
#pragma comment(lib,"setupapi.lib")
void EnumDevices(HDEVINFO hDevInfo)
{
SP_DEVINFO_DATA DeviceInfoData = {sizeof(SP_DEVINFO_DATA)};
LPOLESTR guid;
char devName[128];
char instanceId[128];
for (int i=0;SetupDiEnumDeviceInfo(hDevInfo,i,&DeviceInfoData);i++)
{
StringFromCLSID(DeviceInfoData.ClassGuid,&guid);
SetupDiClassNameFromGuid(&DeviceInfoData.ClassGuid,devName,128,NULL);
if(!strcmp(devName,"Net"))
{
SetupDiGetDeviceInstanceId(hDevInfo,&DeviceInfoData,instanceId,128,NULL);
if(!strncmp(instanceId,"PCI",3))
{
// wprintf(L"%s\n",guid);
printf("%s\n",devName);
printf("%s\n",instanceId);
SP_PROPCHANGE_PARAMS params = {sizeof(SP_CLASSINSTALL_HEADER )};
params.ClassInstallHeader.InstallFunction = DIF_PROPERTYCHANGE;
params.Scope = DICS_FLAG_CONFIGSPECIFIC;
params.StateChange = DICS_ENABLE; //禁用:DICS_DISABLE,DICS_ENABLE启用
// params.StateChange = DICS_DISABLE; //禁用:DICS_DISABLE,DICS_ENABLE启用
params.HwProfile = 0;
SetupDiSetClassInstallParams(hDevInfo, &DeviceInfoData, (SP_CLASSINSTALL_HEADER*)¶ms, sizeof(SP_PROPCHANGE_PARAMS));
SetupDiChangeState(hDevInfo, &DeviceInfoData);
}
}
CoTaskMemFree(guid);
}
}
int main(int argc, char* argv[])
{
HDEVINFO hDevInfo = INVALID_HANDLE_VALUE;
hDevInfo = SetupDiGetClassDevs(NULL,NULL,NULL, DIGCF_PRESENT | DIGCF_ALLCLASSES);
if(INVALID_HANDLE_VALUE == hDevInfo)
return GetLastError();
EnumDevices(hDevInfo);
SetupDiDestroyDeviceInfoList(hDevInfo);
return 0;
}