vc++学习笔记—11月14日

限时加码!20+主流AI编程工具免费用 购周边加赠Coding Plan Lite,Claude Code、Cursor等即刻畅享,学习进阶更高效! 阅读详情

第三章 应用程序框架

句柄
HWND 窗口句柄
HBITMAP 位图句柄
HICON 图标句柄
HMENU 菜单句柄
HFILE 文件句柄
HINSTANCE 当前实例句柄
HGLOBAL 全局内存对象句柄
HDC 设备环境句柄
HCURSOR 光标句柄
HFONT 字体句柄
HPEN 画笔句柄
HBRUSH 画刷句柄
HLOCAL 局部内存对象句柄

旁注:
char是char[]的首地址
同样 main是main()的首地址

消息
  消息号: 事先定义好的消息标识
  wParam: 字参数 消息附加信息
  lParam:长字节参数 消息附加信息
消息循环:
常见的:
 while(GetMessage(&Msg,NULL,0,))
{
TranslatMessage(&Msg);//将消息的虚拟键转换为字符信息 例如把

wm_keyup/wm_keydown 转换为wm_char消息,它不会消灭以前的旧消息而是产生一

个新消息

DispatchMessage(&Msg);//将消息传送到指定窗口,即把消息传递给窗口类中的

lpfnWndProc所指向的函数名
}

窗口函数WinProc()
定义了程序对于接收到的不同消息的响应,包含了对各种可能接受到的消息的处

理过程。
每一个case处理一个消息
      
当你不感兴趣的消息也不能不管,在一般的消息回调函数中default 都会return

defwindowproc(...)交由系统处理,否则窗口会不显示
回调函数的callback是用来区分_stdcall(delphi语系以及其他api的语言约定)与

_cdle(c语言的语言约定)的 不同函数 的。

初始化
 1 定义窗口类
 2 注册窗口  RegisterClass();
 3 创建窗口  CreateWindow();
 4 窗口显示  ShowWindow();

MFC类库

包括CWinApp CDoucument CView CFrameWnd CDocTemplate 五大类

命令相关类 CCmdTarget  是消息映射属性的基类,消息映射规定了当一个对象接

收到消息命令时,调用哪个函数进行处理。

线程基类 CWinThread 可直接使用

应用程序类 CWinApp

窗口类 CWnd

框架窗口类 CFrameWnd

文档视窗类 CDocTemplate

winmain中lCmdline参数为 系统参数之意

窗口重画cs_vredraw..为单独位为1的意思如0x00001
如要去掉,可以采用style&~cs_vredraw

窗口类wndClass

旁注:HDC
HDC hdc1 创建一个hdc的变量(hdc是指跟显示设备相关的中间层变量,只要复制

给hdc就可以被显示)
hdc1.getDC(指定要显示窗口的句柄如hwnd);
可以用TextOut(hdc1,...)来显示文字
用完要释放  ReleaseDC(hwnd,hdc1)

 Class :

构造函数
它的名字就是类的名字,一般会在public中,它会在类创建的时候被调用,本来

用于自动给参数赋初值的函数,是类创建所必须的如果不写,系统会默认一个

例子:
class Point
{
public:
 int x;
 int y;
/* void init()       ///////////////////////此处用于 手工赋初值的

方法,如Point s1; s1.init();//即为初始化
 {
  x=0;
  y=0;
 }*/
 Point()//////////////此就是构造函数
 {
  x=0;
  y=0;
 }
---------------
析构函数:

它的名字就是~类名字,它会在类使用完的时候调用,本来用于释放类占据的空

间的,一般也会出现在public中

例子:

class Point
{
public:
 int x;
 int y;

 
 ~Point()/// 此即为析构函数
 {
 }

---------
函数的重载

有多个名字相同 参数个数或者类型不同的函数

例如:
Point()
 {
  x=0;
  y=0;
 }
Point(int a,int b)
 {
  x=a;
  y=b;
 }
到时候那个符合参数就用那个。。自适应的。

----------------------
this指针用于指向对象,

例如:
Class Point
{
...
void output(int x,int y)
 {
  this->x=x;
  this->y=y;
 }
}
...
Point ist;

此时类中的this就是指ist
----------------
函数的继承和派生

例如class a;
再定义b时,可采用
class b :public a
{

}
即b继承了a类,b是a的派生
====摘自csdn
继承和派生两个术语的区别在于它们的主宾关系不同。  
  继承是对于父类来说是被动的,可以描述为:父类XXX被子类XXX继承  
   
  而派生对于父类来说是主动的。描述为:父类XXX派生子类XXX。  
   
  关于派生类和子类的区别:应该是继承关系的层次结构的概念区别。  
  派生类可以是多余一级的继承关系,  
  子类是一级关系。  
  但同时也有这样的概念:子类属于派生类。  
   
  例如:基类A,  
              类B直接继承于A  
              类C直接继承于B;  
   
          那么依据上面的说法则有:  
   
              类A派生类B,类A被类B继承;类B派生类C,   类B被类C继承。  
              类B是类A的子类,类C是类B的子类;  
              类B和类C都是类A的派生类。  
------------------------
多态性

就是父类的同名函数若设置为虚函数,则放弃父虚函数的类型,主要看子类。子

类有的调用子的,没有的调用父类。
----------------------
虚函数

见上述函数的多态性 ,
例子:
class animal
{
public:
....
..
virtual viod breathe()//此即为虚函数,
 {
 }

}

若为virtual viod breathe()=0;则为纯虚函数纯虚函数是父类用来“留白”的

,即,子类必须定义自己的这个函数
--------------
引用

就是一种别名
例子:
int a=6;
int &b=a;
则b就是a的引用,而且b变换,a也会跟着变化,
注意引用只能在定义时候定义一次,之后不会被重复定义
用法
如果b=5,则a也会变成5

一般用法 定义函数

change(int &a,int &b0)
{...}
使用的时候change(x,y)即使把参数x和y的 本身 进行交换。。。

======================
类的一般 用法
把文件分为cpp和h文件
h文件中只是声明类的函数,不做具体定义
如 animal.h就只用写
class animal
{
public:
animal(int heght , int weght);
viod eat();
viod sleep();
virtual viod breathe();
}
在animal.cpp中写

animal:: animal()//注意此处不必写函数返回值,因为构造函数没有返回值
{
//构造函数
}
void Animal::eat()
{
}
.....

继承animail类的fish类 定义的fish构建函数
Fish::Fish():Animal(300,400)
{
}
---------注意头文件不参与编译
--------------
::shownwindow() 表示调用全局或者平台的函数
AFX类是框架类的函数,系统把众多类联系起来的全局函数
AfxGetApp()可以获得一个CWinApp类的指针即this
CWinApp是应用程序类

先构建 CWinApp 先构建全局变量
然后构建winmain
afxwinmain是winmain的调用函数,用来完成winmain函数的功能
AfxRegisterClass注册窗口类函数,用来使用win32风格的几种窗口
Initapplication()是用来初始化管理用函数
InitInstance()调用子类的初始化函数

this 指向是CxxxApp xxxApp 定义中的xxxApp 是应用程序类

PreCreatWindows()函数中先注册窗口AfxDeferRegisterClass

()//AfxEndDeferRegisterClass判断有没有注册,如果没有就注册参数
可以通过其参数 CREATESTRUCT& cs改变有无最大化等窗口类型
主窗口的创建,是在ProcessShellComand(cmdinfo)实现的
::CreatWindowEx(...)创建窗口,其返回值是个句柄
m_pMainWnd是指向cMainFrame的指针
CWinThread::Run()完成了消息循环

注意wndcls.lpfnWndProc=DefWindowProc并非单纯把消息交给消息处理函数,所

谓的Defxxxx而是做了消息映射,所以此处该处理函数是没有相应的。--leon注解

单文档程序的子窗口是cxxxxview类
LPCTSTR 常量字符串

CxxxDOC 文档类
在C++中,结构体也是一种特殊的类

MFC和WIN32 创建窗口方法的区别和联系


 WNDCLASS wndcls;
 wndcls.cbClsExtra=0;
 wndcls.cbWndExtra=0;
 ......
 RegisterClass(&wndcls);

 CWnd wnd;//wnd并不是窗口,窗口销毁时之销毁了句柄为空,但是成员

函数仍可以用,但是如果wnd销毁,则窗口销毁
 wnd.CreateEx(...);//hwnd 内部传递并没有外漏
 wnd.ShowWindow(SW_SHOWNORMAL);
 wnd.UpdateWindow();
|WIN32----------------------------------------------------------------

--个MFC
v HWND hwnd;
 hwnd=CreateWindowEx();
 ::ShowWindow(hwnd,SW_SHOWNORMAL);
 ::UpdateWindow(hwnd);

 ......

CButton::Create(LPSTSTR按键的文字,风格,大小和位置,父窗口,ID)
例子 : CButton btn;//加到class中的private中
调用
        btn.Create("test",WS_Child|BS_PUSHBUTTON,CRect(0,0,1,1),this,

ID123);
        btn.ShowWindow。。。
小锁 private ,钥匙protect ,什么都没有就是public
得到父窗口指针HWND GetParent();


----------------------------------------------------------------------

--------------------
----------------------------------------------------------------------

--------------------
文本编辑
创建插入符
CreateSolidCaret(20宽度,100高度);
ShowCaret();
//Ascent 升序高度,即h角到头的高度
//Descent 降序高度 ,即G从头到脚的高度
获得字体高度
CCilentDC dc(this);
TEXTMETRIC tm;//注意此处的tm为随意命名
dc.GetTextMetrics(&tm);
tm.tmhight 就是他的高度
这个用法很有用!

位图插入符

CBitmap bitmap;//如果要用,最好放到类的private中,以免析构的时候被干掉
bitmap.LoadBitmap(IDC_XXX);//CString也有类似的读取资源的方法就是

LoadString//可以在资源的String Table中添加
CreateCaret(&bitmap);
ShowCaret();


View 类, 中的OnDraw 窗口重绘时经历

CDC类定义的*pDC
CString str("Hello World!");
文本输出:
pDC->TextOut(50,50,str);//50,50就是文字的左上角的坐标

CSize 中的成员x y 分别是长度和高度

获得字符串的高度
CSize sz=pDC->GetTextExtent(str);

画矩形 pDC->Rectangle(x0,y0,x1,y1);
cstring.GetLength()取长度
 //////////////////////////////
此函数实在CxxxView类中右击选择 Add Windowsmessage Hander 从而增添的消息

截获WM_CHAR消息做的响应
void CTextView::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
 CClientDC dc(this);
 CFont font;
 font.CreatePointFont(300,"华文行楷",NULL);
 CFont *pOldFont=dc.SelectObject(&font);
 TEXTMETRIC tm;
 dc.GetTextMetrics(&tm);
 if(0x0d==nChar)//回车
 {
  m_strLine.Empty();
  m_ptOrigin.y+=tm.tmHeight;
 }
 else if(0x08==nChar)// 退格
 {
  COLORREF clr=dc.SetTextColor(dc.GetBkColor());
  dc.TextOut(m_ptOrigin.x,m_ptOrigin.y,m_strLine);
  m_strLine=m_strLine.Left(m_strLine.GetLength()-1);
  dc.SetTextColor(clr);
 }
 else
 {
  m_strLine+=nChar;
 }
 CSize sz=dc.GetTextExtent(m_strLine);

 CPoint pt;
 pt.x=m_ptOrigin.x+sz.cx;
 pt.y=m_ptOrigin.y;

 SetCaretPos(pt);
 dc.TextOut(m_ptOrigin.x,m_ptOrigin.y,m_strLine);

 dc.SelectObject(pOldFont);

 CView::OnChar(nChar, nRepCnt, nFlags);
}

CTextView::OnTimer(UINT nIDEvent) //文字追随变色的Timer组件代码
{
 // TODO: Add your message handler code here and/or call default
 m_nWidth+=5;

 CClientDC dc(this);
 TEXTMETRIC tm;
 dc.GetTextMetrics(&tm);
 CRect rect;
 rect.left=0;
 rect.top=200;
 rect.right=m_nWidth;
 rect.bottom=rect.top+tm.tmHeight;

 dc.SetTextColor(RGB(255,0,0));
 CString str;
 str.LoadString(IDS_WEIXIN);
 dc.DrawText(str,rect,DT_LEFT);

 rect.top=150;
 rect.bottom=rect.top+tm.tmHeight;
 dc.DrawText(str,rect,DT_RIGHT);

 CSize sz=dc.GetTextExtent(str);
 if(m_nWidth>sz.cx)
 {
  m_nWidth=0;
  dc.SetTextColor(RGB(0,255,0));
  dc.TextOut(0,200,str);
 }
///////////////////////////////////////////////////////////////////////

/
 CView::OnTimer(nIDEvent);
}

///////////////////////////////////////
=======================================================================

====
关于消息的三点:

1.类的头文件中注释宏之间(//{{AFX_VIRTUAL(xxx)。。。//}}AFX_VIRTUAL)
2.源文件的
BEGIN_MESSAGE_MAP(CXXXView, CView)
 //{{AFX_MSG_MAP(CXXXView)
这个位置
//}}AFX_MSG_MAP
3.源文件的viod cXXxx::onXXX ()自定义的处理函数部分

MFC的消息映射(非WIN32的消息循环处理)

WIN32的编程中 消息处理是把所有的消息都做成虚函数,只要定了子类就可以进

行相应
这样会造成内存资源的浪费

后台有个句柄和c++类对象指针的映射表 ,有消息发生后,后台会把消息以及相

关的窗口对应起来,通过该窗口的句柄找到C++对象的指针,然后将指针传给基类

,基类通过消息循环调用了WindowProc,而WindowProc本身是虚函数,在具体子

类定义次函数时必然会调用了OnWinMsg(消息路由部分),OnWinMsg会查找 1和2

从而判断有没有该消息响应的生命,最后找到3 进行处理。--孙鑫先生原文

我理解MFC的消息映射过程是这样的:

消息产生了-》启用那个后台的映射表-》查找响应窗口的句柄-》WindowProc-》

OnWinMsg-》看看1,2部分有无定义,有的话就—》3 ;、、、、没有就算了(交

由基类处理) :)

view中无须用函数获得本窗口句柄,直接用m_hWnd就是本窗口句柄

画线函数及其用法:

win32用法

HDC hdc;
hdc=::GetDC(m_hWnd);//平台sdk的函数需要加::
MoveToEx(hdc,m_old.x,m_old.y,NULL);//先把鼠标移动到最初的点
LineTo(hdc,point.x,point.y);//画函数
::ReleaseDC(m_hWnd,hdc);//用完释放dc

MFC用法

CDC *pDC=GetDC();
pDC->MoveTo(m_old);
pDC->LineTo(point);
ReleaseDC(pDC);
注释同上


更快的MFC(自动会GetDC和ReleaseDC)

//CClientDC dc(GetParent());//若用此法,可以在工具栏上画,即目标是整个

框架,但不包括非客户区域即标题栏和菜单。
CClientDC dc(this);//注意此函数需要的是一个CWnd的指针,而不是hwnd,hwnd

只是cwnd的一个变量可以用cwnd->hwnd 来调用
dc.Moveto(m_old);
dc.LineTO(ponit);

第四种方法,CWindowDC(也自动会GetDC和ReleaseDC)

CWindowDC dc(this);//若用GetParent可以全窗画
dc.MoveTo(m_old);
dc.LineTo(ponit);

桌面本身就是窗口!
获取桌面窗口的句柄: GetDesktopWindow()可以获取一个CWnd;

注意,此处若用CWnd::的就是获取CWnd类的指针
若用sdk的即::类的就是获取这个窗口的句柄!

CPen画笔类
CPen pen(笔形,宽度,RGB颜色);
需要选入设备描述表中!!
应采用SelectObject可以选择pPen,pBrush,pFont,pBitmap(使用时需要加& 如

&pen,其返回值也是指针,需要用 *pen接)
其返回值是先前一个状态的设备,比如定义了新画笔,那么返回值就是旧画笔。

 

CBrush画刷类

颜色画刷
CBrush brush(RGB(255,0,0));
CClientDC dc(this);
dc.FillRect(CRect(m_old,point),&brush);//填充
//画红色矩形

位图画刷

CBitmap bitmap;
bitmap.LoadBitmap(IDB_XXXX);
CBrush brush(&bitmap);
CClientDC dc(this);
dc.FillRect(CRect(m_old,point),&brush);//填充


画矩形最快的方法:
dc.Rectangle(CRect(m_old,point));


透明画刷方法:

CBrush:*pB=CBrush::FromHandle((HBURSH)GetStockObject(NULL_BRUSH));
dc.SelectObject(pB);
dc.Rectangle....
---------------------
Class p
{
public:
       void a()
       {}
       static void b()
』//静态使用成员函数可以在任何地方写 
如, 静态环境不能调用非静态(没有static定义)的成员变量,

非静态的可以引用静态参数

静态的必须初始化!!即在定义前就要做好!

p point;
p:b();就可以


        {}
}
==============================================
ss菜单:

新增菜单命令响应函数的四大文件篇
 
MainFrame
第三优先级
App
第四优先级
Doc
第二优先级
View
最高优先级

个级别都是如果有函数,就不再允许别的类相应

-----------

消息分类

标准消息:
它是CWnd派生的类,它派生的类中都可以接受到这个消息
除了WM_COMMAND外,所有已WM开头的消息

命令消息
菜单,快捷键,工具栏按钮的消息
都是以WM_COMMAND呈现,要区分 需要菜单项的ID号码
CCmdTarget(CWnd的父类)派生的类都可以接受这类消息

通告消息
有控件产生的消息,按键的单击,区分需要ID。。。
也是以WM_COMMAND呈现
CCmdTarget(CWnd的父类)派生的类都可以接受这类消息

CWnd类可以接受所有的消息,但是CCmdTarget只能接受后两者

命令消息的路由:                                     
AfxWndProc->AfxCallWandProc->WindowProc->OnWndMsg  ->.1 OnNotify(通告消

息)  ->OnCmdMsg   
                                                     .2 OnCommand(命令

消息)

标记菜单——带对勾的那种
实现方法:
在相应函数处加入OnCreate中
GetMenu()->GetSubMenu(0)->CheckMenuItem(ID_按键,

MF_BYCOMMAND|MF_CHECKED);//MF_UNCHECKED
0 代表是第几个子菜单
GetMenu是CWnd的一个成员函数,它返回一个指向整个菜单栏的指针
而GetSubMenu只是返回子菜单的指针
CheckMenuItem是在菜单中放置或者取消一个标记

注意如果用索引法,一定能够要计算分割栏!

设置默认菜单(字体变粗)
GetMenu()->GetSubMenu(0)->SetDefaultItem(ID);
一个子菜单只能有一个缺省菜单,即最后一次命名的。

设置图片菜单
SetMenuItemBitmaps
可以有连个位图,选中一个位图,没选中一个位图。
CBitmap cc;
cc.loadbitmap(图片的ID);
SetMenuItemBitmaps(ID_FILE_OPEN,MF_BYCOMMAND,&m_cbp,&m_cbp);

按键变灰色的函数:GetMenu()->GetSubMenu(0)->EnableMenuItem(ID,

MF_BYCOMMAND/MF_DISABLE|MF_GRAYED);需要在mainframe的构造函数中加

m_bAutoMenuEnable=0;


GetSystemMetrics();//获得系统参数,详情请参考msdn可以查到很多有用的数据
移走菜单 : SetMenu(NULL);
回复菜单:
CMenu menu;
menu.LoadMenu(菜单的ID);
SetMenu(&menu);
1.10
CMenu类

VC MFC菜单栏(CMenu)控件 一个API函数SetMenuInfo,这个函数可以设置菜单重绘时选择的填充画刷类型,该函数有两个参数,第一个是要设置的菜单句柄,第二个是一个MENUINFO结构指针,我们只要了解这结构里有一个成员hbrBack就行了,hbrBack是一个画刷句柄,而菜单背景位图就通过创建位图画刷来实现的。//调用CNewMenu类的MeasureItem成员函数。nPostion指明具体要设置的菜单项,可以是菜单项索引,菜单项ID,具体由nFlags参数指明,为MF_BYPOSITION,则以菜单项索引指明, 阅读详情

相关推荐

【PB】带位图的菜单项实现

当读者在使用 Microsoft Word 97 时,是否曾注意到 Word 的部分菜单项旁有一个小巧的图标 (如图1所示),初次见到时,是否有耳目一新的感觉,是否想过让 PowerBuilder 创建的菜单项和他一样漂亮。只可惜 Sybase 至今仍未实现该功能,令得广大的 PowerBuilder 用户只能去羡慕别人。不过文本将探讨如何用 PowerBuilder 和 Win32 API 来实

keyssoft的乌托邦 2134

易语言给窗口菜单设置图标api实现

易语言给窗口菜单设置图标api实现源码,设置菜单图标,GetMenu,GetSubMenu,SetMenuItemBitmaps,LoadImageA,ModifyMenu,GetSystemMetrics,GetMenuItemID

解决python安装某些包(Annoy)需要依赖VC++ 14.0的方案

pip install package的时候,可能就会遇到缺失VC++ 14.0的情况。 有些包可以通过查找对应的whl安装解决。网址如下 http://www.lfd.uci.edu/~gohlke/pythonlibs/ 但也有些包并没有现成的whl包,例如annoy包。刚好这玩意在conda install里头也没有对应的window版本,于是只能乖乖去微软官网下最新的vs_build...

HJXINKKL的博客 6952

MFC EDIT 回车事件响应之 OnChar() 实现的DOME MFC_EDIT_OnChar.rar

MFC EDIT 回车事件响应之 OnChar() 实现的DOME,真实有效,采用PreTranslateMessage方法和 OnChar() 结合实现。

MFC菜单栏(CMenu)控件

1.设置菜单左边显示位图和背景位图 CMenu类里要了解的函数 SetMenuItemBitmaps//设置菜单项左边的位图 函数定义:BOOL SetMenuItemBitmaps( UINT nPosition, UINT nFlags, const CBitmap* pBmpUnchecked, const CBitmap* pBmpChecked ); nPostion

lanmeng_smile的专栏 5896

菜单基本操作

前言 本主要介绍菜单的基本使用,在MFC中用于指定菜单项位置有两种方式,它们是MF_BYCOMMAND和MF_BYPOSITION,在菜单操作中经常用到,具体含义如下: MF_BYCOMMAND 是指将相关参数解释为菜单项ID(缺省值)MF_BYPOSITION 是指将相关参数解释...

weixin_30596343的博客 1017

使用 Windows Imaging Component (WIC) 为MFC菜单项添加图标

说到为MFC菜单添加图标,比较容易想到的是通过CMenu类提供的接口SetMenuItemBitmaps来实现这个需求,该函数的原型如下: BOOL SetMenuItemBitmaps( UINT nPosition, UINT nFlags, const CBitmap* pBmpUnchecked, const CBitmap* pBmpChecked); ...

zy380526481的博客 1191

孙鑫视频VC++深入详解学习笔记

<br />VC++深入详解学习笔记<br />Lesson1: Windows程序运行原理及程序编写流程<br />Lesson2: 掌握C++基本语法<br />Lesson3: MFC框架程序剖析<br />Lesson4: 简单绘图<br />Lesson5: 文本编程<br />Lesson6: 菜单编程<br />Lesson7: 对话框编程<br />Lesson9: 定制应用程序的外观<br />Lesson10: 绘图控制<br />Lesson11 图形的保存和重绘<br />Lesso

cora2008的专栏 3132

吐血安装pycocotools,VC++14.0 required

前因 因为某些原因想试试看目标检测,于是下载了RCNN,但是卡在了安装TensorFlow Object Detection API 这一步。 网上在这一步翻车的人。。。。不计其数。 到了安装pycocotools总会报错: 原因是系统环境缺少VC ++ 14.0 于是本人开始了五花八门的排错大法。 后果 1.所谓缺啥补啥,想绕过安装VC++ 14.0,尝试直接pip pip install git+https://github.com/philferriere /cocoapi.git#subdirect

qq_35789702的博客 1396

VC++常用功能开发

系列文章目录 第一章:VC++ ini配置文件封装类源代码 第二章:VC++实现二维码(显示+保存图片)功能源代码 第三章:VC++ 调节系统音量(与任务栏音量同步)源代码 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 系列文章目录 前言 一、pandas是什么? 二、使用步骤 1.引入库 2.读入数据 总结 前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启..

Keivin 17万+

VC++ 2015 Build Tools:C++ 开发环境必备

本文还有配套的精品资源,点击获取 简介:VC++ 2015 Build Tools 是一套由微软提供的开发工具,用于构建 C++ 应用程序,尤其适用于 Visual Studio 2015 版本。这些工具包含编译器、链接器和其他组件,允许开发者在没有完整安装 Visual Studio 的情况下进行 C++ 项目的构建和编译。这对于那些只需要构建环境而不需要 IDE 的用户...

weixin_42583683的博客 4376

VC++深入详解学习笔记

VC++深入详解学习笔记 Lesson1: Windows程序运行原理及程序编写流程 Lesson2:掌握C++基本语法 Lesson3: MFC框架程序剖析 Lesson4:简单绘图 Lesson5:文本编程 Lesson6:菜单编程 Lesson7:对话框编程 Lesson9:定制应用程序的外观 Lesson10:绘图控制 Lesson11图形的保存和重绘 Les...

史D芬周 1917

win10安装wordcloud安装失败(VC++ 14queshi)解决方法

VC++ 14的缺失问题 安装wordcloud时出现报错信息: error: Microsoft Visual C++ 14.0 is required. Get it with “Microsoft Visual C++ Build Tools”: http://landinghub.visualstudio.com/visual-cpp-build-tools 解决方法 1.安...

Wang Gangdan的博客 2779

30秒搞定VC++14.0安装配置

好的,以下是关于获取和配置 Microsoft Visual C++ 14.0 的指南:Microsoft Visual C++ 14.0(即 Visual Studio 2015 的 C++ 编译器)通常作为 Visual Studio 2015 的一部分分发。微软官方并未提供独立的 VC++ 14.0 安装包。以下是获取和配置的完整步骤:下载 Visual Studio 2015 访问 Visual Studio 旧版本下载页面,选择 Visual Studio 2015 的社区版(免费)。选择安装镜

q_438141的博客 1139

python 安装twisted库时提示缺少VC++ 14.0 (解决方案)

说明:出现这种问题,不需要去安装VC++14.0 ,只需要去python库上下载相应的包安装即可。1.在python库中下载twisted相应的包(.whl文件)网址:https://www.lfd.uci.edu/%7Egohlke/pythonlibs/2.从cmd中进入相应文件夹,进行pip安装即可。...

HunterYoung0718的博客 1万+

从源码编译到一键部署:VC++14.0开发生命周期优化

工具链统一:所有开发者使用相同的构建环境配置渐进式改造:先验证关键路径再逐步推广到全项目监控常态化:持续收集构建指标指导优化方向最近发现InsCode(快马)平台对C++项目支持也很友好,其云端环境预装了常用构建工具,能直接导入VC++项目进行协作开发。特别是部署功能相当省心,编译好的程序可以直接生成可访问的演示链接,省去了配置Web服务器的麻烦。对于需要频繁演示的项目,这种即编即现的方式确实大幅提升了开发效率。平台还内置了性能分析工具,能直观看到各模块的构建耗时,帮助持续优化关键路径。

CrystalwaveStag的博客 1036
上一篇: MY->> 读书笔记.每日更新();
下一篇: 新手上路_vc多线程例子,关于AfxBeginThread的用法
leptonic
博客等级 码龄23年 11粉丝 27原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值