MFC array使用

// MFCArray.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "afxwin.h"
#include "afxtempl.h"

class CAnimal{
public:
    CAnimal(int leg=4);
    int m_nLeg;
public:
    void Print(){
    printf("m_nLeg:%d\n",m_nLeg);
    }
};

CAnimal::CAnimal(int leg){
    m_nLeg=leg;
}

void Array(){
    CArray<int,int> arint;
    arint.Add(10);

    CArray<CAnimal,CAnimal&> arAnimal;
   
    arAnimal.Add(CAnimal(4));
    arAnimal.Add(CAnimal(10));
    arAnimal.Add(CAnimal(5));
    arAnimal.Add(CAnimal(7));
    //不同方法获取数组值
    arAnimal[1].Print();
    //不同方法获取数组值
    CAnimal& animal=arAnimal.ElementAt(2);
    animal.Print();
    
    CAnimal& animal2=arAnimal.GetAt(3);
    animal2.Print();

    printf("获取数组的大小:%d\n",arAnimal.GetSize());
    //SETSIZE最好是在加元素之前使用 不然数据可能会丢掉
    arAnimal.SetSize(10);
    printf("设置后数组的大小:%d\n",arAnimal.GetSize());
    
    //如果是指针定义的话 用RemoveAll不会释放指针所占用空间
    //必须得DELETE parAnimal[0]; 释放
    CArray<CAnimal*,CAnimal*> parAnimal;
    parAnimal.Add(new CAnimal(6));

    arAnimal.RemoveAll();
    printf("删除后数组的大小:%d\n",arAnimal.GetSize());
    //arint.Add(10);
}
void String(){
    CStringArray arString;
    arString.Add("Test1");
    arString.Add("Test2");



    CString strValue =arString[0];
    printf(strValue);
}
int main(int argc, char* argv[])
{


    String();

    Array();
	//printf("Hello World!\n");
	return 0;
}

MFC 项目中使用 Glad 库进行 OpenGL 开发,需要完成以下几个关键步骤来正确配置 Glad 并加载 OpenGL 扩展。这些步骤包括: ### 初始化 OpenGL 渲染上下文 为了使用 Glad 加载 OpenGL 扩展函数,首先必须确保已经创建了一个有效的 OpenGL 渲染上下文(HGLRC)。MFC 中通常通过 `CView` 派生类或自定义的 OpenGL 控件来管理设备上下文(HDC)和渲染上下文(HGLRC)。 可以参考以下代码片段创建现代 OpenGL 上下文(例如 OpenGL 3.3 Core Profile)[^4]: ```cpp #include <wglext.h> BOOL CSTLView::CreateModernOpenGLContext() { int attribs[] = { WGL_CONTEXT_MAJOR_VERSION_ARB, 3, WGL_CONTEXT_MINOR_VERSION_ARB, 3, WGL_CONTEXT_PROFILE_MASK_ARB, WGL_CONTEXT_CORE_PROFILE_BIT_ARB, 0 }; HGLRC hTempContext = wglCreateContext(m_pDC->GetSafeHdc()); wglMakeCurrent(m_pDC->GetSafeHdc(), hTempContext); PFNWGLCREATECONTEXTATTRIBSARBPROC wglCreateContextAttribsARB = NULL; wglCreateContextAttribsARB = (PFNWGLCREATECONTEXTATTRIBSARBPROC)wglGetProcAddress("wglCreateContextAttribsARB"); if (wglCreateContextAttribsARB) { m_hRC = wglCreateContextAttribsARB(m_pDC->GetSafeHdc(), 0, attribs); wglMakeCurrent(NULL, NULL); wglDeleteContext(hTempContext); } if (!m_hRC) return FALSE; return wglMakeCurrent(m_pDC->GetSafeHdc(), m_hRC); } ``` ### 加载 Glad 库 一旦渲染上下文创建成功并激活,就可以调用 Glad 的初始化函数来加载 OpenGL 函数指针。Glad 是一个跨平台的 OpenGL 加载库,支持多种语言和平台,并能根据指定的 OpenGL 版本生成所需的函数绑定[^2]。 在项目中集成 Glad 后,应在 OpenGL 上下文激活后立即调用 `gladLoadGLLoader` 来加载扩展函数: ```cpp #include <glad/glad.h> #include <GL/wglext.h> // 如果是 Windows 平台 // 在 CreateModernOpenGLContext 成功之后调用 if (!gladLoadGLLoader((GLADloadproc)wglGetProcAddress)) { // 加载失败处理 AfxMessageBox(_T("Failed to initialize GLAD")); return FALSE; } // 验证当前 OpenGL 版本 CString version((LPCTSTR)glGetString(GL_VERSION)); TRACE("OpenGL Version: %s\n", version); ``` ### 配置项目依赖项 为了让 Glad 正常工作,还需要确保以下几点: - **包含头文件**:将 Glad 生成的头文件(通常是 `glad.h`)添加到项目中,并确保其路径被包含。 - **链接 OpenGL32.lib**:在 Visual Studio 项目属性中,链接器输入应包含 `opengl32.lib`。 - **动态加载扩展**:虽然 `wglGetProcAddress` 可以手动用于获取扩展函数,但 Glad 已经封装了这一过程,只需调用 `gladLoadGLLoader` 即可[^2]。 ### 示例:绘制一个简单的正方形 一旦 Glad 和 OpenGL 上下文都已正确初始化,就可以开始使用现代 OpenGL API 绘制图形。例如,绘制一个二维正方形: ```cpp void CSTLView::OnDraw(CDC* pDC) { glClearColor(0.2f, 0.3f, 0.3f, 1.0f); glClear(GL_COLOR_BUFFER_BIT); // 定义一个简单的正方形顶点数据(在标准化设备坐标系中) GLfloat vertices[] = { -0.5f, -0.5f, 0.5f, -0.5f, 0.5f, 0.5f, -0.5f, 0.5f }; GLuint indices[] = { 0, 1, 2, 2, 3, 0 }; // 使用两个三角形组成一个正方形 GLuint VBO, VAO, EBO; glGenVertexArrays(1, &VAO); glGenBuffers(1, &VBO); glGenBuffers(1, &EBO); glBindVertexArray(VAO); glBindBuffer(GL_ARRAY_BUFFER, VBO); glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO); glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), indices, GL_STATIC_DRAW); glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 2 * sizeof(GLfloat), (void*)0); glEnableVertexAttribArray(0); glBindBuffer(GL_ARRAY_BUFFER, 0); glBindVertexArray(0); // 绘制 glBindVertexArray(VAO); glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0); glBindVertexArray(0); SwapBuffers(m_pDC->GetSafeHdc()); } ``` ### 总结 在 MFC 项目中配置 Glad 并加载 OpenGL 扩展的关键在于: - 创建合适的 OpenGL 渲染上下文(如 OpenGL 3.3 Core Profile)[^4] - 在上下文激活后调用 `gladLoadGLLoader` 加载所有 OpenGL 函数 - 确保项目正确包含 Glad 头文件并链接 OpenGL32.lib[^3] 这些步骤完成后,即可使用现代 OpenGL 功能进行高效图形开发。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值