我要发帖 回复

新手上路

1

主题

17

积分

0

专家分

:

私信
发表时间 : 2008-11-9 00:18:41 | 浏览 : 1757    评论 : 4
想做一个3d测试小程序,主要是检测计算机支不支持简单的opengl 3d功能。手头上有一些opengl源代码,但都是控制台的。我想基于vc的单文档界面,测试时弹出一个窗口用来显示动画,限定时间自动关闭。最好是尽量少的改动已有代码。哪位若能提供比较好的建议或方法,不胜感激。

最近VR访客

tan_dunming 评论于2008-11-9 08:37:54
如果只是想隐藏控制台,最简单的办法是直接修改VC的工程属性设置既可。如下图所示(Visual Studio2005工程,其他版本的设置类似):
1.jpg

如果要添加菜单等内容,用MFC的话也行,网上还是有很多资料的,论坛里也有。但是需要对源代码做一些调整。今后可能不怎么用VS了,所以这些问题就不作答了。

[ 本帖最后由 tan_dunming 于 2008-11-9 08:39 AM 编辑 ]
追求卓越
zouzhin 评论于2008-11-9 09:21:49
感谢版主的热情回答。问题更明确一点:我设计的是一个单文档的界面,其中响应菜单函数中直接把控制台程序移植过来如下
void CMainFrame::OnGo()
{
        // TODO: 在此添加命令处理程序代码
......
    int argc = 1;
        int wi;
    char *argv[] = {"OpenGL Application"};
        glutInit(&argc,argv);
        glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
        glutInitWindowSize(600,600);  // Size of the OpenGL window
        wi=glutCreateWindow("OpenGL 2 Dimensonal Geometries");        // Creates OpenGL Window                                       
        glutDisplayFunc(display);               
                     glutKeyboardFunc(keyCB);                // set window's key callback
        glutSpecialFunc(specialKey);        // set window's to specialKey callback
        glutMainLoop();
//
}

程序编译通过,函数能响应,也按预想的弹出一个新窗口在其中作图。现在问题是怎么限定时间关闭此窗口,而且如果手动关闭的话会引起中端错误
         **.exe 中的 0x1000a8b5 处未处理的异常: 0xC0000005: 读取位置 0x0114281c 时发生访问冲突
停止在vc wincore.cpp中的
LRESULT CALLBACK
_AfxActivationWndProc(HWND hWnd, UINT nMsg, WPARAM wParam, LPARAM lParam)
{
        WNDPROC oldWndProc = (WNDPROC)::GetProp(hWnd, _afxOldWndProc);
        ASSERT(oldWndProc != NULL);       

        LRESULT lResult = 0;
        TRY
        {
                BOOL bCallDefault = TRUE;
                switch (nMsg)
                {
                case WM_INITDIALOG:
                        {
                                DWORD dwStyle;
                                CRect rectOld;
                                CWnd* pWnd = CWnd::FromHandle(hWnd);
                                _AfxPreInitDialog(pWnd, &rectOld, &dwStyle);
                                bCallDefault = FALSE;
                                lResult = CallWindowProc(oldWndProc, hWnd, nMsg, wParam, lParam);
                                _AfxPostInitDialog(pWnd, rectOld, dwStyle);
                        }
                        break;

                case WM_ACTIVATE:
                        _AfxHandleActivate(CWnd::FromHandle(hWnd), wParam,
                                CWnd::FromHandle((HWND)lParam));
                        break;

                case WM_SETCURSOR:
                        bCallDefault = !_AfxHandleSetCursor(CWnd::FromHandle(hWnd),
                                (short)LOWORD(lParam), HIWORD(lParam));
                        break;

                case WM_NCDESTROY:
                        SetWindowLongPtr(hWnd, GWLP_WNDPROC, reinterpret_cast<INT_PTR>(oldWndProc));
                        RemoveProp(hWnd, _afxOldWndProc);
                        GlobalDeleteAtom(GlobalFindAtom(_afxOldWndProc));
                        break;
                }

                // call original wndproc for default handling
                if (bCallDefault)
                        lResult = CallWindowProc(oldWndProc, hWnd, nMsg, wParam, lParam);//中断在这儿
        }
        CATCH_ALL(e)
        {
                // handle exception
                MSG msg;
                msg.hwnd = hWnd;
                msg.message = nMsg;
                msg.wParam = wParam;
                msg.lParam = lParam;
                lResult = AfxProcessWndProcException(e, &msg);
                TRACE(traceAppMsg, 0, "Warning: Uncaught exception in _AfxActivationWndProc (returning %ld).\n",
                        lResult);
                DELETE_EXCEPTION(e);
        }
        END_CATCH_ALL

        return lResult;
}
tan_dunming 评论于2008-11-9 09:40:28
建议你采用WinExec("Path\\**.exe", SW_SHOW);(可以参考MSDN)直接调用这个OpenGL的可执行程序。这样手动关闭的时候应该没问题。如果要自动关闭,比较麻烦。但是可以参考VCKBASE里的一个KP的工程。更具体的内容已经超越OpenGL了,我对VC没有兴趣,恕无法回复。

[ 本帖最后由 tan_dunming 于 2008-11-9 09:43 AM 编辑 ]
追求卓越
zouzhin 评论于2008-11-9 10:40:42
再一次感谢版主。

手机版|VR开发网 ( 津ICP备18009691号 ) 统计 网安备12019202000257

GMT+8, 2020-10-20 05:44 AM

返回顶部