小编tam*_*bre的帖子

与 WM_DPICHANGED 消息一起发送的建议窗口大小太大

我的应用程序支持每个显示器 DPI 感知版本 2。我有两台显示器 - 一台缩放为 100%,另一台缩放为 125%。当使用 DPI 缩放将应用程序的窗口移动到显示器并使用消息中给出的建议大小设置新大小时WM_DPICHANGED,生成的客户端区域大小比应有的大小大了几个像素。

例如,在我的例子中,窗口的客户区域大小为 300x200 像素。在缩放率为 125% 的显示器上,缩放系数为 1.25,因此生成的客户区域大小应为 375x250。当我使用消息中收到的推荐窗口大小设置窗口大小时WM_DPICHANGED,结果客户区大小为 377x252。Windows文档声称缩放是线性的,但它并不能像那样工作。

最小的例子:

#include <Windows.h>

void set_window_size(HWND window, DWORD window_style, int width, int height)
{
    UINT dpi = GetDpiForWindow(window);
    float scaling_factor = static_cast<float>(dpi) / USER_DEFAULT_SCREEN_DPI;

    RECT scaled_size;
    scaled_size.left = 0;
    scaled_size.top = 0;
    scaled_size.right = static_cast<LONG>(width * scaling_factor);
    scaled_size.bottom = static_cast<LONG>(height * scaling_factor);

    // Adjust the size to account for non-client area
    AdjustWindowRectExForDpi(&scaled_size, window_style, false, 0, dpi);

    SetWindowPos(window, …
Run Code Online (Sandbox Code Playgroud)

c++ winapi dpi

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

是否有任何首选项链接器给静态符号或动态符号?

我有两个标题和两个cpp文件:

//f1.h
int f1();

//f1.cpp
include "f1.h"
int f1() {return 1;}

//f2.h
int f2();

//f2.cpp
#include "f2.h"
#include "f1.h"
int f2() {return f1() + 1;}

//main.cpp
#include "f2.h"
int main() {return f2();}
Run Code Online (Sandbox Code Playgroud)

首先,我从f1和编译共享对象,并根据该共享对象f2创建二进制文件main.cpp:

g++ -c -fPIC -shared f1.cpp f2.cpp
g++ -shared -fPIC -o libf.so f2.o f1.o
g++ -o dynamic main.cpp libf.so
Run Code Online (Sandbox Code Playgroud)

现在我介绍一些更改f1.cpp(比如f1现在返回2):

//f1.cpp#
include "f1.h"
int f1() {return 2;}
Run Code Online (Sandbox Code Playgroud)

并编译二进制文件如下:

g++ -o semistatic main.cpp f1.cpp libf.so
Run Code Online (Sandbox Code Playgroud)

问题是'半静态'二进制是否会使用f1() …

c++ linker static dynamic shared-libraries

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

使用FFmpeg加入MP4文件,同时保留字幕流

我试过了:

ffmpeg -f concat -i files.lst -c copy output.mp4
Run Code Online (Sandbox Code Playgroud)

但是输出文件没有字幕流.我该如何解决?

日志:

ffmpeg version 2.3.4 Copyright (c) 2000-2014 the FFmpeg developers
  built on Dec  4 2014 09:23:21 with gcc 4.8.2 (GCC) 20140120 (Red Hat 4.8.2-16)
  configuration: --prefix=/usr --bindir=/usr/bin --datadir=/usr/share/ffmpeg --incdir=/usr/include/ffmpeg --libdir=/usr/lib64 --mandir=/usr/share/man --arch=x86_64 --optflags='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic' --enable-bzlib --disable-crystalhd --enable-gnutls --enable-libass --enable-libcdio --enable-libdc1394 --disable-indev=jack --enable-libfreetype --enable-libgsm --enable-libmp3lame --enable-openal --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-libschroedinger --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libvorbis --enable-libv4l2 --enable-libx264 --enable-libxvid --enable-x11grab --enable-avfilter --enable-avresample --enable-postproc --enable-pthreads …
Run Code Online (Sandbox Code Playgroud)

mp4 ffmpeg concatenation subtitle

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

此功能或变量可能不安全.要禁用弃用,请使用_CRT_SECURE_NO_WARNINGS

我正在研究C++ DDL,但是我在某些地方遇到了以下问题:

C4996 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
Run Code Online (Sandbox Code Playgroud)

我确实尝试过#define _CRT_SECURE_NO_WARNINGS,但问题仍然存在.
这是代码:

sprintf(szDebugString, "%s: 0x%x (%s%s%i)", ptrName, (DWORD)funcPtr, interfaceName, interfaceVersion.c_str(), i);
Run Code Online (Sandbox Code Playgroud)

c++

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

magicFutureSetting应用程序清单属性有什么作用?

应用程序清单的文档指定了一个名为magicFutureSetting的选项,但没有描述它的作用.

这个属性有什么作用?

winapi manifest

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

获取智能指针的指针指针

我有一个对象的智能指针,我需要传递给一个只接受指针指针的方法.

这是一个例子,原始智能指针失去了所有权.

int main(int argc, char* argv[])
{
    std::unique_pointer<pcap_if_t> object;

    auto object_pointer = object.get();
    pcap_findalldevs(&object_pointer, ...); // The unique_ptr loses ownership after being passed to the function
}
Run Code Online (Sandbox Code Playgroud)

如果没有原始智能指针丢失指针所有权,我将如何实现这一目标?

编辑:
我正在调用的函数是libpcap中的pcap_findalldevs.我担心这个功能可能是失去所有权的原因.
我已经更新了我的代码示例以反映我实际做的事情.

c++ pointers smart-pointers unique-ptr

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

无法在 ScriptBlock 中访问函数

我有一个具有一些函数的脚本,然后在使用这些函数的同一个脚本中执行多个作业。当我开始一份新工作时,他们似乎无法在[ScriptBlock]我的工作中接触到。

这是一个演示这一点的最小示例:

# A simple test function
function Test([string] $string)
{
    Write-Output "I'm a $string"
}

# My test job
[ScriptBlock] $test =
{
    Test "test function"
}

# Start the test job
Start-Job -ScriptBlock $test -Name "Test" | Out-Null

# Wait for jobs to complete and print their output
@(Get-Job).ForEach({
    Wait-Job -Job $_ |Out-Null
    Receive-Job -Job $_ | Write-Host
})

# Remove the completed jobs
Remove-Job -State Completed
Run Code Online (Sandbox Code Playgroud)

我在 PowerShell ISE 中收到的错误是:

The term 'Test' is not …
Run Code Online (Sandbox Code Playgroud)

powershell asynchronous powershell-5.0

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

clang、std::function 和 -fno-rtti

我正在通过 clang-cl 在 Windows 上使用 Clang 5,并且-fno-rtti在使用std::function.

这是我无法编译的示例:

#include <functional>

void foo(std::function<void()> ra2)
{
}

int main()
{
    auto bar = []()
    {
    };

    foo(bar);

    return EXIT_SUCCESS;
}
Run Code Online (Sandbox Code Playgroud)

命令行:

clang-cl test.cpp -Xclang -fno-rtti
Run Code Online (Sandbox Code Playgroud)

错误是:

C:\Program Files (x86)\Microsoft Visual Studio\Preview\Community\VC\Tools\MSVC\14.13.26128\include\functional(435,11):  error:
      cannot use typeid with -fno-rtti
                return (typeid(_Callable));
                        ^
Run Code Online (Sandbox Code Playgroud)

这让我感到惊讶,有没有办法std::function在没有 RTTI 的情况下在 Clang 中使用lambdas?该文件说,只有targettarget_typestd::function应该需要RTTI。我可以推出自己的 版本std::function,但不得不这样做似乎很可惜。

如果我将 MSVC 与编译器标志一起使用,它工作正常/GR-

c++ clang c++11 clang-cl

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

img标记具有内容CSS属性浏览器兼容性

.square {
  content: url('data:image/gif;base64,R0lGODlhIAAgAPcAAP8MAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwAAAAAIAAgAAAINQABCBxIsKDBgwgTKlzIsKHDhxAjSpxIsaLFixgzatzIsaPHjyBDihxJsqTJkyhTqlzJUmRAADs=');
}
Run Code Online (Sandbox Code Playgroud)
There should be a red square below.
<br>
<img class="square">
Run Code Online (Sandbox Code Playgroud)

我的期望是上面的代码会显示一个红色方块,如下所示:

上面带有红色方块的HTML代码的图片

基于WebKit的浏览器(如Chrome,Opera和Konqueror)似乎按预期显示它.但Firefox,Seamonkey,Edge和Internet Explorer 11不显示红色方块(它们什么都不显示).1

contentCSS属性由覆盖CSS 2.2规范部12.2.
哪些浏览器正确遵循规范?


1所有浏览器的最新稳定版本用于测试.

css standards-compliance

5
推荐指数
0
解决办法
50
查看次数

Chrome 开发工具中的覆盖选项卡,它不会用绿色突出显示已加载的 css,也不会用红色突出显示未使用的 css

Chrome 开发工具中的“覆盖率”选项卡不会用绿色突出显示已加载的 CSS,也不会用红色突出显示未使用的 CSS。

显示覆盖范围选项卡的屏幕截图

我使用的是chrome版本77.0.3865.75 (Official Build) (64-bit),操作系统是Ubuntu18.04

google-chrome google-chrome-devtools

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