VC6

VC6.0建立新工程的步骤---解决win11使用不了VC6的方法以及自用版本VC6下载 1-解决win11使用不了VC6的方法 找到vc6\Microsoft Visual Studio\Common\MSDev98\Bin文件夹下的MSDEV.EXE 在属性里,在MSDEV名称后加上1。然后将兼容性改成XP(SP2)。 至此即可,正常运行VC6拉。但是应该也 没有什么人用了。都是很老的学习的书里才用这个软件了。如果再不行,就用管理员权限运行。 2– 如何使用VC6建立一个工程: file–新建 工程–win32ConsoleApplication 右上角输入工程名称并更改位置。 阅读详情

MFC中消息的分类

1.标准消息

除了WM_COMMAND之外,所有以WM_开头的消息都是标准消息,

从CWnd派生的类都可以接受这类消息

2.命令消息

来自菜单、加速键或工具栏按钮的消息。这类消息都以WM_COMMAND呈现。在MFC中,通过菜单项的标识ID来区分不同的命令消息,在SDK中通过消息的wParam参数识别。从CCmdTarget派生的类,都可以接受到这类消息。

3.通告消息

有控件产生的消息,例如,按钮的单击,列表框的选择等均产生此类消息,为的是向其父窗口(通常是对话框)通知事件的发生。这类消息也是以WM_COMMAND形式呈现。

从CCmdTarget派生的类都可以接受到这类消息。

 

命令消息的路由

 

  消息路由

 

 

 

一个菜单拦可以有若干个子菜单,一个子菜单又可以有若干个菜单项等。对菜单栏的子菜单由左至右建立从0开始的索引。对特定子菜单的菜单项由上至下建立了从0开始的索引。访问子菜单和菜单项均可以通过其索引或标识(如果有标识的话)进行。
相关重要函数:
CMenu* GetMenu( ) ;//CWnd::GetMenu得到窗口菜单栏对象指针。
CMenu* GetSubMenu(  ) ;//CMenu::GetSubMenu获得指向弹出菜单对象指针
UINT CheckMenuItem( );//CMenu::CheckMenuItem Adds check marks to or removes check marks from menu items in the pop-up menu.
BOOL SetDefaultItem();//CMenu::SetDefaultItem Sets the default menu item for the specified menu.
BOOL SetMenuItemBitmaps( );//CMenu::SetMenuItemBitmaps 设置位图标题菜单。
UINT EnableMenuItem();//CMenu::EnableMenuItem使菜单项有效,无效,或变灰。
BOOL SetMenu( CMenu* pMenu );//CWnd::SetMenu在当前窗口上设置新菜单或移除菜单。
HMENU Detach( );//CMenu::Detach Detaches a Windows menu from a CMenu object and returns the handle.
说明:
1)在计算子菜单菜单项的索引的时候,分隔栏符也算索引的。
2)int GetSystemMetrics()获取系统信息度量。可以用它来获取菜单标题的尺寸从而设置位图标题菜单中位图的大小。

3)在MFC中MFC为我们提供了一套命令更新机制,所有菜单项的更新都是由这套机制来完成的。所以要想利用CMenu::EnableMenuItem来自己控制菜单使用或不使用变灰等,必须要在CMainFrame的构造函数中将变量m_bAutoMenuEnable设置为FALSE。
4)Create a CMenu object on the stack frame as a local, then call CMenu’s member functions to manipulate the new menu as needed. Next, call CWnd::SetMenu to set the menu to a window, followed immediately by a call to the CMenu object’s Detach member function. The CWnd::SetMenu member function sets the window’s menu to the new menu, causes the window to be redrawn to reflect the menu change, and also passes ownership of the menu to the window. The call to Detach detaches the HMENU from the CMenu object, so that when the local CMenu variable passes out of scope, the CMenu object destructor does not attempt to destroy a menu it no longer owns. The menu itself is automatically destroyed when the window is destroyed.
5)You can use the LoadMenuIndirect member function to create a menu from a template in memory, but a menu created from a resource by a call to LoadMenu is more easily maintained, and the menu resource itself can be created and modified by the menu editor.
 
6)EXAMPLE:
CMenu menu;//定义为局部对象
menu.LoadMenu(IDR_MAINFRAME);
SetMenu(&menu);
menu.Detach();// 这里menu对象作为一个局部对象。使用Detach()从menu对象中分离窗口菜单句柄,从而当menu对象析构的时候窗口菜单资源不随之销毁。
 
5,命令更新机制:
菜单项状态的维护是依赖于CN_UPDATE_COMMAND_UI消息,谁捕获CN_UPDATE_COMMAND_UI消息,MFC就在其中创建一个CCmdUI对象。这个CCmdUI没有继承与任何的类。
在后台操作系统发出WM_INITMENUPOPUP消息,然后由MFC的基类如CFrameWnd接管并创建一个CCmdUI对象和第一个菜单项相关联,调用对象成员函数DoUpdate()(注:这个函数在MSDN中没有找到说明)发出CN_UPDATE_COMMAND_UI消息,这条消息带有指向CCmdUI对象的指针。此后同一个CCmdUI对象又设置为与第二个菜单项相关联,这样顺序进行,直到完成所有菜单项。
更新命令UI处理程序仅应用于弹出式菜单项上的项目,不能应用于永久显示的顶级菜单项目。

 

CCmdUI demo

 

void CMainFrame::OnUpdateFileNew(CCmdUI* pCmdUI)
{
 // TODO: Add your command update UI handler code here
// if(ID_FILE_NEW==pCmdUI->m_nID)
//  pCmdUI->Enable(FALSE);
 if(0==pCmdUI->m_nIndex)
  pCmdUI->Enable(FALSE);
}

 

个人觉得这是面向接口编程的体现,应该是让 Cmenu 实现 CCmdUI的接口的

 

如果要想让工具栏上的某个图标与菜单项的某个菜单相关联,只需要将图标的ID设置为该菜单项的ID

 

 

 

利用调用TrackPopupMenu函数,手工添加弹出菜单:
1)用资源管理器添加一个菜单资源
2)在鼠标右键消息响应函数中,加载菜单资源,并获得要显示的子菜单指针,并用该指针调用TrackPopupMenu函数便完成任务(但要注意:鼠标响应函数传进来的坐标是客户区坐标,而TrackPopupMenu函数中使用的是屏幕坐标,在调用TrackPopupMenu前要调用ClientToScreen客户区坐标到屏幕坐标的转换)
事例代码:
CMenu menu;
menu.LoadMenu(IDR_MENU1);
CMenu *pPopup=menu.GetSubMenu(0);
ClientToScreen(&point);
pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y,this);
说明:
CWnd::ClientToScreen(..);//将一个坐标点或一个矩形区域坐标转换成屏幕坐标。
CMenu::TrackPopupMenu(..);//在指定位置以指定的方式显示弹出菜单。
CWnd::ScreenToClient(..);
//Converts the screen coordinates of a given point or rectangle on the display to client coordinates. 
 
当弹出菜单属于框架窗口的时候(可在TrackPopupMenu函数参数中设置),弹出菜单上的消息,在路由的时候,仍然遵循View-DOC-MainFrame-APP的响应顺序。

 

 

命令消息是到OnCommand函数的时候完成路由的。
由于CWnd::OnCommand 是个虚函数,可以在框架类中重写OnCommand函数,从而可以截获菜单消息使它不再往下(VIEW类)路由。
例:
BOOL CMainFrame::OnCommand(WPARAM wParam, LPARAM lParam)
{
 // TODO: Add your specialized code here and/or call the base class
 int MenuCmdId=LOWORD(wParam);//取命令ID
 CMenu2View *pView=(CMenu2View*)GetActiveView();//获取当前VIEW类指针
 if(MenuCmdId>=IDM_PHONE1 && MenuCmdId<IDM_PHONE1+pView->m_strArray.GetSize())//消息范围判断
 {
  CClientDC dc(pView);
  dc.TextOut(0,0,pView->m_strArray.GetAt(MenuCmdId-IDM_PHONE1));
  return TRUE;
   //函数返回,避免调用CFrameWnd::OnCommand函数,在CFrameWnd::OnCommand中截获的消息会交由VIEW类处理
 }
 return CFrameWnd::OnCommand(wParam, lParam);
  //调用基类OnCommand函数,在CFrameWnd::OnCommand中截获的消息会交由VIEW类处理
}
 
MSDN说明:
virtual BOOL OnCommand( WPARAM wParam, LPARAM lParam );
//The framework calls this member function when the user selects an item from a menu, when a child control sends a notification message, or when an accelerator keystroke is translated.
OnCommand processes the message map for control notification and ON_COMMAND entries, and calls the appropriate member function.
Override this member function in your derived class to handle the WM_COMMAND message. An override will not process the message map unless the base class OnCommand is called.
 
LOWORD与HIWORD宏
WORD LOWORD(
  DWORD dwValue  // value from which low-order word is retrieved
);
WORD HIWORD(
  DWORD dwValue  // value from which high-order word is retrieved
);
 
//The LOWORD macro retrieves the low-order word from the given 32-bit value.
//The HIWORD macro retrieves the high-order word from the given 32-bit value.
 

CFrameWnd::GetActiveView
CView* GetActiveView( ) const;//获取当前视窗口指针(单文档框架中)

 
17,源文件是单独参与编译的。

 

Win10 64bit安装VC6+VC6助手 百度云盘链接: https://pan.baidu.com/s/1cIixsi密码:ggq81.安装VC6解压缩vc6压缩包并安装。安装成功后复制压缩包中的另一个文件 MSDEV.EXE粘贴到Microsoft Visual Studio\Common\MSDev98\Bin目录覆盖同名文件即可(如图,我的VC6装在F盘)2.安装VC助手VA1.首先请确认你已经卸载了此程序旧的版本!2.运行Set... 阅读详情

相关推荐

VC7到VC6工程的转换工具(转)

下载工程转换工具下载源代码 一、简介这个工具自动将VC7工程转换回VC6工程,换言之,就是将.sln/.vcproj这两个文件转换到.dsw/.dsp文件。注意:本转换器在转换期间只是建立(或覆盖).dsw/.dsp文件,并没有改变任何源代码。二、由来首先当然是MS并没有提供这样的工具,MS在出售开发工具时并没有提供工程回退的转换功能使你感到很伤脑筋,甚至开始憎恨MS。没有这样的工具,虽然你可以通

乱炖 3014

MFC消息机制

MFC消息机制

weixin_47328424的博客 1226

VC6显示行号插件VC6LineNumberAddin详解

VC6LineNumberAddin 是专为 Visual C++ 6.0 环境设计的轻量级插件,其核心目标是通过增强代码编辑器的可视化能力,弥补 VC6.0 缺乏行号显示这一长期存在的用户体验缺陷。该插件不仅实现了基本的行号显示功能,还结合 VC6.0 的 IDE 特性,引入了高亮、对齐、同步刷新等辅助功能,从而显著提升开发者的调试效率与代码可读性。以下将从插件的功能定位、内部机制、支持特性及同类插件对比四个维度,深入剖析其设计与实现。

weixin_35950531的博客 584

windows消息机制(MFC)

windows消息机制(MFC) 消息分类与消息队列 Windows中,消息使用统一的结构体(MSG)来存放信息,其中message表明消息的具体的类型, 而wParam,lParam是其最灵活的两个变量,为不同的消息类型时,存放数据的含义也不一样。 time表示产生消息的时间,pt表示产生消息时鼠标的位置。 按照类型,Windows将消息分为: (0) 消息ID范围 系统定...

u011555996的博客 1165

visual c++ 6.0

visual c++ 6.0

对话框VC源代码:override_fontdlg

对话框源代码:override_fontdlg 关键字:override_fontdlg,对话框

MFC原理与方法(二)

MFC原理与方法(二)一、前言二.类向导的使用三、MFC消息管理(1).MFC消息映射机制(3).消息处理 一、前言 时间过得好快啊,又是一个星期过去了! 二.类向导的使用 类向导是一个很好的工具,我们可以通过类向导来快速添加生成消息处理函数。但是,你可能会在第一次使用类向导的时候会报错。错误如下。 这是因为文件的缺失导致的,只需要把C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\bin目录下的RcDll.Dll文件复制到C:\Program Fil

a2748786010的博客 2039

用 Python 和 uiautomation 实现微信批量发送

思路是这样,将要发送的人员名单(包括称呼)以及发送内容都维护到Excel里,程序运行时读取Excel里内容,自动搜索人员姓名(微信昵称或备注名),填入要发送的内容,拼接上称呼(如果需要的话)自动点击发送,这样轮巡直至名单人员全部发送完成。、

jankingdom的专栏 1471

MFC的消息机制

今天重新整理MFC的消息机制,最终的结果应该是利用win32程序模拟一个MFC的消息链。 1.标准消息  除WM_COMMAND之外,所有以WM_开头的消息。 从CWnd派生的类,都可以接收到这类消息。  2.命令消息  来自菜单、加速键或工具栏按钮的消息。这类消息都以WM_COMMAND呈现。在MFC中,通过菜单项的标识(ID)来区分不同的命令消息;在SDK中,通过消息的wParam参数识别。 CCmdTarget派生的类,都可以接收到这类消息。  3.通告消息 由控件产生的消息,例

luhouxiang的专栏 9715

Dify 从入门到精通:第一篇 - 基础介绍与快速上手

Dify是一个开源的低代码平台,旨在简化大型语言模型(LLM)应用的开发流程。本文作为"Dify从入门到精通"系列的首篇,全面介绍了Dify的核心概念、安装步骤和基本使用方法。文章首先解析了Dify的多模型支持、低代码开发等特点,然后详细讲解了基于Docker的安装配置过程,包括系统要求、环境变量设置等。通过创建一个邮件助手应用的实际示例,展示了Dify的可视化工作流设计功能。最后简要介绍了高级特性和最佳实践,为后续深入学习奠定基础。本文为开发者提供了从零开始使用Dify构建AI应用的完

IT深耕十余载,大道之简 1146

生信人的一天~HIFI数据+HIC数据组装基因组

HIFI+HIC数据组装基因组!

qq_43337286的博客 9528

【MFC】消息机制

1.Windows消息机制 Windows应用程序是通过消息驱动的,在MFC软件开发时,进行界面操作经常要用到消息,通过消息对应的处理函数来实现响应的操作。比如,用户操作窗口,就会产生消息,送给对应的消息处理函数进行处理,对用户的操作做出一些反应。 2.MFC消息映射 MFC使用消息映射机制来处理消息,具体表现就是消息和消息处理函数一一对应的消息映射表,以及消息处理函数的声明和是实现。当窗口收到消息时,会在消息映射表中寻找对应的处理函数,然后由消息处理函数做出相应的处理。 3.自定义消息的方法 M

summersneverdie的博客 2457

Apple 网页 SRP 登录系列文章(四):Hashcash 工作量证明与完整登录流程

本文是Apple SRP登录系列文章的收官之作,重点解析了Apple独有的Hashcash工作量证明机制并展示了完整的登录流程实现。文章详细介绍了Hashcash的安全目的、格式标准、计算核心算法及难度评估方法,特别提供了Python实现代码。同时还讲解了如何动态获取服务器Hashcash参数以及建立容错机制。最后呈现了完整的Apple SRP登录主函数架构,为开发者提供了从理论到实践的全面指导。全文通过代码示例和流程分析,系统性地阐述了Apple安全登录机制的技术细节。

Sayid_Des的专栏 629

VC7到VC6工程的转换工具

<!-- alimama_pid="mm_10249644_1605763_4929893"; alimama_titlecolor="707070"; alimama_descolor ="CCCCCC"; alimama_bgcolor="FFFFFF"; alimama_bordercolor="FFFFFF"; alimama_linkcolor="DADA

4144

宝塔面板磁盘扩容后不生效?5步搞定Linux服务器磁盘空间更新(附详细命令)

本文详细解析了Linux服务器磁盘扩容后宝塔面板显示不生效的常见问题。通过理解磁盘、分区、文件系统三层逻辑,提供5步解决方案:检查磁盘状态、安装growpart工具、扩展分区、使用resize2fs命令扩展文件系统,并最终验证结果。文中附有详细命令和针对XFS、LVM等进阶场景的指南,帮助用户彻底解决磁盘空间更新问题。

weixin_29271263的博客 127

BEV感知技术全景解析:从纯视觉到多传感器融合的实战指南

本文全面解析了自动驾驶中的BEV感知技术,从纯视觉到多传感器融合的实战应用。文章深入探讨了BEV如何提供“上帝视角”,对比了IPM、Lift-Splat-Shoot及Transformer等核心实现范式,并详细阐述了多传感器融合(尤其是中融合)的工程实践与优势,为开发者提供了从理论到原型搭建的完整指南。

win55的博客 1138

完全卸载VC6.0

对于无法打开控制面版的用户,可考虑以下的方法卸载VC6.0: 一、关闭VC6.0,及VC6.0对应的进程MSDEV.EXE。 二、删除文件..\Microsoft Visual Studio\Common和..\Microsoft Visual Studio\VC98,也就是删除Comm目录和VC98目录。 三、打开360安全卫士--》电脑清理--》全选--》一键清理。同时要把注册表清理一下。 四、在“开始”--》运行--》regedit-->注册表管理器,清理与VC6.0相关的项目。

sanqima的专栏 5万+

2024年全国青少年信息素养大赛复赛真题(算法创意实践挑战赛C++试卷:带解析)

2024年全国青少年信息素养大赛复赛真题(算法创意实践挑战赛C++试卷:带解析)

王老师青少年编程 4784

win7下安装VC6LineNumberAddin方法[VC6行号插件]及问题解决方案

1.下载VC6LineNumberAddin插件及注册文件。(以下是参考链接:) http://download.youkuaiyun.com/download/yilingyeluo/5171654 http://static.ishare.down.sina.com.cn/9788001.rar?ssig=9QjlNv3%2BjO&Expires=1364054400&KID=sina,i

yilingyeluo 6375

使用SIMD思想进行memcpy的优化

arm64平台的memcpy的性能优化,相比C库提升30~40%,SIMD优化思路

zhaoxin1989的博客 1万+

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

从VC6到VC9移植代码问题总结

    当年在学校学习C编程的时候用的是TC2.0,后来学C++用TC3.0,有一天突然发现Borland C++ 3.1的IDE比较好用,于是改用BC31,然后是BC4,但是到了BC5(还有BC5.02)的时候就玩不下去了,因为我那台只有16M内存的P100实在是跑不动这个庞然大物,在OWL和MFC之间“痛苦地”抉择了一部电影的时间后,我决定放弃添加内存的计划,改用Visual C++试试。因为

oRbIt 的专栏 2万+

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

VC2005 VC2003 VC6工程的转换

VC2005 转VC2003:1 修改.sln记事本打开项目的sln文件,修改Format Version 9.00 为 Format Version 8.002 修改.vcproj文件,修改Version="8.00"为Version="7.10"这样就可以用VC2003打开VC2005的工程项目了。VC2003转VC6链接:http://www.vckb

逍遥子的专栏 4083

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

VC6 or VC7,让转变不再迷茫

放假回来,去优快云上一转,第一次发现了VC.NET版,因为我以前一直是不瞄.NET社区的(不是狂妄,是不懂),在上面看到一篇问对于VC.NET的种种顾虑的文章,突然想起在学校的BBS上也有人问类似的问题,突然想说两句。于是起了一个很狂的题目,说点鄙人的见解,希望对后来者有帮助。那位老兄的问题中有一个是关于有VC6到VS.NET的转移的顾虑,这种顾虑我以前也是有的,例如我暂时不想学.NET,那

A Newbie On The Way - C. ZHANG's Mind 2745

VC6中使用VC2005编译的DLL问题

 在VC6的工程中,使用VC2005编译的DLL的一个解决办法。VC6中支持MFC的工程中直接链接VC2005的库时,会出现编译错误。原因在于VC6工程中的stdafx.h文件中包含了 afx.h 文件,VC6与VC2005中都有afx.h文件,但是内容却有区别VC6的 afx.h 文件中有以下的定义:#ifndef _AFXDLL    #ifndef _UNICODE        #ifde

luck_gg的专栏 1331

[转]从VC6到VC8的迁移

转载: http://www.cppblog.com/sandy/archive/2006/03/13/4081.html作为C++编译器,从vc6到vc8最大的调整就是对C++标准的支持更好了。   我发现的几点不同。a. For 循环的声明      Vc6: for(int i   (ok)Vc8: for(int i   (illegal)      int i; for(i  

Achilles_Sea的专栏 878

VC6.0中OpenCV配置

Opencv库安装 1. 安装所需要的软件    1、 安装OpenCV          可以从网上下载OpenVC高级版本,但这里使用的 是OpenCV 1.0 ,缺省安装的目录是c:\OpenCV 1.0   点击Next,然后一直点击Next。   步骤中此处划勾点上  ,下一步完成。   2 编译OpenCV 此处选择用VC++ 6.0编译。 编译步骤:   l

he_qiao_2010的专栏 8639
上一篇: VC5
下一篇: Reflection conclusion
xyjnufop
博客等级 码龄19年 10粉丝 99原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值