小编Ole*_*ann的帖子

Windows 7:防止应用程序失去焦点

我有一个用C++编写的用于Windows 7的自制全屏应用程序,它应该作为公共演示文稿自行运行很长时间.

问题是,有几个应用程序或驱动程序或Windows本身不时地和/或特别是在系统启动时窃取焦点.结果是:我的全屏应用程序最小化.

这是非常烦人的,几乎不可能总是找出你必须停用哪些东西来防止这种情况.特别是因为有时需要重点窃取的东西,例如触摸屏驱动程序.

我该怎么做才能防止失去焦点?

甚至更好:我怎样才能防止其他应用程序窃取焦点 - 我记得曾经有过TweakUI for Windows XP的这样的设置.

focus windows-shell windows-7

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

嵌套数据成员指针 - 不可能?

愚蠢的简化代码示例没有做任何有用的事情,而是对数据成员指针的两个后续分配.第一个分配工作,第二个分配给出编译器错误.大概是因为它是一个嵌套的成员.

问题是:是否真的不可能让成员指针指向嵌套成员,或者我错过了任何花哨的语法?

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我通过使用字节偏移和大量演员来解决.但这很难看,我最好使用那些成员指针.

是的,我知道之前肯定会出现这个问题(几乎与任何问题一样).是的,我事先搜查过但发现没有令人满意的答案.

谢谢你的时间.

c++ member-pointers

10
推荐指数
2
解决办法
1094
查看次数

pow(0,2.2)在hlsl像素着色器中给出1?

但是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)

math shader hlsl pixel-shader

9
推荐指数
1
解决办法
3462
查看次数

在gnu c ++中是否存在__if_exists的等价物?

__if_exists是一个特定于Microsoft的关键字,用于在编译时测试标识符的存在:

MSDN:__ if_exists

它在"伪造"模板专业化方面非常方便,因为在某些情况下它提供了比其他方法(如"真正的"专业化或重载或其他方法)更简单,可读和更好的表现方式.

但是现在我必须将一个大项目移植到gnu c ++,我想我会开始有点哭,如果我必须找到其他方法(我认为很少)我使用它

c++ gcc visual-c++

8
推荐指数
1
解决办法
3665
查看次数

到特定远程ip的第一条UDP消息会丢失

我正在开发基于局域网的解决方案,其中"服务器"必须控制一些"播放器"我选择的协议是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 sockets udp network-programming windows-7

8
推荐指数
1
解决办法
6658
查看次数

有没有办法禁止在c样式变量参数列表中使用值?

在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或这些变量参数列表 - 知道这一点.

谢谢你的时间.

c c++

6
推荐指数
1
解决办法
241
查看次数

如何找到没有效果的作业?

在自动重命名大项目中的许多变量的过程中,我可能已经创建了很多这样的东西:

class Foo {
    int Par;
    void Bar(int Par) {
        Par = Par;       // Nonsense
    }
};
Run Code Online (Sandbox Code Playgroud)

现在我需要识别这些位置以纠正它们.例如,进入"this-> Par = Par;".不幸的是,即使有所有警告,Visual C++编译器也没有给我任何评论.我记得有一次警告它.它说"代码没有效果"或其他什么.但它似乎已经消失,可能是因为有些人使用这种做法来避免"未引用的参数"警告.有没有办法重新激活该警告?海湾合作委员会在这里警告吗?任何的想法?

c++ warnings visual-c++

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

如何将常量字符串引用传递给函数

这篇文章并不是真正关于下面代码中的错误,我自己可以想象解决它的几十种方法,它主要与简单,优雅和性能有关!

我必须做一个非常简单的文本解析器,类似的东西:

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#中做了哪些不同的事情?

c# string performance const ref

3
推荐指数
1
解决办法
1890
查看次数

"Path.GetFullPath"和网络路径

为什么在解析网络路径上具有相关元素的路径时,"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)

它可能是一个错误,或者可能有一些意义,但我不明白.

(它们中没有任何一个甚至是它们的部分真的存在于我的机器上,所以它只是一个字符串操作)

.net c# path

3
推荐指数
1
解决办法
2084
查看次数