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