标签: gdi

GDI泄漏问题

我注意到使用任务管理器,以下代码中有GDI泄漏.执行此代码的进程中GDI对象的计数每次执行时增加1,但我似乎无法找到问题.

任何帮助,将不胜感激.

// create new DC based on current    
HDC hDC = CreateCompatibleDC(GetDC());
// select a bitmap into the new DC and keep the old one
HGDIOBJ hOldObj = SelectObject (hDC,hBM);
// do somthing here --> 100% no leak here
SomeFunction (hDC);
// select the old object back from whence it came and delete whats returned   
DeleteObject (SelectObject (hDC,hOldObj));
// delete the DC
DeleteDC(hDC);
// delete the tmp object
DeleteObject (hOldObj);
Run Code Online (Sandbox Code Playgroud)

R M

c winapi gdi

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

如何在c#中打印itf条形码

我需要使用GDI +打印并交错2个5条形码(18位无校验和).我使用Web上的一些代码为代码128条形码做了这个.条码扫描器unfortunatley不读取代码128所以我不得不求助于ITF条形码.

谢谢,肯

c# windows printing gdi barcode

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

GDI +表现技巧

有没有人知道讨论GDI +性能的任何可靠(并且希望是广泛的)书籍/网站(超出明显的范围)?

例如,我最近遇到了这个优秀的实验.我最近也注意到这种Graphics.FillPath()方式比方式更快Graphics.DrawPath().我很想知道我缺少的其他重要信息.

亲善,大卫

.net performance system.drawing gdi

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

c ++ gdi动画无效

我试图用gdi创建球动画,但我不能让它工作.我用它创造了一个球

   Graphics graphics(hdc);
Run Code Online (Sandbox Code Playgroud)

钢笔(颜色(255,0,0,255)); graphics.DrawEllipse(&pen,sf,0,10,10); 我有while循环,循环并添加1到sf值基本上像这个sf ++; 比我尝试重新绘制窗口(它不起作用)所以生病最终有一个以上的圈; /这里是循环(循环是int WM_PAINT)

while(sd==1)//sd equals 1
    {
        sf++;
        onPaint(hdc);
        InvalidateRect (hWnd, NULL, TRUE);// this should repaint the window but it doesn't
        UpdateWindow(hWnd);
    }
Run Code Online (Sandbox Code Playgroud)

提前谢谢拉米

c++ winapi gdi repaint visual-c++

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

如何增加矩形的大小

我想将矩形的大小增加10像素.以下代码似乎无效.假设sampleRect是我的矩形.请告诉我.

Rectangle temp = new Rectangle(
    sampleRect.X - 10, 
    sampleRect.Y - 10, 
    sampleRect.Width + 2*10, 
    sampleRect.Height + 2*10); 
Run Code Online (Sandbox Code Playgroud)

.net c# gdi

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

如何在C#中清除矩形的填充?

如何清除矩形的填充?我只想保留边界.

g.FillRectangle(Brushes.Transparent, x, y, w, h);
Run Code Online (Sandbox Code Playgroud)

没有用,没有带有alpha的rGB,我想删除填充,所以只留下边框.

c# graphics drawing gdi

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

使用Forms Load Event将字符串写入面板

我试图DrawString()在面板(panel1)上使用方法绘制一个字符串.我想在form(Form1)加载时发生这种情况.但这不会发生.但是如果我在click事件处理程序中使用相同的代码(如下所示),则会绘制字符串panel1.我在哪里做错了?

    private void Form1_Load(object sender, EventArgs e)
    {

        /*string rand = getRandomString();
        textBox1.Text = rand;*/
        string rand = "Hello";
        SolidBrush sbr = new SolidBrush(Color.Black);
        Graphics g = panel1.CreateGraphics();
        FontFamily fam = new FontFamily("Magneto");
        Font font = new System.Drawing.Font(fam, 24, FontStyle.Bold);
        g.DrawString(rand, font, sbr, new Point(20, 20));
    }   
Run Code Online (Sandbox Code Playgroud)

.net c# gdi winforms

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

StretchBlt()不会创建镜像

根据MSDN:

如果nWidthSrc和nWidthDest参数的符号或者nHeightSrc和nHeightDest参数不同,StretchBlt将创建位图的镜像.

所以我尝试创建颠倒的图像.我有一个类看起来像这样:

class Picture
{
 private:
 HBITMAP bmp; //Bitmap
 HDC pdc; //Device context
 short int w; //Weidth of bitmap
 short int h; //Heighth of bitmap

 public:
 short int x;
 short int y;
 void draw(HDC);
 void upside_down();
}
Run Code Online (Sandbox Code Playgroud)

我有这个方法:

void Picture::upside_down()
{
 HDC dc = CreateCompatibleDC(pdc);
 HBITMAP bmap = CreateCompatibleBitmap(pdc, w, h);
 SelectObject(dc, bmap);
 BitBlt(dc, 0, 0, w, h, pdc, 0, 0, SRCCOPY);
 StretchBlt(pdc, 0, 0, w, h, dc, 0, 0, w, -h, SRCCOPY);
 DeleteDC(dc);
 DeleteObject(bmap);
}
Run Code Online (Sandbox Code Playgroud)

但它不起作用,没有任何反应.我想知道它是否具有DC兼容性,我总是在理解其背后的逻辑时遇到问题.

那么,我应该怎么做才能让我的位图翻转?

c++ winapi gdi bitmap stretchblt

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

以一定的分辨率加载光标

我有两个游标资源。第一个[IDC_CURSOR1]包含三种不同的图像类型:

  • 32x32、24 bpp
  • 48x48、24 bpp
  • 64x64、24 bpp

第二个[IDC_CURSOR2]仅包含一个:

  • 48x48、24 bpp

如果我正在调用LoadCursor(hInst,IDC_CURSOR1),它将始终加载32x32版本,而我找不到加载48x48或64x64版本的方法。在第二种情况下,它会加载48x48图标(因为没有其他版本),但会将其缩小到32x32。

如何加载非32x32分辨率的游标?

顺便说一句:我试图更改DPI,因为根据msdn,它应该自动以更高的dpi加载更高分辨率的光标,但事实并非如此。

谢谢!

windows winapi gdi

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

Windows 10屏幕坐标偏移7

我在Windows 10上使用C ++进行编码-直接Win32 API。

我想在屏幕的右上方显示一个窗口。在执行此操作时,我注意到最大化窗口的屏幕坐标为left = -8,top = -8,right = 1936,bottom = 1088。

另外,当我将窗口的位置设置为right = 1920且top = 0时,右侧大约有8个像素的间隙。我尝试移动窗口以查看得到的屏幕坐标。

对于非最大化窗口的rect.left可以从-7到1912年。

所以东西滑了7个像素?WTF Microsoft?

我应该如何提出rec.right = 1913的值来将窗口对齐到屏幕右侧而没有悬空间隙?

但是1920年的rect.right留下了空白。所以1912年的rect.right将留下更多的空白...

我需要一种可以在Vista上运行的解决方案。在win10之前,rect.right应该像您期望的那样为1920。

Whaaaaat会在这里吗?我要开始扔刀了!

在代码方面,这正是GetWindowRect正在报告的内容...(对不起,我的调试功能很奇怪)

::GetWindowRect (_wndo, r);

DBG("ExtRc l=`d r=`d t=`d b=`d w=`d h=`d",
r->left, r->right, r->top, r->bottom, r->right-r->left, r->bottom-r->top);
Run Code Online (Sandbox Code Playgroud)

c++ windows gdi windows-10

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