ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Day_02学习记录

2022-01-09 21:30:15  阅读:158  来源: 互联网

标签:02 return CFrameWnd 记录 int length SqList pFrame Day


正在学的

1.《操作系统》王道

2.《数据结构》

3.mfc程序设计

///

今天学了mfc程序设计和数据结构

mfc笔记如下

MFC工具栏

一般地,工具栏和菜单是相互绑定的。至于为什么是这样,因为点击他们发出的都是WM_COMMAND消息 低16位是ID,如果在资源管理器中写这两个控件的ID一致,那么无论点那个都是会发送一样的消息,所以一样。但是本质山其实她两没哈关系,如果想不一样也不是不可以。

相关的类

CToolBar

添加步骤

首先vs自带资源编辑器,编辑(画好)工具栏的形状,确定ID,添加rescourse头文件。

然后记住 在CMyFrameWnd框架类中new 这个类。延长声明周期,然后成员函数Create(),把参数填进去即可,注意,这属于子窗口控件,所以WS_VISIBLE WS_CHILD 什么的也不能少。

然后成员函数LoadToolBar(&toolbar);即可挂载上工具栏。

其他特性

工具栏一大特性是停靠(Docking)特性,即拖动工具栏放到任意位置

想要实现这个功能,首先添加新风格,CBRS_GRIPPER 

然后,CToolBar::EnableDocking(PARAM); 有一个参数,参见msdn //工具栏想要停哪

CFrameWnd::EnableDocking(PARAM);有一个参数 参见msdn 这个是工具栏可以停哪

CFrameWnd::DockControlBar(&toobar,param);暂时停哪

#include <afxwin.h>
#include "resource.h"
#include <afxext.h>//工具栏类
class CMyFrameWnd :public CFrameWnd{
	DECLARE_MESSAGE_MAP()
public:
	CToolBar toolbar;
	void OnNew();
	int OnCreate(LPCREATESTRUCT ls);
	void OnSet();
};
BEGIN_MESSAGE_MAP(CMyFrameWnd, CFrameWnd)
	ON_COMMAND(ID_NEW,OnNew)
	ON_COMMAND(ID_SET, OnSet)
	ON_WM_CREATE()
END_MESSAGE_MAP()
int CMyFrameWnd::OnCreate(LPCREATESTRUCT ls) {
	toolbar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_ALIGN_TOP|CBRS_GRIPPER);
	toolbar.EnableDocking(CBRS_ALIGN_ANY);//那都可以停
	this->EnableDocking(CBRS_ALIGN_ANY);//想停哪停哪
	this->DockControlBar(&toolbar, AFX_IDW_DOCKBAR_BOTTOM);
	toolbar.LoadToolBar(IDR_TOOLBAR1);
	return CFrameWnd::OnCreate(ls);
}
void CMyFrameWnd::OnNew() {
	AfxMessageBox("Menu Click!");
}
void CMyFrameWnd::OnSet() {
	AfxMessageBox("Set Click!");
}
class CMyWinApp : public CWinApp {
	virtual BOOL InitInstance() {
		CMyFrameWnd* pFrame = new CMyFrameWnd;
		pFrame->Create(nullptr, "mfctoolbar", WS_OVERLAPPEDWINDOW, CFrameWnd::rectDefault, NULL, (CHAR*)IDR_MENU1);
		m_pMainWnd = pFrame;
		pFrame->ShowWindow(SW_SHOW);
		pFrame->UpdateWindow();
		return TRUE;
	}

};
CMyWinApp theApp;

MFC六大特性之动态创建机制和运行时信息机制 了解

MFC视图

其实就是一个窗口去掉标题栏 周围的东西,因为MFC受到c++面向对象的特点,把显示东西的功能单独抽象成一个类,就是视图类。

相关类

CView

包含视图和与文档交互操作

视图的使用

先定义自己派生自CView的类,首先重写虚函数OnDraw;

然后再处理WM_CREATE消息时,定义CMyView对象,调用函数Create窗口窗口。

窗口倒数第二个是视图ID,填写AFX_IDW_PANE_FIRST使视图填充整个窗口。

​
#include <iostream>
#include <afxwin.h>
#define FIRST 1
class CMyView : public CView {
	virtual void OnDraw(CDC* pDC){
		//Cview是抽象类
	}
};

class CMyFrame :public CFrameWnd {
	virtual LRESULT WindowProc(UINT msg, WPARAM wparam, LPARAM lparam) {
		PAINTSTRUCT ps = { 0 };
		CMyView* pView = new CMyView;
		HDC hdc;
		switch (msg)
		{
		case WM_PAINT:
			hdc = ::BeginPaint(this->m_hWnd, &ps);
			TextOut(hdc, 0, 0, "Frame_fuck111111111111111111you!",45);
			EndPaint(&ps);
			break;
		case WM_CREATE:
			//NEW 延长生命周期
			pView->Create(NULL, "MFCVIEW", WS_CHILD | WS_VISIBLE | WS_BORDER, CRect(0, 0, 200, 200), this, AFX_IDW_PANE_FIRST);
			//AFX_IDW_PANE_FIRST改成这个ID  视图窗口就会平铺
			break;
		default:
			break;
		}
		return CFrameWnd::WindowProc(msg, wparam, lparam);
	}
};
class CMyWinApp :public CWinApp {
	virtual BOOL InitInstance() {
		CFrameWnd* pFrame = new CMyFrame;
		pFrame->Create(nullptr, "view");
		m_pMainWnd = pFrame;
		pFrame->ShowWindow(SW_SHOW);
		pFrame->UpdateWindow();
		
		return true;
	}
};
CMyWinApp theApp;

​

上面我是用覆写框架函数的WindowProc完成的

《数据结构》

学了顺序(顺序

)表的特征,优点,缺点,存储方式,以及用c实现他的一些简单算法

注意插入算法频度n/2 删除频度n-1/2,还有查找,是从头开始遍历的。

#include <stdio.h>
#include <stdlib.h>
#define OK 1
#define LIST_SIZE 100
typedef struct {
	int first;
	int second;
}ElemType;
typedef struct {
	ElemType* elem;
	int length;
	int listsize=LIST_SIZE;
	
}SqList;
int InitList(SqList& L) {//初始化 
	L.elem = (ElemType*)malloc(LIST_SIZE * sizeof(ElemType));
	L.length = 0;
	return OK;
}
void Destroy(SqList& L) {
	if (L.elem) free(L.elem);
}
void ClearList(SqList& L) {
	L.length = 0;
}
int GetLength(SqList L) {
	return L.length;
}
bool IsEmpty(SqList L) {
	if (L.length) return 1;
	return 0;
}
int GetElem(SqList L, int i, ElemType& e) {//取第i个元素
	e = L.elem[i];
	return OK;
}//算法时间复杂度 O(1) 常量阶 这是顺序表的一个好处 链式表就不一样了
几个比较重要的算法
//最简单的查找方法 顺序查找法
int FindList(SqList L, int target) {//顺序查找算法
	int pos = -1;
	for (int i = 0; i < L.length; i++) {
		if ((L.elem[i]).first == target) { pos = i; return pos; }
	}// N(N+1)/N*2  T(n)=O(n) 平均查找长度
	return pos;
}
//插入算法
//在某个位置插入 而且长度要更改
bool InsertList(SqList& L,int index,ElemType e) {
	//具体要看他插入在哪
	//考虑异常情况 插入在规定序列 或者已经满了
	//要把插入位置空出来 将从i->n个位置依次往后移动
	//然后放进去 长度加一
	//1.判断插入位置是否合法
	if (index<1 || index>L.length + 1) return -1;
	for (int j = L.length; j >= index; j--) {
		L.elem[j + 1] = L.elem[j];//般元素 Σ
		//移动多少次取决与我们插入的位置 也是O(n) 
	}
	L.length++;
	L.elem[index] = e;
	return OK;//此算法的时间复杂度也要考虑平均情况 n/2  O(n)
}
bool DeleteList(SqList& L, int i) {
	//删除也要考虑他在哪 必须从前往后往前补 前驱后继不能变
	//然后元素个数减一
	for (int j = i; j <= L.length - 1; j++) {
		L.elem[j] = L.elem[j+1];
	}
	L.length--;
	return OK;  //删除的时间复杂度是(n-1)/2 至于为啥比插入少1 因为它最多就移动n-1次
}
//查删减时间复杂度都是O(n)空间复杂度都是S(n)
int main() {

	return 0;
}

标签:02,return,CFrameWnd,记录,int,length,SqList,pFrame,Day
来源: https://blog.csdn.net/u013677637/article/details/122399279

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有