”CDC*”类型的实参与“HDC”类型的形参不兼容
时间: 2023-09-18 11:15:51 浏览: 229
在被定义的函数中必须指定形参的类型。-C语言课件(精简版)
在Windows编程中,`CDC`和`HDC`是两种不同的设备上下文类型。`CDC`是MFC中定义的设备上下文类,而`HDC`是Windows API中定义的设备上下文句柄类型。
当我们在使用MFC编程时,有时需要将`CDC`对象转换为`HDC`句柄,或者将`HDC`句柄转换为`CDC`对象。通常,我们可以使用`CDC`类中的`GetSafeHdc`函数来获取`HDC`句柄,或者使用`CDC`类的构造函数将`HDC`句柄转换为`CDC`对象。
例如,如果需要将一个`CDC`对象作为参数传递给一个需要`HDC`句柄类型的函数,可以使用`GetSafeHdc`函数获取`HDC`句柄,如下所示:
```c++
void MyFunc(HDC hdc);
CDC* pDC = GetDC();
HDC hdc = pDC->GetSafeHdc();
MyFunc(hdc);
```
如果需要将一个`HDC`句柄作为参数传递给一个需要`CDC`对象类型的函数,可以使用`CDC`类的构造函数将`HDC`句柄转换为`CDC`对象,如下所示:
```c++
void MyFunc(CDC* pDC);
HDC hdc = GetDC(NULL);
CDC dc;
dc.Attach(hdc);
MyFunc(&dc);
```
在这个例子中,我们首先调用`GetDC`函数获取屏幕的`HDC`句柄,然后使用`Attach`函数将`HDC`句柄附加到`CDC`对象上,最后将`CDC`对象作为参数传递给`MyFunc`函数。
总之,`CDC`对象和`HDC`句柄是不同的设备上下文类型,在使用时需要进行类型转换。可以使用`GetSafeHdc`函数将`CDC`对象转换为`HDC`句柄,或者使用`CDC`类的构造函数将`HDC`句柄转换为`CDC`对象。
阅读全文