我正在使用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除外)?
编辑:
这是我拍摄的不显示工具提示的屏幕截图.

我正在学习 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。
在 Java 中,有时从不同线程访问相同变量时,每个线程都会创建自己的变量副本,因此如果我将一个线程中的变量值设置为10,然后我尝试从另一个线程,我不会得到10(因为第二个线程正在从变量的另一个副本中读取!)。
为了在 Java 中解决这个问题,我所要做的就是使用关键字 volatile,例如:
volatile int i = 123;
Run Code Online (Sandbox Code Playgroud)
C++中是否也存在这个问题?如果是这样,我该如何解决?
注意:我使用的是 Visual C++ 2010。
我在创建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)
注意:这个效果我没有问题,我只想了解它为什么会发生!
Control.Invoke()调用PostMessage()然后等待直到 UI 线程完成处理消息。那么为什么它不调用SendMessage()(默认情况下等待 UI 线程完成处理消息)。
当我设置TTimer间隔时1,它实际上是每1毫秒执行一次代码还是每20毫秒或者其他什么?
我问这个问题,因为我知道Windows API Sleep()函数不准确,所以我想知道它是否相同TTimer.
我有一个主窗口和一个关于窗口,关于窗口是从主窗口打开的,但问题是关于窗口显示在任务栏中!
我发现为了从任务栏隐藏一个窗口,我可以使用WS_EX_TOOLWINDOW样式,但是我不希望关于窗口具有这种样式,那么还有其他方法吗?
我使用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)