小编pau*_*aul的帖子

如何使用"工具提示"捕获屏幕?

我正在使用GDI捕获屏幕,我注意到屏幕截图中没有包含"工具提示".这是我的基本代码:

HDC hdcDesk = GetDC(0);

HDC hdcMem = CreateCompatibleDC(hdcDesk);
HBITMAP hbmMem = CreateCompatibleBitmap(hdcDesk, 1920, 1080);
SelectObject(hdcMem, hbmMem);

StretchBlt(hdcMem, 0, 0, 1920, 1080, hdcDesk, 0, 0, 1920, 1080, SRCCOPY);

// Now save the bitmap...
Run Code Online (Sandbox Code Playgroud)

可以修复,还是应该使用其他方法捕获屏幕(GDI除外)?


编辑:

这是我拍摄的不显示工具提示的屏幕截图.

在此输入图像描述

c c++ winapi gdi

28
推荐指数
2
解决办法
1341
查看次数

为什么从 Unicode 字符集中删除了 U+D800 到 U+DFFF 范围内的代码点?

我正在学习 UTF-16 编码,我读过如果你想表示 U+10000 到 U+10FFFF 范围内的代码点,那么你必须使用 U+D800 范围内的代理对到 U+DFFF。

因此,假设我想对以下代码点进行编码:U+10123(二进制为 10000000100100011):

首先我布置这个位序列:

110110xxxxxxxxxx 110111xxxxxxxxxx

然后我用代码点的二进制格式用 x 填充位置:

1101100001000000 1101110100100011 (D840 DD23 十六进制)


我也读过 U+D800 到 U+DFFF 范围内的代码点已从 Unicode 字符集中删除,但我不明白为什么删除了这个范围!

我的意思是这个范围可以很容易地用 4 个字节编码,例如以下是 U+D812 代码点的 UTF-16 编码格式(二进制为 1101100000010010):

1101100000110110 1101110000010010(十六进制D836 DC12)

注意:我在示例中使用了 UTF-16 Big Endian。

unicode encoding utf-16 character-encoding

9
推荐指数
2
解决办法
2376
查看次数

在 C++ 中是否有 Java 'volatile' 的等价物?

在 Java 中,有时从不同线程访问相同变量时,每个线程都会创建自己的变量副本,因此如果我将一个线程中的变量值设置为10,然后我尝试从另一个线程,我不会得到10(因为第二个线程正在从变量的另一个副本中读取!)。

为了在 Java 中解决这个问题,我所要做的就是使用关键字 volatile,例如:

volatile int i = 123;
Run Code Online (Sandbox Code Playgroud)

C++中是否也存在这个问题?如果是这样,我该如何解决?

注意:我使用的是 Visual C++ 2010。

c++ java windows multithreading

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

创建ListView时产生奇怪的效果

我在创建Listview时发现了一个奇怪的效果.

当我创建ListView而不创建Button时,ListView中的选定项具有虚线边框.但是,当我还创建一个Button时,ListView所选项目不再有虚线边框.只有当我有一个启用公共控件6的清单文件时,才会发生这种情况:

在此输入图像描述

这是我用来创建Window和ListView和Button的代码:

// Create Window
HWND hWnd = CreateWindowEx(0, "WinClass", "My Window", WS_OVERLAPPEDWINDOW, 261, 172, 394, 284, NULL, NULL, hInstance, NULL);

// Create ListView
HWND hListView = CreateWindowEx(0, WC_LISTVIEW, "", WS_CHILD | LVS_REPORT | WS_VISIBLE, 0, 0, 232, 190, hWnd, 0, GetModuleHandle(NULL), NULL);

// Create Button
HWND hButtonRefresh = CreateWindowEx(NULL, "BUTTON", "OK", WS_CHILD | WS_VISIBLE | BS_DEFPUSHBUTTON, 10, 200, 110, 25, hWnd, NULL, GetModuleHandle(NULL), NULL);
Run Code Online (Sandbox Code Playgroud)

注意:这个效果我没有问题,我只想了解它为什么会发生!

c winapi listview

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

为什么 Control.Invoke() 调用 PostMessage() 而不是 SendMessage()?

Control.Invoke()调用PostMessage()然后等待直到 UI 线程完成处理消息。那么为什么它不调用SendMessage()(默认情况下等待 UI 线程完成处理消息)。

.net c# winapi

4
推荐指数
1
解决办法
837
查看次数

TTimer的准确度如何?

当我设置TTimer间隔时1,它实际上是每1毫秒执行一次代码还是每20毫秒或者其他什么?

我问这个问题,因为我知道Windows API Sleep()函数不准确,所以我想知道它是否相同TTimer.

delphi

4
推荐指数
1
解决办法
662
查看次数

在不使用 WS_EX_TOOLWINDOW 的情况下从任务栏隐藏窗口

我有一个主窗口和一个关于窗口,关于窗口是从主窗口打开的,但问题是关于窗口显示在任务栏中!

我发现为了从任务栏隐藏一个窗口,我可以使用WS_EX_TOOLWINDOW样式,但是我不希望关于窗口具有这种样式,那么还有其他方法吗?

c winapi

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

TThread.Synchronize()如何工作?

我使用Synchronize()C++ Builder 2010中的方法测试了以下代码:

while(true) {}
CreateDirectory ("D:\\test", NULL);
Run Code Online (Sandbox Code Playgroud)

发生了什么是UI冻结,并且没有创建文件夹.这是否意味着Synchronize()将代码传递给UI线程来执行它,然后等待代码执行后再继续?


编辑:

我错误地解释了我在测试代码中所做的事情.我真正做的是以下内容:

我打电话Synchronize()给以下代码:

while(true) {}
Run Code Online (Sandbox Code Playgroud)

在打电话之后Synchronize(),我有以下代码:

CreateDirectory ("D:\\test", NULL);
Run Code Online (Sandbox Code Playgroud)

delphi c++builder

0
推荐指数
1
解决办法
1810
查看次数