アプリ版:「スタンプのみでお礼する」機能のリリースについて

VisualC++です。

デスクトップイメージを取得するため、
CMainFrm内で、

CRect rect;
CWnd* pwWnd = GetDesktopWindow();
pwWnd->GetClientRect( &rect );
CDC* pwDC = pwWnd->GetDC();

とやって、このpwDCを使ってイメージを取得することに成功しました。

しかし、この方法では、シングルモニタの場合のみ成功し、マルチモニタでは、メインモニタのイメージのみが取れて、双方の画面のイメージはとれないようです。

わたしは今、モニタを2つ用意して、右側がメインモニタ、左側がサブモニタとしていますが、左側のモニタのイメージを取得するには、どうしたらよいでしょうか。

rectにも、メインモニタのサイズが入っています。


HDC hDC = ::CreateDC("DISPLAY", NULL, NULL, NULL);
CDC* pwHDC= CDC::FromHandle( hDC );

とやって、このpwHDCを使っても、メインモニタのみのデスクトップイメージしかとれないようです。

A 回答 (1件)

 こんばんは。



 当方のPCはモニターが一台なので試し様が無いのですが、

 http://msdn.microsoft.com/ja-jp/library/cc428502 …

 によれば、

 //モニターの台数分だけ呼ばれる筈
BOOL CALLBACK MonitorEnumProc(HMONITOR hMonitor, HDC hdcMonitor, LPRECT lprcMonitor, LPARAM dwData)
{
MONITORINFOEX miex;
miex.cbSize = sizeof(miex);
::GetMonitorInfo(hMonitor, &miex);

if(miex.dwFlags == MONITORINFOF_PRIMARY)
{
//主モニター
}

//hdcMonitorからスクリーンショットを取る
return TRUE;
}

static void ScreenCopy()
{
HDC hDC = GetDC(NULL);
::EnumDisplayMonitors(hDC, NULL, &::MonitorEnumProc, 0);
::ReleaseDC(NULL, hDC);
}

 の様にすると出来るのではないでしょうか。
    • good
    • 0
この回答へのお礼

お返事ありがとうございました。

コンパイルする際に、HMONITORがなかったり、リンクするときに、GetMonitorInfoがなかったり(user32.libをリンクするだけではだめ)と苦労しましたが、出来ました!

上記に上げていただいたサンプルプログラムは、大変、役に立ちました。
ありがとうござました。

お礼日時:2009/08/20 22:00

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!