我今天亲眼目睹了这样一种形式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)
使用默认编译器选项编译而不发出警告
由于大约是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。
如何禁用此警告?
这是项目配置:
我尝试将 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)
知道如何解决这个问题吗?
我的任务目标很简单 - 在我的上下文菜单中添加图标,通过调用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!为什么微软被白痴填充?
我似乎无法弄清楚如何用SQL Server 2008选择以前删除的记录的数量.它是这样的吗?
DELETE FROM [table] WHERE [id]=10
SELECT SCOPE_IDENTITY()
Run Code Online (Sandbox Code Playgroud) 我正在使用C#编写一个服务,该服务应该在Windows平台上作为"本地系统"运行.我可以在注册表中存储少量数据,但如果我想在文件中存储更多数据,我在哪里放置这样的文件?还有如何保护这些数据免受具有较低访问权限的用户的修改?
我有一个构造函数的以下初始化:
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'在当前上下文中不可用
知道怎么解决吗?
我正在使用以下代码来获取有关文件系统目录的信息:
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_FOUNDD: - 错误代码 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 -没有错误知道为什么吗?
我正在研究一个较旧的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++ ×5
.net ×2
c# ×2
mfc ×2
winapi ×2
windows ×2
code-signing ×1
constructor ×1
contextmenu ×1
cstring ×1
gdi+ ×1
ntfs ×1
performance ×1
security ×1
service ×1
sql ×1
sql-server ×1
wix ×1