我正在尝试使用 GDI MaskBlt 命令绘制具有透明度的图像:http://msdn.microsoft.com/en-us/library/dd145047 (VS.85).aspx
我似乎在文档中找不到任何关于在明显的用例中使用什么光栅运算符的任何内容:一种MAKEROP4(SRCCOPY, DSTCOPY)- 掩码为 1 的位块传输,并在掩码为 0 的情况下保持目标不变。 SRCCOPY 是有效的 ROP ,但是我应该用什么来代替我的虚构DSTCOPY呢?
我不习惯CreateFontA,但我正在为一个使用这个功能的游戏做一个模组,我也必须使用它。
我设法更改字体,但更改字体大小时遇到一些麻烦。
我想使用11px的字体,我该如何实现呢?我尝试将宽度和高度设置为 11,但出现了严重错误。
我在 MFC (Visual Studio 2013) 中为 WinCE 2013 开发了一个简单的程序,使用 GDI 方法在设备上下文上绘图。不幸的是,当我尝试在上下文设备句柄上调用 SelectObject 时,我收到错误:“错误 C2248:‘CObject::CObject’:无法访问在类‘CObject’中声明的私有成员”
我附加了一个调用 SelectObject 方法的函数。
BOOL Druk::DrawGrid(CDC hDC,int start_x, int start_y, int limit_x, int limit_y, int width)
{
CPen pen;
COLORREF linecol;
pen.CreatePen(PS_SOLID, width, NULL);
hDC.SelectObject(&pen);
for (float i = start_y; i < limit_y; i += 5 * MILIMETER)
{
hDC.MoveTo(start_x, i);
hDC.LineTo(limit_x, i);
}
for (float j = start_x; j < limit_x; j += 5 * MILIMETER)
{
hDC.MoveTo(j, start_y);
hDC.LineTo(j, limit_y);
}
for (float i = …Run Code Online (Sandbox Code Playgroud) 我正在使用 windows.h "TextOutW" 函数将文本打印到位图。打印普通的 ascii 确实很快,但是在 unicode 范围内打印似乎会导致巨大的减速。这是我打印 unicode 方块并测试持续时间的代码:
wchar_t b = 0x25A0;
LPCWSTR s = &b;
TextOutW(hMyDC, x, y, s, wcslen(s));
Run Code Online (Sandbox Code Playgroud)
有没有办法加快这个速度?
编辑:我用计时器运行我的循环来测试速度:
using std::chrono::high_resolution_clock;
using std::chrono::duration_cast;
using std::chrono::duration;
using std::chrono::milliseconds;
auto t1 = high_resolution_clock::now();
for(int i = 0; i<1000; i++){
TextOutW(hMyDC, 25, 25, s, 1);
}
auto t2 = high_resolution_clock::now();
// auto ms_int = duration_cast<milliseconds>(t2 - t1);
duration<double, std::milli> ms_double = t2 - t1;
cout << ms_double.count() << "ms\n";
Run Code Online (Sandbox Code Playgroud)
打印 'H' a 1000 次大约需要 5ms,打印 0x25A0 1000 …
我们必须使用该DeleteObject函数来删除GDI对象.
但是如果我们不删除通过该CreatePen功能创建的GDI笔会发生什么?
我是编程新手.我知道C/C++和Win32的基础知识.我现在正在尝试做图形,但我想要最快的连接到屏幕.我意识到大多数人都会使用Opengl或DirectX.但是,我不想要开销.我想从头开始控制像素数据.我知道GDI位图,但我不确定这是否是对数据的最佳访问.我知道我必须通过窗口进行交谈,这就是麻烦.Opengl和DirectX是否可以编译到GDI级别,或者他们是否采用特殊方式,绕过或使用类似的代码?请不要问我为什么要这样做.也许解释如何做到这一点可能会有所帮助.就像windows结合所有窗口来创建最终图像一样.