以mfc为框架的opengl,为什么连背景都没有显示啊。

问题描述

以mfc为框架的opengl,为什么连背景都没有显示啊。 5C
自己按照网上的尝试了下mfc框架的opengl,但是根本就没有绘图,连背景都没有显示。求帮助。以下是代码,我自己创建了一个继承CWnd的类,如下:
C/C++ code

IMPLEMENT_DYNAMIC(COpenGL CWnd)

COpenGL::COpenGL()
{

}

COpenGL::~COpenGL()
{
wglMakeCurrent(NULLNULL);
wglDeleteContext(hglrc);
::ReleaseDC(m_hWndhdc);
}

BEGIN_MESSAGE_MAP(COpenGL CWnd)
ON_WM_CREATE()
ON_WM_PAINT()
END_MESSAGE_MAP()

// COpenGL 消息处理程序

int COpenGL::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CWnd::OnCreate(lpCreateStruct) == -1)
return -1;

// TODO:  在此添加您专用的创建代码MySetPixelFormat(::GetDC(m_hWnd));hdc = ::GetDC(m_hWnd);hglrc = wglCreateContext(hdc);CRect rect;this->GetWindowRect(&rect);wglMakeCurrent(hdchglrc);glShadeModel(GL_SMOOTH);glClearColor(1.0f1.0f1.0f1.5f);glClearDepth(1.0f);glEnable(GL_DEPTH_TEST);glDepthFunc(GL_LEQUAL);glHint(GL_PERSPECTIVE_CORRECTION_HINT GL_NICEST);glViewport (0 0 rect.Width()rect.Height());glMatrixMode (GL_PROJECTION);glLoadIdentity ();gluPerspective(65.0 (GLfloat)rect.Width()/(GLfloat)rect.Height() 1 1000);glMatrixMode(GL_MODELVIEW);glLoadIdentity();return 0;

}

void COpenGL::OnPaint()
{
//CPaintDC dc(this); // device context for painting
// TODO: 在此处添加消息处理程序代码
// 不为绘图消息调用 CWnd::OnPaint()
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); //清除颜色缓存和深度缓存
glLoadIdentity();

gluLookAt(052 000 001);glColor3f(0.5f0.5f1.0f);                    // 一次性将当前色设置为蓝色glBegin(GL_QUADS);                        // 绘制正方形glVertex3f(300.0f 300.0f 0.0f);glVertex3f(300.0f -300.0f 0.0f);glVertex3f(-300.0f -300.0f 0.0f);glVertex3f(-300.0f 300.0f 0.0f);glEnd();SwapBuffers(hdc);

}

int COpenGL::MySetPixelFormat(HDC hdc)
{
PIXELFORMATDESCRIPTOR pfd = {
sizeof(PIXELFORMATDESCRIPTOR)
PFD_DRAW_TO_WINDOW|
PFD_SUPPORT_OPENGL|
PFD_DOUBLEBUFFER
PFD_TYPE_RGBA
0 0 0 0 0 0
0
0
0
0 0 0 0
32
0
0
PFD_MAIN_PLANE
0
0 0 0
};

int iPixelFormat;if(iPixelFormat = ChoosePixelFormat(hdc&pfd) == 0){    ::MessageBox(NULLChoosePixelFormat Failed""error""MB_OK);    return 0;}if(SetPixelFormat(hdciPixelFormat&pfd)){    ::MessageBox(NULLSetPixelFormat Failed""error""MB_OK);    return 0;}return 1;

}

另外 在主对话框中有如下代码:
C/C++ code

BOOL CMyProjectDlg::OnInitDialog()
{
CDialogEx::OnInitDialog();

// 将“关于...”菜单项添加到系统菜单中。// IDM_ABOUTBOX 必须在系统命令范围内。ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX < 0xF000);CMenu* pSysMenu = GetSystemMenu(FALSE);if (pSysMenu != NULL){    BOOL bNameValid;    CString strAboutMenu;    bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);    ASSERT(bNameValid);    if (!strAboutMenu.IsEmpty())    {        pSysMenu->AppendMenu(MF_SEPARATOR);        pSysMenu->AppendMenu(MF_STRING IDM_ABOUTBOX strAboutMenu);    }}// 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动//  执行此操作SetIcon(m_hIcon TRUE);            // 设置大图标SetIcon(m_hIcon FALSE);        // 设置小图标// TODO: 在此添加额外的初始化代码CRect rect;GetDlgItem(IDC_STATIC)->GetWindowRect(rect);ScreenToClient(rect);m_pDisplay->Create(NULL                   NULL                   WS_CHILD|WS_CLIPSIBLINGS|WS_CLIPCHILDREN|WS_VISIBLE                   rect                   this                   0);return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE

}

时间: 2024-12-12 15:24:01

以mfc为框架的opengl,为什么连背景都没有显示啊。的相关文章

mdi-请教实现这样的一个简单功能的 MFC MDI 框架该怎么构建

问题描述 请教实现这样的一个简单功能的 MFC MDI 框架该怎么构建 本人之前有写过一个简单的 MFC SDI 的框架,也就是每次打开一幅图像,然后处理完这一幅图像再读进来下一幅重复处理操作,这样的功能 SDI 也就够了.最近想升级下程序框架,就试着在写一个 MDI 的框架,想实现的大致效果就是: 1.主窗口分成 3 块区域,最左边的区域存放选择的所有图像的缩略图(或者说图标icon),双击其中某幅图像的话,该图像就会在其右的最大的区域以全图形式显示出来,双击了多幅图像的话,这些被双击的图像都

mfc求助-求MFC程序制作,本人初学者,很多都不懂,希望能有大神提供样本参考。

问题描述 求MFC程序制作,本人初学者,很多都不懂,希望能有大神提供样本参考. 摇杆 主动快带动从动块 键盘WD能控制主动块左右移动菜单里面有"绘制轨迹"选项 和 "消除轨迹" 选项 绘制连杆中点的轨迹 消除轨迹 求大神给个样本参考 T.T

MFC如何给IP控件设置背景图片

问题描述 MFC如何给IP控件设置背景图片 现在做的一个项目中要求给IP控件设置图片作为背景,求大神帮忙 解决方案 http://forums.codeguru.com/showthread.php?158774-CIPAddressCtrl-background-and-text-color 自己重绘,贴图 解决方案二: 重写CIPAddress类,在OnPaint()自绘实现.

MFC写的一个视频显示控件类,无法复用显示两路视频

问题描述 MFC写的一个视频显示控件类,无法复用显示两路视频 刚学MFC,仿照实例写了一个视频显示的控件类,SubDlgView ,这个类UI界面只有一个picture control,接口就是一个IP地址,在CAMDlg.h 里面定义两个私有成员SubDlgView videoDisplay2; SubDlgView videoDisplay; 但是显示的时候总是只能再第二个显示的控件中显示视频?不知道为什么 解决方案 控件只支持一个视频显示吧 做两个进程呢 解决方案二: 一个简单的验证方法,

当文档分割-请问mfc单文档分割窗口后,原来可以显示图形的VIEW函数怎么修改才能让其显示原来发的图形。

问题描述 请问mfc单文档分割窗口后,原来可以显示图形的VIEW函数怎么修改才能让其显示原来发的图形. BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) { // TODO: 在此添加专用代码和/或调用基类 if(m_splitter.CreateStatic(this,1,2)==NULL) return FALSE; CRect rect; GetClientRect(&rect);

MFC下socket的收到的数据是如何区别显示在不同的窗口中的呢,求大神们指导!

问题描述 MFC下socket的收到的数据是如何区别显示在不同的窗口中的呢,求大神们指导! MFC下socket的收到的数据是如何区别显示在不同的窗口中的呢,本人是MFC,小菜鸟!求大神们指导! 解决方案 收到数据了,自己按格式得到不同字段数据,然后就是操作窗口各个控件,把数据显示上去.

mfc tab空间上添加属性页,页面总是显示不到Tab控件上,坐标转换怎么弄来着啊

问题描述 mfc tab空间上添加属性页,页面总是显示不到Tab控件上,坐标转换怎么弄来着啊 m_tab.InsertItem(0,_T("播放列表")); m_tab.InsertItem(1,_T("搜索歌曲")); m_musiclist.Create(IDD_DIALOG_LIST,&m_tab); //m_musiclist.ShowWindow(SW_SHOW); m_musicsearch.Create(IDD_DIALOG_SEARCH,&a

图片-MFC 编程。接收到的数据为什么都是一个字符一个字符的,这么多的字符串结束符,新手求教

问题描述 MFC 编程.接收到的数据为什么都是一个字符一个字符的,这么多的字符串结束符,新手求教 收到的数据个数是对的,但就是实际数据和字符结束符一样一半.怎么会这样啊 解决方案 给出完整代码 ..... 解决方案二: 楼主看下MFC编码,我也遇到过转换宽字符后就没问题了

iframe赋值 mcv4-iframe 在子页面给父页面的框架页的赋值时 Internet Explorer 无法显示该网页

问题描述 iframe 在子页面给父页面的框架页的赋值时 Internet Explorer 无法显示该网页 用IFRAME做布局,然后在子页面中给父页面的iframe的src赋值时有时会出现"Internet Explorer 无法显示该网页",有时候又能正常加载. 在不能显示的时候,右键 ->属性里面查看加载的url前面有一串不字符串,不知道是什么鬼,右键里面的地址如下: res://ieframe.dll/dnserrordiagoff.htm#http://localho