小编c00*_*0fd的帖子

没有花括号的枚举形式

我今天亲眼目睹了这样一种形式enum,在VS 2017下编译:

enum ens en1, en2, en3;
Run Code Online (Sandbox Code Playgroud)

然后它被用作这样的:

int n = en2;
Run Code Online (Sandbox Code Playgroud)

所以我的问题是,enum它的形式是什么以及n后来为什么会这样0


实例:

enum ens en1, en2, en3;

int main()
{
    int n = en2;
}
Run Code Online (Sandbox Code Playgroud)

使用默认编译器选项编译而不发出警告

c++ visual-studio-2017

5
推荐指数
1
解决办法
273
查看次数

如何在VS2017中禁用“警告MSB8051:不建议使用针对Windows XP的支持”?

由于大约是Visual Studio 2017的最新更新之一,因此我在构建MFC项目期间开始收到以下警告:

1> C:\ Program Files(x86)\ Microsoft Visual Studio \ 2017 \ Community \ Common7 \ IDE \ VC \ VCTargets \ Platforms \ x64 \ PlatformToolsets \ v141_xp \ Toolset.targets(39,5):警告MSB8051:支持定向Windows XP已过时,以后的Visual Studio版本中将不再提供。有关更多信息,请参阅 https://go.microsoft.com/fwlink/?linkid=2023588

如何禁用此警告?

这是项目配置:

在此处输入图片说明

mfc visual-studio-2017

5
推荐指数
1
解决办法
1057
查看次数

针对 XP 编译时,GDI+ 库在 VS2017 中导致“错误 C2760:语法错误:意外标记‘标识符’,预期‘类型说明符’”

我尝试将 GDI+ 的以下定义包含到在 Visual Studio 2017 下编译的 Win32 C++ 项目中:

#include <objidl.h>
#include <gdiplus.h>
#pragma comment (lib,"Gdiplus.lib")
Run Code Online (Sandbox Code Playgroud)

我需要编译这个项目以支持Windows XP。所以在项目属性中我选择:Platform Toolsetas Visual Studio 2017 - Windows XP (v141_xp)

在此输入图像描述

但是当我编译它时,GDI+ 库给了我这个:

1>c:\program files (x86)\microsoft sdks\windows\v7.1a\include\objbase.h(239): error C2760: syntax error: unexpected token 'identifier', expected 'type specifier'
1>c:\program files (x86)\microsoft sdks\windows\v7.1a\include\gdiplusheaders.h(891): error C4596: 'EmfToWmfBits': illegal qualified name in member declaration
1>c:\program files (x86)\microsoft sdks\windows\v7.1a\include\gdiplusstringformat.h(220): error C4596: 'GetTrimming': illegal qualified name in member declaration
Run Code Online (Sandbox Code Playgroud)

知道如何解决这个问题吗?

c++ gdi+ visual-studio-2017

5
推荐指数
2
解决办法
6389
查看次数

使用C++,2012风格创建所有者绘制的菜单

我的任务目标很简单 - 在我的上下文菜单中添加图标,通过调用TrackPopupMenu API显示.但显然编写Windows就像用勺子划动一样,除了制作所有者绘制的菜单之外,没有简单的方法来添加图标.所以我做了一些搜索,提出了一堆关于所有者绘制菜单主题的C++代码,但到目前为止我找不到任何对我有用的代码.原因很简单 - 它绘制的菜单看起来像是从Windows 95中出来的东西......那么有没有办法让自己绘制的菜单具有默认的Windows 7外观?

PS.如果有一种更简单的方法可以向菜单项添加图标,比如LoadIcon然后使用ChangeMenuItem进行设置,我会很高兴有人能告诉我如何,因为我很乐意用它代替它...

PS2.好吧,我喜欢它需要太长时间.为什么我不能在这个操作系统中做最简单的任务:(我做了一个小测试项目来说明问题.我用自己的CreatePARGBBitmapFromIcon方法加载位图,将图标转换为PARGB位图(如下所示)然后在两个地方显示它:CStatic控件(屏幕中间,看起来很好),以及菜单项(完全相同).这是Windows 7和XP的截图(两者看起来完全不同):

在此输入图像描述

在此输入图像描述

伙计们,说真的,我在这里失踪了什么????

PS3.感谢@DavidHeffernan,我能够解决它.这是有效的C++/MFC解决方案,这是一个解决方案基于的文章,这里有几个屏幕截图:

在此输入图像描述 在此输入图像描述

仅供参考,我花了大约两天时间才解决这个问题 - 在OS X或iOS上需要大约2分钟的时间......

最后,我完全赞同源文章中我最喜欢的一些引言:

如果只有简单一致的API来制作菜单项图标,那么所有这些黑客和食谱都将毫无价值.不幸的是,Windows和Microsoft应用程序中始终存在的菜单图标从来没有得到任何合适的API,而且每个主要Windows版本都会使这些图标工作的方法发生变化,这使我们的开发人员浪费时间将我们的应用程序"移植"到新的" shinny"Windows而不是做一些富有成效的事情.

这总结得很好:

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARGH!为什么微软被白痴填充?

c++ winapi contextmenu

4
推荐指数
1
解决办法
3614
查看次数

使用t-SQL选择已删除记录的数量

我似乎无法弄清楚如何用SQL Server 2008选择以前删除的记录的数量.它是这样的吗?

DELETE FROM [table] WHERE [id]=10
SELECT SCOPE_IDENTITY()
Run Code Online (Sandbox Code Playgroud)

sql sql-server sql-server-2008

4
推荐指数
1
解决办法
1万
查看次数

从Windows服务安全地存储数据的位置?

我正在使用C#编写一个服务,该服务应该在Windows平台上作为"本地系统"运行.我可以在注册表中存储少量数据,但如果我想在文件中存储更多数据,我在哪里放置这样的文件?还有如何保护这些数据免受具有较低访问权限的用户的修改?

.net c# windows security service

4
推荐指数
1
解决办法
1525
查看次数

代码签名MSI名称问题,WiX

我使用WiX编写了MSI安装程序.MSI也使用我的代码签名证书签名.当我开始安装时,我在Windows 7上收到以下安全警告:

在此输入图像描述

但由于某种原因,程序名称只是我的MSI的名称或我添加到它的任何东西.

有没有办法给它一些用户友好的名称,以显示在该警告中?

windows-installer wix code-signing digital-signature

4
推荐指数
1
解决办法
1428
查看次数

错误CS0027:关键字'this'在当前上下文中不可用

我有一个构造函数的以下初始化:

public partial class WizardPage1 : WizardPage
{
    public WizardPage1()
        : base(0, getLocalizedString(this.GetType(), "PageTitle"))
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

哪里

public static string getLocalizedString(Type type, string strResID)
{
}
Run Code Online (Sandbox Code Playgroud)

this.GetType()部分导致以下错误:

错误CS0027:关键字'this'在当前上下文中不可用

知道怎么解决吗?

.net c# constructor

4
推荐指数
1
解决办法
8922
查看次数

FindFirstFile在根路径上失败

我正在使用以下代码来获取有关文件系统目录的信息:

LPCTSTR pStrPath = L"D:\\1";
WIN32_FIND_DATA wfd;
HANDLE hDummy = ::FindFirstFile(pStrPath, &wfd);
if(hDummy != INVALID_HANDLE_VALUE)
{
    //Use 'wfd' info
    //...

    ::FindClose(hDummy);
}
else
{
    int error = ::GetLastError();
}
Run Code Online (Sandbox Code Playgroud)

该代码可以正常工作,除非我指定了根路径:

  • D:\ - 错误代码 ERROR_FILE_NOT_FOUND
  • D: - 错误代码 ERROR_FILE_NOT_FOUND
  • \\SRVR-1\share - 错误代码 ERROR_BAD_NET_NAME
  • \\SRVR-1\share\ - 错误代码 ERROR_BAD_NET_NAME
  • \\SRVR-1\HiddenShare$ - 错误代码 ERROR_BAD_NET_NAME

但是它在以下情况下有效:

  • D:\1 -没有错误
  • \\SRVR-1\share\1 -没有错误
  • \\SRVR-1\HiddenShare$\1 -没有错误

知道为什么吗?

c++ windows winapi ntfs

4
推荐指数
1
解决办法
2016
查看次数

CString + =运算符性能问题

我正在研究一个较旧的MFC/C++项目,该项目使用MFC的CString类来解析大型文本文件以处理字符串.我注意到在解析过程中有很多小部件添加到整个大型CString对象中:

//'strContainer' = CString
//'tag' = CString of a much smaller size
strContainer += L"<" + tag + L">";
Run Code Online (Sandbox Code Playgroud)

strContainer变量达到一定的较大尺寸时,上面的运算符似乎会降低CString的整体性能.我想这种情况会发生,因为+=操作员经常重新分配内存.

所以我很好奇,有没有办法改善这个?

PS1.我不知道预先分配结果字符串的大小.

PS2.由于项目本身的复杂性,我必须坚持使用CString.(或者,我无法切换到Boost或其他更新的实现.)

c++ performance mfc cstring

4
推荐指数
1
解决办法
1615
查看次数