OpenGL渲染多个窗口的问题

xhlu154 2007-11-10 04:31:07
我用vc建了个多文档应用程序,想用两个菜单项控制显示用OpenGL渲染的图.
点击第一个菜单项,程序正常显示了渲染图.
可再点击第二个菜单项的时候,第一个的视图就空了,只有第二个菜单项对应的渲染图.
我也用了两个dc分别对应不同的hrc,不知是什么原因还是这样.
...全文
502 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
red-fly 2012-05-30
  • 打赏
  • 举报
回复
wgl开头的是什么库?
red-fly 2012-05-30
  • 打赏
  • 举报
回复
这个没法用了,原来是windows上的
red-fly 2012-05-30
  • 打赏
  • 举报
回复
这个没法用了,原来是windows上的
red-fly 2012-05-30
  • 打赏
  • 举报
回复
这个没法用了,原来是windows上的
liliboy9527 2012-05-30
  • 打赏
  • 举报
回复

#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;
}
xhlu154 2007-11-22
  • 打赏
  • 举报
回复
已解决,确实是没有用wglMakeCurrent
非常感谢!
DRACULAX05 2007-11-22
  • 打赏
  • 举报
回复
任何时候你想要从渲染一个窗口转到渲染另一个窗口,你需要重新调用wglMakeCurrent
xhlu154 2007-11-19
  • 打赏
  • 举报
回复
我现在是这样初使化的,这样对吗?
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();
syy64 2007-11-15
  • 打赏
  • 举报
回复
两个窗口都要做OpenGL初始化操作.

19,469

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧