C++ DC C和x2B的手柄+;窗户

C++ DC C和x2B的手柄+;窗户,c++,windows,handles,gdi,C++,Windows,Handles,Gdi,我想单独获取每个物理屏幕的像素,但是MSDN说GetDC需要一个窗口来知道要处理哪个屏幕。有没有办法告诉它不用窗口或鼠标就可以使用哪个手柄 因此,我可以调用EnumDisplayDevices,并按照建议循环查找连接了多少个监视器以及每个监视器的信息:问题是我正在使用Microsoft提供的代码: 使用此代码时,EnumDisplayDevices调用“函数调用中的参数太多”时出错 这是因为C到C++代码移植(即代码最初是用C编写的)。 建议的解决方案是正确处理typedefs typedef

我想单独获取每个物理屏幕的像素,但是MSDN说
GetDC
需要一个窗口来知道要处理哪个屏幕。有没有办法告诉它不用窗口或鼠标就可以使用哪个手柄

因此,我可以调用
EnumDisplayDevices
,并按照建议循环查找连接了多少个监视器以及每个监视器的信息:问题是我正在使用Microsoft提供的代码:

使用此代码时,
EnumDisplayDevices
调用“函数调用中的参数太多”时出错

这是因为C到C++代码移植(即代码最初是用C编写的)。 建议的解决方案是正确处理

typedefs

typedef BOOL (WINAPI *EDDType)(LPCSTR,DWORD,PDISPLAY_DEVICEA,DWORD);

BOOL GetDisplayMonitorInfo(int nDeviceIndex, LPSTR lpszMonitorInfo)
{
    EDDType EnumDisplayDevices;
    HINSTANCE  hInstUser32;
    DISPLAY_DEVICE DispDev;
    char szSaveDeviceName[33];
    BOOL bRet = TRUE;
    HRESULT hr;

    hInstUser32 = LoadLibrary("c:\\windows\\User32.DLL"); // You forgot the double backslash
    if (!hInstUser32) return FALSE;

    EnumDisplayDevices = (EDDType)GetProcAddress(hInstUser32, "EnumDisplayDevicesA");

那不是
user32.dll
存在的地方。当然,您不需要使用运行时链接。如果我可能会问:为什么您首先要手动加载windows库?这是完全没有必要的,因为你可以动态链接它们,所有的加载/执行都可以由windows处理…因为我是新手,不知道自己在做什么。只是自学我能找到的东西。如果你能给我提供关于这个问题的信息,我将不胜感激。
typedef BOOL (WINAPI *EDDType)(LPCSTR,DWORD,PDISPLAY_DEVICEA,DWORD);

BOOL GetDisplayMonitorInfo(int nDeviceIndex, LPSTR lpszMonitorInfo)
{
    EDDType EnumDisplayDevices;
    HINSTANCE  hInstUser32;
    DISPLAY_DEVICE DispDev;
    char szSaveDeviceName[33];
    BOOL bRet = TRUE;
    HRESULT hr;

    hInstUser32 = LoadLibrary("c:\\windows\\User32.DLL"); // You forgot the double backslash
    if (!hInstUser32) return FALSE;

    EnumDisplayDevices = (EDDType)GetProcAddress(hInstUser32, "EnumDisplayDevicesA");