在这种情况下,我应该在 CreateDC 之后使用 DeleteDC

文萨

我有以下代码

public static class GammaRamp
{
        [DllImport("gdi32.dll")]
        private unsafe static extern bool SetDeviceGammaRamp(Int32 hdc, ushort* ramp);
        [DllImport("gdi32.dll")]
        public static extern IntPtr CreateDC(string lpszDriver, string lpszDevice, string lpszOutput, IntPtr lpInitData);

        private static Int32 hdc;
        //some other things

       public static unsafe void SetGammaRamp(int aBrightness, int aTemperature)
       {
            //...some other things calculating rgbArray but not important for the question

            foreach (System.Windows.Forms.Screen screen in System.Windows.Forms.Screen.AllScreens)
            {
                //Get the hardware device context of the screen
                hdc = CreateDC(screen.DeviceName, null, null, IntPtr.Zero).ToInt32();
                SetDeviceGammaRamp(hdc, rgbArray);
            }
       }
}

将 CreateDC 结果转换为 ToInt32 而不是保留它 IntPtr 然后调用 DeleteDC 是一种好习惯。我应该在 CreateDC 之后使用 DeleteDC 方法,但这是否必须在我的代码中?我希望这段代码不会出现某种内存问题。

杰索雷克

是的,总是在不再需要时调用DeleteDC()您创建的任何设备上下文CreateDC(),并调用ReleaseDC()您通过GetDC()获得的任何设备上下文GetWindowDC()

我想不出常见的情况是您不负责销毁您创建的 DC - 通常,假设您需要这样做,除非另有说明。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在这种情况下,我们应该在所有地方都使用noexcept吗?

在这种情况下,是否应该在CSS中使用前缀?

在这种情况下我应该使用哪种设计?

在这种情况下我应该如何使用git

在这种情况下,我应该如何使用diff?

我应该在握住锁的情况下还是放开锁之后通知我?

我应该在以下情况下使用线程安全集合吗?

在什么情况下我们应该在类型声明中使用`[] a`?

在这种情况下,我应该使用System.in.close()?

在这种情况下,我应该使用reduceLeft方法吗?

在这种情况下,我应该使用哪个分类器或ML SDK?

在这种情况下,我应该使用隔离范围吗?

在这种简单情况下,我应该使用同步块吗?

在这种简单情况下,我应该坚持使用LINQ吗?

iOS:在这种情况下我应该使用委托还是 NSNotification?

laravel在这种情况下我应该使用哪个路由或链接

在这种情况下,我应该使用应用内购买吗?

在这种情况下我应该使用智能指针吗?

在这种情况下我应该使用哪个 sqlite 查询

在这种情况下我应该使用哪些 aws 服务?

在这种情况下我应该使用内部连接吗?

在这种情况下应该使用cron工作吗?

在React JS中让孩子拥有构造函数并拥有自己的状态是否是一种好习惯?还是应该在这种情况下使用道具?

为什么我应该在这种语法中使用 & ?SPI寄存器问题

我可以在这种情况下使用枚举吗?

我可以在这种情况下使用swift通用

在这种情况下,我该如何使用“ while”

在这种情况下我如何使用管道

Python-我应该在不使用init或setter的情况下使用只读@property吗?