我正在编写某种IPC功能,需要将某些资源从一个进程传递到另一个进程.这适用于Pipe handle等,可以通过DuplicateHandle复制.现在我需要将HDC从一个进程传递到另一个进程.这甚至可能吗?如果是的话:怎么样?
子问题:我假设从一个进程到另一个进程的窗口句柄(HWND)是安全的.这个假设是否正确?
请帮我HDC中的alpha通道.我让HDC dc抛出CreateCompatibleDC.比调用CreateDIBSection并可以在内存中找到图像的字节.比调用DrawFrameControl到这个dc.一切正常,但在内存中每个像素有4个字节,alpha通道填充00.即使之前有FF.但我需要alpha通道.如何让DrawFrameControl设置真正的alpha值或者不要触摸它们.谢谢.抱歉英语不好:(
我有一个库,可以使用GDI + apis利用给定的HDC.我想在WPF应用程序中使用它.我尝试从WindowInteropHelper类获取句柄并将其传递给执行绘图的库方法.然而,它失败只是因为它无法从该句柄创建Gdi + Graphics.
然后我尝试在WindowsFormsHost控件中使用WinForm元素并使用WinForm控件的paint事件中提供的HDC,它确实工作正常.我想知道的是,可以直接在WPF控件\窗口上工作吗?有没有其他方法可以从WPF元素中获取HDC,可以使用GDI绘制api?
我有一个第三方dll(普通的C++),它在HDC上使用了一些线条.我希望在C#位图或表单上有这些行.
我试图给C++一个HBITMAP或一个Graphics.FromImage(位图)的HDC,但上述方法都不适合我.
使用MFC TestApp,使用以下代码一切正常
HWND handle = pStatic->GetSafeHwnd();
CDC* dc = pStatic->GetDC();
Draw(dc);
Run Code Online (Sandbox Code Playgroud)
我的问题是:我需要做什么/用于使用上面的Draw(HDC)方法在Bitmap或表单上绘制?
我希望你能帮助我.提前致谢,
帕特里克
我的问题很简单,也不是很重要.
我开始学习编写Win32应用程序.当我从其他人那里读取代码时,我经常会看到他们PAINTSTRUCT ps;在switch语句之前放入WndProc.他们为什么不把这个问题放进去WM_PAINT?他们为内存分配ps,然后不使用它?
我总是看到PAINTSTRUCT ps; HDC hdc = BeginPaint(hWnd, &ps);.但我检查了ps.hdc多次的值,ps.hdc并且hdc每次的值都相等.还有其他原因可以定义hdc可读性或编写更少的代码吗?
(对不起,如果我的英语不好而问题不属于这个社区的水平)
我试图在OpenGL中绘制一些文本,同时程序绘制一个立方体或任何Opengl本机,所以,当我试图将文本放在屏幕上时,它闪烁得非常快,我不知道为什么,我试图改变睡眠没有价值......
代码如下; 这是一个显示问题的GIF.
绿色背景是立方体,相机非常接近背景,你可以随身携带NUM_2.
#include <windows.h>
#include <iostream>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <sstream>
#include "default.h"
using namespace std;
LRESULT CALLBACK WindowProc(HWND, UINT, WPARAM, LPARAM);
DWORD WINAPI WorkLoop(LPVOID PARAMS);
void keyScan (MSG msg, Camera cam);
HDC hDC;
HGLRC hRC;
HWND hwnd;
RECT WBounds;
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
WNDCLASSEX wcex;
MSG msg;
BOOL bQuit = FALSE;
wcex.cbSize = sizeof(WNDCLASSEX);
wcex.style = CS_OWNDC;
wcex.lpfnWndProc = WindowProc;
wcex.cbClsExtra = 0;
wcex.cbWndExtra …Run Code Online (Sandbox Code Playgroud) 我有以下代码,应该picture2.bmp在用户调用项目后绘制ID_FILE_32771.
case WM_COMMAND:
wmId = LOWORD(wParam);
wmEvent = HIWORD(wParam);
// Parse the menu selections:
switch (wmId)
{
case ID_FILE_32771:
hdc = BeginPaint(hWnd, &ps);
LoadAndBlitBitmap2(__T("D://picture2.bmp"), hdc);
EndPaint(hWnd, &ps);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
break;
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
LoadAndBlitBitmap(__T("D://picture.bmp"), hdc);
EndPaint(hWnd, &ps);
break;
Run Code Online (Sandbox Code Playgroud)
问题是,什么都没画.hdc没有正确初始化.我做错了什么,我该如何解决?