我正在尝试开发/移植游戏到Android,但是它在C中,并且Android支持Java,但我确信必须有一种方法可以在那里获得一个C应用程序,任何人都知道关于这个主题的一个很好的教程?
谢谢!
当使用非默认字体时,我有一些Form.AutoScaleMode属性和固定大小控件的问题.我把它归结为一个简单的测试应用程序(WinForms 2.0),只有一个表单,一些固定大小的控件和以下属性:
class Form1 : Form
{
// ...
private void InitializeComponent()
{
// ...
this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi;
this.Font = new System.Drawing.Font("Tahoma", 9.25F);
// ...
}
}
Run Code Online (Sandbox Code Playgroud)
在96dpi,Windows XP下,表单看起来像这个96 dpi示例:

在120 dpi,Windows XP下,Windows窗体自动缩放功能产生了这个120 dpi的示例:

如您所见,组框,按钮,列表或树视图正确缩放,多行文本框在垂直轴上变得太大,并且固定大小的标签在垂直和水平方向上都无法正确缩放.似乎是.NET框架中的错误?
编辑:一些提示:字体更改仅应用于包含表单,控件从表单继承其字体.如果可能的话,我想保持这种方式.
使用默认字体(Microsoft Sans Serif 8.25pt),不会发生此问题.AutoScaleMode = Font当然,使用(当然具有足够的AutoScaleDimensions)要么根本不进行缩放,要么完全如上所示进行缩放,具体取决于设置Font的时间(在更改AutoScaleMode之前或之后).问题不是特定于"Tahoma"字体,它也出现在Microsoft Sans Serif,9.25pt.
是的,我已经阅读了这篇文章,发布了 高DPI问题, 但它并没有真正帮助我.
有什么建议如何解决这个问题?
编辑2:关于我的意图的一些额外信息:我有大约50个已经工作的固定大小对话框,有几百个正确放置的固定大小控件.它们从较旧的C++ GUI框架迁移到C#/ Winforms,这就是它们都是固定大小的原因.所有这些都使用9.25pt字体,96 dpi看起来很好.在旧框架下,缩放到120 dpi工作正常 - 所有固定大小的控件在两个维度上缩放相等.上周,我们在切换到120 dpi时在WinForms下检测到这种奇怪的缩放行为.你可以想象我们的大多数对话现在在120 dpi下看起来非常糟糕.我正在寻找一种解决方案,避免完全重新设计所有这些对话框.
编辑3:为了测试这种行为,恕我直言,建立一个120 dpi的虚拟Windows XP环境是一个好主意,而开发环境只有96 dpi(至少,这就是我所做的).在96和120 dpi之间切换通常需要在Win XP下重启,否则你看不到真正发生的事情.
// As requested: the source code of Form1.cs
namespace DpiChangeTest …Run Code Online (Sandbox Code Playgroud) 我有两个IntPtr值指向一些length字节的数据区域.length可能有200k到400k的数量级.
int length = /* ..*/
IntPtr ptrSrc = /*.. */;
IntPtr ptrDst = /* .. */;
Run Code Online (Sandbox Code Playgroud)
现在我想将数据复制ptrSrc到ptrDst.这段代码工作正常:
byte[] data = new byte[length];
Marshal.Copy(ptrSrc, data, 0, length);
Marshal.Copy(data, 0, ptrDst, length);
Run Code Online (Sandbox Code Playgroud)
但它的缺点是需要一个额外的临时(可能是巨大的)数组.不幸的是,我无法找到一个Marshal.Copy在直接复制.NET框架的变形IntPtr来IntPtr,所以我寻找替代品.
我对一个适用于32位Windows和64位Windows的解决方案感兴趣.有什么建议?
在C#中,我喜欢这样的var情况下的关键字:
var myList = new List<MyType>();
Run Code Online (Sandbox Code Playgroud)
在C++/CLI中是否有任何等价物,或者每次都必须重复类型名称,如下所示:
List<MyType ^>^ myList = gcnew List<MyType ^>();
Run Code Online (Sandbox Code Playgroud)
到目前为止,无法在文档或Google中找到明确的声明.我正在使用Visual Studio 2008.
在重构期间,我有时必须将一个源文件拆分为两个或更多(例如,当一个类变得如此之大以至于它应该被分成两个类时).
例如,让A为原始文件,B1和B2为新文件.
是否有可能告诉SVN B1和B2都应该"继承"文件A的完整历史记录,所以当我查看B1和B2的历史日志时,我可以看到它们已经从A中出现,并且日志看起来像这样:
A B1 B2
- change A3 - change B1.2 - change B2.2
- change A2 - change B1.1 - change B2.2
- change A1 - change A3 - change A3
- change A2 - change A2
- change A1 - change A1
Run Code Online (Sandbox Code Playgroud)
我知道如何让历史时,我重命名文件(如讨论上所以这里),但据我所知,这只是保持历史的方式与一个或者B1或B2,不与两者都相关.
目前我在Windows上使用Tortoise SVN 1.6.12.
这是一个已知问题 - 当使用Ankh添加文件时,它们并未真正添加到SVN.很多时候这会导致问题,例如稍后通过TortoiseSvn提交只发现丢失文件或创建补丁时.
是否有解决方法,或者一些计划解决这个问题是未来的Ankh版本?
编辑 - 澄清一下,当我使用Ankh时,文件确实被添加了.但是如果使用Ankh没有完成提交,则不会添加文件(与其他SVN操作不同).
我们有一个使用Wix创建的产品安装程序,其中包含程序包(" V1 ")和一些配置文件.现在,我们将使用新的产品代码进行重大升级,其中卸载了旧版本的产品并安装了" V2 ".我们想要的是保存其中一个配置文件免于卸载,因为它也需要V2.不幸的是,我们Permanent="yes"在发送V1时忘记设置选项(阅读此问题以获取更多信息).
这里有一个问题:是否有一种简单的方法可以防止文件的卸载?当然,我们可以在脚本中添加一个自定义操作来在卸载之前备份文件,然后再添加另一个自定义操作来恢复它,但恕我直言,这个任务似乎有点过分,并且可能会干扰MSI注册过程的其他部分.
编辑:是的,该NeverOverwrite="yes"属性已经在V2中设置,行为就像我描述的那样.
我不认为在V2的组件参数中直接更改某些内容会有所帮助.也许有机会在卸载V1之前以某种方式在自定义操作中修改注册表,以便安装程序服务认为V1中的配置文件已安装Permanent="yes"?
我设计了一个不可变类,因为我希望它具有值语义.我在课堂的评论部分写了一个提示
// "This class is immutable, don't change this when adding new features to it."
但我知道,有时这些评论会被其他团队成员忽略,所以我想创建一个单元测试作为额外的保护措施.知道怎么做到这一点?可以通过反射检查一个类,以确保只有构造函数改变它的内部状态吗?
(使用C#2.0和NUnit,如果这对任何人都很重要).
我正在使用fixed{}短语处理C#中的指针.
我将我的代码放在fixed语句的括号内,并想知道Garbage集合是否会在fixed语句之后处理指针释放
fixed{int * p=&x}
{
// i work with x.
}
Run Code Online (Sandbox Code Playgroud)
如果不是我怎么能释放它?
我有一个PHP邮件脚本坐在LAMP vps服务器上.该脚本抓取大约1000个电子邮件地址,并向每个电子邮件地址发送一封HTML电子邮
我用大约六个自己的测试电子邮件帐户测试了脚本,并且工作正常.但我担心当我实际使用这个脚本1000封电子邮件时可能会出现问题.我想测试的一些东西是
1)确认已发送和接收的所有1000封电子邮件
2)测试以确保电子邮件不会在人们的垃圾邮件文件夹中结束
3)检测任何其他一般故障
有没有人有关于如何测试上述案例的建议?我想了解一下构建批量电子邮件脚本的经验.