我有一个用C++编写的用于Windows 7的自制全屏应用程序,它应该作为公共演示文稿自行运行很长时间.
问题是,有几个应用程序或驱动程序或Windows本身不时地和/或特别是在系统启动时窃取焦点.结果是:我的全屏应用程序最小化.
这是非常烦人的,几乎不可能总是找出你必须停用哪些东西来防止这种情况.特别是因为有时需要重点窃取的东西,例如触摸屏驱动程序.
我该怎么做才能防止失去焦点?
甚至更好:我怎样才能防止其他应用程序窃取焦点 - 我记得曾经有过TweakUI for Windows XP的这样的设置.
愚蠢的简化代码示例没有做任何有用的事情,而是对数据成员指针的两个后续分配.第一个分配工作,第二个分配给出编译器错误.大概是因为它是一个嵌套的成员.
问题是:是否真的不可能让成员指针指向嵌套成员,或者我错过了任何花哨的语法?
struct Color {
float Red;
float Green;
float Blue; };
struct Material {
float Brightness;
Color DiffuseColor; };
int main() {
float Material::* ParamToAnimate;
ParamToAnimate = &Material::Brightness; // Ok
ParamToAnimate = &Material::DiffuseColor.Red; // Error! *whimper*
return 0; }
Run Code Online (Sandbox Code Playgroud)
ATM我通过使用字节偏移和大量演员来解决.但这很难看,我最好使用那些成员指针.
是的,我知道之前肯定会出现这个问题(几乎与任何问题一样).是的,我事先搜查过但发现没有令人满意的答案.
谢谢你的时间.
但是pow(0,2.0)给出0
似乎任何浮点指数给出1而整数指数给出0.
我正在使用DirectX 9和hlsl编译器"D3DCompiler_43.dll".确认在Nvidia和Ati卡上.
我很迷惑!这是某种已知的行为还是错误?
为了说明效果,请尝试以下简单的测试着色器:
// Test shader demonstrating strange pow behaviour
// when brightness becomes 0 resulting color will jump to white
float4x4 WorldViewProjXf : WorldViewProjection < string UIWidget="None";>;
float Brightness
<
string UIName = "Brightness";
float UIMin = 0;
float UIMax = 1;
> = 0;
struct VS_Input
{
float4 position : POSITION0;
};
struct VS_Output
{
float4 position : POSITION0;
};
VS_Output Vertex_Func( VS_Input in_data )
{
VS_Output outData;
outData.position = mul(in_data.position, WorldViewProjXf);
return outData;
} …Run Code Online (Sandbox Code Playgroud) __if_exists是一个特定于Microsoft的关键字,用于在编译时测试标识符的存在:
它在"伪造"模板专业化方面非常方便,因为在某些情况下它提供了比其他方法(如"真正的"专业化或重载或其他方法)更简单,可读和更好的表现方式.
但是现在我必须将一个大项目移植到gnu c ++,我想我会开始有点哭,如果我必须找到其他方法(我认为很少)我使用它
我正在开发基于局域网的解决方案,其中"服务器"必须控制一些"播放器"我选择的协议是UDP,因为它很容易,我不需要连接,我的流量只包含不时的短命令我想使用混合广播消息进行同步,单个目标消息用于玩家个人命令.
多播TCP将是一种替代方案,但它更复杂,不完全适合任务,并且通常不受硬件的良好支持.
不幸的是我遇到了一个奇怪的问题:
使用"sendto"发送到特定ip的第一个数据报丢失. 接收到之后短时间发送到同一ip的任何数据报.但如果我等待一段时间(几分钟),第一次"发送"会再次丢失.
广播数据报始终有效.本地发送(到同一台计算机)始终有效.
我假设操作系统或路由器/交换机有一些从IP到MAC地址的转换表,这些转换表在不使用几分钟时会被遗忘,并且遗憾的是导致数据报丢失.我可以用不同的路由器/交换机硬件观察到这种行为,所以我的怀疑是windows网络层.
我知道UDP根据定义"不可靠",但我无法相信这一点到目前为止,即使物理连接正常工作且一切都很好,数据包也会丢失.然后它将毫无价值.
从技术上讲,我打开UDP套接字,将其绑定到端口和INADRR_ANY.然后我使用"sendto"和"recvfrom".我从不做连接 - 我不想,因为我有几个球员.据我所知,UDP应该在没有连接的情况下工作.
我目前的解决方法是我经常向所有特定的玩家ips发送虚拟数据报 - 这解决了问题,但它以某种方式"不满意"
问题:有人知道这个问题吗?它从何而来?我该如何解决?
编辑:
我把它归结为以下测试程序:
int _tmain(int argc, _TCHAR* argv[])
{
WSADATA wsaData;
WSAStartup(MAKEWORD(2, 2), &wsaData);
SOCKET Sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
SOCKADDR_IN Local = {0};
Local.sin_family = AF_INET;
Local.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
Local.sin_port = htons(1234);
bind(Sock, (SOCKADDR*)&Local, sizeof(Local));
printf("Press any key to send...\n");
int Ret, i = 0;
char Buf[4096];
SOCKADDR_IN Remote = {0};
Remote.sin_family = AF_INET;
Remote.sin_addr.S_un.S_addr = inet_addr("192.168.1.12"); // Replace this with a valid LAN …Run Code Online (Sandbox Code Playgroud) 在c样式无类型变量参数列表中使用类的常规用法是常见的错误源.例:
class MyString {
public:
char *pChars;
int Length;
MyString(char *pChars) {
this->pChars = pChars;
Length = strlen(pChars);
} };
int main() {
MyString s1("Bla1"), s2("Bla2");
printf("%s%s", s1, s2); // This does not but should give a compiler warning/error!
return 0; }
Run Code Online (Sandbox Code Playgroud)
printf调用按值接收两个s对象.这意味着他们的所有成员都只是简单的内存复制.但它们被解释为一个简单的char指针.结果当然是运行时错误.
我不是要求解决这个问题,但是我希望有一些东西可以添加到我的类中,以便编译器警告我或者给出错误.
已经尝试声明但没有实现复制构造函数.但似乎没有调用复制构造函数.:-(
请回答标题中的问题.我不需要讨论为什么你不应该使用printf或这些变量参数列表 - 知道这一点.
谢谢你的时间.
在自动重命名大项目中的许多变量的过程中,我可能已经创建了很多这样的东西:
class Foo {
int Par;
void Bar(int Par) {
Par = Par; // Nonsense
}
};
Run Code Online (Sandbox Code Playgroud)
现在我需要识别这些位置以纠正它们.例如,进入"this-> Par = Par;".不幸的是,即使有所有警告,Visual C++编译器也没有给我任何评论.我记得有一次警告它.它说"代码没有效果"或其他什么.但它似乎已经消失,可能是因为有些人使用这种做法来避免"未引用的参数"警告.有没有办法重新激活该警告?海湾合作委员会在这里警告吗?任何的想法?
这篇文章并不是真正关于下面代码中的错误,我自己可以想象解决它的几十种方法,它主要与简单,优雅和性能有关!
我必须做一个非常简单的文本解析器,类似的东西:
string ParseWord(ref string Line, ref int Pos) {
// Inspect Line from Pos, increment Pos and return next Word
}
void ParseText(string[] Lines) {
foreach (string Line in Lines) {
int Pos = 0;
string Word;
while ((Word = ParseWord(ref Line, ref Pos)) != null) {
// Do something with Word
}
}
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,它不起作用,因为"foreach"变量"Line"是通过引用传递的,这是不允许的.
你可能已经注意到我现在通常是一个C++程序员.我的想法是将字符串作为引用传递会更快,因为它不必每次都被复制.
第一个问题:这个假设在c#中仍然有效吗?
第二个问题:我怎样才能传递对"Line"的引用并仍然使用"foreach" - c#中没有"const"
第三个问题:我是否在思考一些不恰当的C++方式以及我们在c#中做了哪些不同的事情?
为什么在解析网络路径上具有相关元素的路径时,"Path.GetFullPath"会表现得很奇怪?试试这个小例子并比较结果:
using System;
using System.IO;
namespace ConsoleApplication1 {
class Program {
static void Main(string[] args) {
Console.WriteLine(Path.GetFullPath(@"C:\Stay\Elim1\Elim2\..\..\SomeFolder")); // yields C:\Stay\SomeFolder
Console.WriteLine(Path.GetFullPath(@"\\Stay\Elim1\Elim2\..\..\SomeFolder")); // yields \\Stay\Elim1\SomeFolder ???
}
}
}
Run Code Online (Sandbox Code Playgroud)
它可能是一个错误,或者可能有一些意义,但我不明白.
(它们中没有任何一个甚至是它们的部分真的存在于我的机器上,所以它只是一个字符串操作)