我有一个广泛的C++模型的现有应用程序,我想连接到一个漂亮的,现代的Windows 7或8 UI.我们的应用程序的当前(古代)UI是在早期的Windows XP/95/98时代使用纯Win32 API开发的.我们的代码目前正在通过Visual Studio 2010进行编译/链接.
在Windows上似乎有很多不同的开发API"标准":Win32,MFC,ATL,COM和.NET.在过去的14年里,我的工程师几乎拖累了微软的产品线:2001年,它是"MFC已经死了 - 我们必须转向ATL"(我们没有).然后".NET将替换MFC"(它似乎没有).
所以现在我们准备好转储旧的UI代码了.使用一组既稳定又高效的标准会更好,但我们也可以快速创建UI.抛开QT(在这里我已经在stackoverflow上阅读了很多有争议的优点和缺点):
1)Windows 7和8的现代UI开发方法是使用MFC还是.NET?
2)对于.NET方法(假设选择.NET有充分理由)我们可以使用我们的C++模型代码UNMANAGED与.NET应用程序吗?
3)在Visual Studio 2012中进行开发是否必要,即使我们的应用程序最初不是为Metro外观设计的?
4)是否还有其他Microsoft工具包应该考虑用于桌面应用程序开发?
斯蒂芬
对于独立于平台的模型层,我有分层数据(实际上是字符串),如下所示:
现在,在每个"级别"(Item,SubItem,SubSubItem等)中,项目需要按字母顺序排序.
似乎一个简单的解决方案是创建一个带有排序的std :: Vector或std :: MultiMap的简单类来跟踪它的Children,以及指向它的Parent的指针.(和一个根项目).我需要一般地向前遍历每个项目的孩子.
构建/排序后,我不需要添加或删除项目.通常少量的物品(数百).
这是用于轮廓样式控件的后备数据的模型组织.
滚动一个简单的类很容易,但这是一个常见的模式 - 是不是已经有一个现成的STL容器有这种行为?
经过三十年的二进制文件格式开发,我(最终)写出了一个XML文档文件格式.
我已经到达了我的文档标题的一部分,我需要编写大约五十个单独的布尔数据成员,我想知道:我应该将它们写为1/0还是true/false?
我理解XML规范可能会有两种方式.一方面,1/0 SEEMS在重新读取文件格式时工作量较少.但由于文件格式很小,周期很便宜,所以认为文件格式尽可能符号是否合适?如果是这样,对所有枚举变量做同样的XML是否正确(输出它们的符号名称与它们的值 - 这可能会改变?)
在旁注 - 我正在以这种形式生成XML:
<FieldName>true</FieldName>
Run Code Online (Sandbox Code Playgroud)
不是这种形式:
<FieldName value="true"/>
Run Code Online (Sandbox Code Playgroud)
在阅读了DOZENS的相互矛盾的文章和帖子(一些关于Stack Overflow)之后,它发现属性风格(例子#2)已经大部分不受欢迎了.
关于 boostfiltering_streams 的一些基本问题。我有几十个函数接受 std::ofstream& 的参数
void foo(std::ofstream& outStream)
{
// lots of operations, like this:
outStream << "various bits of text";
}
void StreamSomeTextToFile(char* fileName)
{
ofstream myFileStream(fileName, ios::out | ios::app | ios::binary);
foo(myFileStream);
myFileStream.close();
}
Run Code Online (Sandbox Code Playgroud)
现在我想使用 boost filtering_stream 输出到压缩的 ZIP 文件。用于打包和解包的常用boost filtering_streams 测试代码已编译、链接并非常适合我。我想替换filtering_stream:
void StreamSomeCompressedTextToFile(char* fileName)
{
ofstream myFileStream(destPath, std::ios_base::out | std::ios_base::app | std::ios_base::binary);
boost::iostreams::filtering_streambuf<boost::iostreams::output> myCompressedFileStream;
myCompressedFileStream.push(boost::iostreams::zlib_compressor());
myCompressedFileStream.push(myFileStream);
foo(myCompressedFileStream); // I can't just pass myCompressedFileStream to foo(std::ofstream&), right?
myFileStream.close();
}
Run Code Online (Sandbox Code Playgroud)
三个问题:
1) 我之前接受 std::ofstream& outStream 的所有函数现在都需要接受 boost::iostreams::filtering_streambuf& 类型的参数吗?或者是否有适当的参数类型,以便那些众多(“foo”)函数可以与任何一种类型的流类型一起使用?
2) …
A C++ dependent library .dylib resides in a bundle located in the app package's Content/Frameworks. I'd like to DELAY the loading of that dependent library until I've completed some specific initialization.
Is there any way OTHER THAN to create a Runtime-Loaded Library? Would using weak linking options prevent the .dylib from being loaded until first referenced?
使用 Xcode 11.1,在 MacOS 10.14.6 (Mojave) 上构建,以下几行:
#include <filesystem>
typedef std::filesystem::path my_path;
Run Code Online (Sandbox Code Playgroud)
...生成此编译器错误:
'path' is unavailable: introduced in macOS 10.15
Run Code Online (Sandbox Code Playgroud)
这是否意味着我无法从 10.14 开始为较早版本的 MacOS(10.13、10.14)构建,或者我无法从 10.15 生成可执行文件,该可执行文件可以针对/在早于 10.15 的 MacOS 版本上运行?
设置:几年前,我们开发了一个很好的C++跨平台,它管理了许多在Mac OS X Windows之间编写公共代码源的问题.(我们不会进入这种方法的巨大缺点 - 我们在1993年开发了这个!).
为了简化可重用组件的开发,我们最近添加了一个"窗格"概念来包含多个控件和用户项,主要处理绘图和其他事件的分层特性,例如击键和鼠标点击.
我们在Mac OS X(Carbon)方面成功构建了这种方法.然而,试图将这种方法转移到Windows(XP SP3及更高版本)已经导致了无数的混乱问题:不间断地重新绘制窗口内容,并且事件没有传递到我们的"窗格"中.
在Windows上,每个窗格都转换为"窗口",我怀疑这可能是问题的根源:重叠"封闭"项目下面的项目可能会干扰绘图和事件传播.
是否有可接受的方法以编程方式将控件添加到分组层次结构中?或者是否有必须设置的特定FLAG来完成此任务?
(注意:虽然我们目前与XP SP3兼容,但我们不需要 - 我们可以将最低操作系统定位为Windows 7.我们目前正在开发VS 2010)
斯蒂芬
来自C/C++世界并且是一个Python newb,我写了这个简单的字符串函数,它接受一个输入字符串(保证是ASCII)并返回最后四个字符.如果少于四个字符,我想用字母"A"填充主要位置.(这不是练习,而是另一个复杂功能的重要部分)
从蛮力到简单到优雅,有很多方法可以做到这一点.下面我的方法,虽然功能,但似乎不是"Pythonic".
注意:我目前正在使用Python 2.6 - 性能不是问题.输入字符串很短(2-8个字符),我只调用这个函数几千次.
def copyFourTrailingChars(src_str):
four_char_array = bytearray("AAAA")
xfrPos = 4
for x in src_str[::-1]:
xfrPos -= 1
four_char_array[xfrPos] = x
if xfrPos == 0:
break
return str(four_char_array)
input_str = "7654321"
print("The output of {0} is {1}".format(input_str, copyFourTrailingChars(input_str)))
input_str = "21"
print("The output of {0} is {1}".format(input_str, copyFourTrailingChars(input_str)))
Run Code Online (Sandbox Code Playgroud)
输出是:
The output of 7654321 is 4321
The output of 21 is AA21
Run Code Online (Sandbox Code Playgroud)
Pythoneers的建议?
在我的.xib中,我放置了一个NSColorWell内部NSView,并IBAction在控制器中连接到NSColorWell'Sent Actions'(通过文件所有者).我想我会响应我的控制器中的一个点击并发送激活以显示NSColorPanel.
但与其他我的控件不同,我没有得到IBAction被叫.单击会调用颜色上的拖动操作.我注意到这个控件并非衍生出来NSActionCell(就像我所有的其他控件一样).什么是适当的控件应该用于显示颜色和调用NSColorWell点击时?
(注意:这是Xcode/IB 3.2.x)
我正在尝试找到“仅文本”的可可控件/按钮,并在单击时跟踪其突出显示。我尝试了未选中“边框”复选框的几种按钮组合,并且将“类型”设置为瞬时推入,瞬时照明和瞬时变化-但在运行的程序中(单击按钮时)没有动画或差异。
我想将 UTC TimeDate 标记字符串转换为毫秒的整数值(可能需要是 64 位数量),以便在存储在 mySQL 数据库列中时占用更少的空间。这个 UTC 字符串是从另一个库生成的,我将它存储为一种每用户 GUID。
datetime 或 dateutil 能否将其转换为单个整数值(例如“自纪元以来的毫秒数”)?还是我需要自己做?
使用这种方法解析:
myDateTime = dateutil.parser.parse("2015-06-27T02:10:05.653000Z")
print("Parsed datetime String is {0}, ordinal value is {1}".format(myDateTime, myDateTime.toordinal()))
Run Code Online (Sandbox Code Playgroud)
给出输出:
Parsed datetime String is 2015-06-27 02:10:05.652999+00:00, ordinal value is 735776
Run Code Online (Sandbox Code Playgroud)
...它只给出日期的序数值。此外,如果我有一个整数 653 毫秒的时间,那么我希望解析的对象知道它有 653 毫秒,而不是 652999。
从Xcode 7.2.1更新到Xcode 7.3之后,构建我的项目得到了"运行目标我的Mac无法运行该方案".我记得我需要将10.6 SDK(不幸的是,这个项目的基本SDK)添加到Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs文件夹中.然后重新启动Xcode,并在项目中重新选择SDK.
除此之外,MacOSX10.6.sdk未在Build Settings中的任何SDK弹出菜单中列出.
Apple是否完全切断了Xcode使用10.6 SDK的能力?
斯蒂芬
许多关于 SO 的跨平台开发主题似乎已有 6 到 9 年的历史了。有人最近有 Xojo 的经验吗?它可以用来在 macOS 和 Windows 上的 C++ 生成的链接库之上快速部署 UI 吗?这在 iOS 上如何运作?这个工具有什么限制?
c++ ×5
macos ×5
xcode ×4
cocoa ×2
python ×2
winapi ×2
windows ×2
.net ×1
boost ×1
c++17 ×1
containers ×1
datetime ×1
dylib ×1
file-format ×1
interface ×1
macos-mojave ×1
mfc ×1
mysql ×1
nscolor ×1
objective-c ×1
python-2.7 ×1
sorting ×1
stl ×1
string ×1
visual-c++ ×1
xml ×1
xml-parsing ×1
xojo ×1
zlib ×1