○デスクトップの画像を取得して、ウィンドウに描画する
BitBlt(hdc,0,0,rc.right,rc.bottom, CreateDC(TEXT("DISPLAY") , NULL , NULL , NULL), 0, 0, SRCCOPY);
CreateDCでデスクトップのハンドルを取得してイメージを転送します
■サンプルプログラム
#include <windows.h>
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
ATOM InitApp(HINSTANCE);
BOOL InitInstance(HINSTANCE,int);
char szClassName[]="sample01"; //ウインドウクラス
HINSTANCE hInst;
HWND hWnd;
int WINAPI WinMain(HINSTANCE hCurInst,HINSTANCE hPrevInst,
LPSTR lpsCmdLine,int nCmdShow ){
MSG msg;
BOOL bRet;
hInst = hCurInst;
if(!InitApp(hCurInst)) return FALSE;
if(!InitInstance(hCurInst,nCmdShow)) return FALSE;
while((bRet = GetMessage(&msg,NULL,0,0)) != 0){
if(bRet == -1){
MessageBox(NULL,"GetMessage ERR","Error",MB_OK);
break;
}else{
if(!IsDialogMessage(hWnd,&msg)){//タブキーでコントロールを移動したくない場合はこの行をコメントする
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
}
return (int)msg.wParam;
}
//ウインドウクラスの登録
ATOM InitApp(HINSTANCE hInst){
WNDCLASSEX wc;
wc.cbSize = sizeof(WNDCLASSEX);
wc.style =CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc = WndProc;//プロ―ジャー名
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInst;//インスタンス
wc.hIcon = (HICON)LoadImage(NULL,
MAKEINTRESOURCE(IDI_APPLICATION),
IMAGE_ICON,
0,
0,
LR_DEFAULTSIZE | LR_SHARED);
wc.hCursor = (HCURSOR)LoadImage(NULL,
MAKEINTRESOURCE(IDC_ARROW),
IMAGE_CURSOR,
0,
0,
LR_DEFAULTSIZE | LR_SHARED);
wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
wc.lpszMenuName = NULL; //メニュー名
wc.lpszClassName = (LPCSTR)szClassName;
wc.hIconSm = (HICON)LoadImage(NULL,
MAKEINTRESOURCE(IDI_APPLICATION),
IMAGE_ICON,
0,
0,
LR_DEFAULTSIZE | LR_SHARED);
return (RegisterClassEx(&wc));
}
//ウインドウの生成
BOOL InitInstance(HINSTANCE hInst,int nCmdShow){
hWnd = CreateWindow(szClassName,
"タイトルバーにこの名前が表示されます",
WS_OVERLAPPEDWINDOW,//ウインドウの種類
CW_USEDEFAULT, //x座標
CW_USEDEFAULT, //y座標
CW_USEDEFAULT, //幅
CW_USEDEFAULT, //高さ
NULL, //親ウインドウのハンドル、親を作るときは NULL
NULL, //メニューハンドル、クラスメニューを
//使うときは NULL
hInst, //インスタンスハンドル
NULL);
if(!hWnd) return FALSE;
ShowWindow(hWnd,nCmdShow);
UpdateWindow(hWnd);
return TRUE;
}
//描画メソッド
//-------------------------------
//再描画したい時は次のように書く
//InvalidateRect(hWnd, NULL,1);
//UpdateWindow(hWnd);
//-------------------------------
COLORREF bkColor=RGB(200,255,255);//背景色を規定する
HBRUSH bkColorBrush=CreateSolidBrush(bkColor);//背景色のブラシを用意する
void paint(HWND hWnd){
RECT rc;
GetClientRect(hWnd,&rc);//ウインドウの範囲を取得
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hWnd,&ps);
BitBlt(hdc,0,0,rc.right,rc.bottom, CreateDC(TEXT("DISPLAY") , NULL , NULL , NULL), 0, 0, SRCCOPY);
EndPaint(hWnd,&ps);
}
//ウィンドウプロシージャ
LRESULT CALLBACK WndProc(HWND hWnd,UINT msg,WPARAM wp,LPARAM lp){
switch(msg){
case WM_CREATE:
SetTimer(hWnd,1000,500,NULL);//ID:1000 500msのタイマーを作成
break;
case WM_PAINT:
paint(hWnd);
break;
case WM_TIMER:
if(wp == 1000){
//再描画要求
InvalidateRect(hWnd, NULL,1);
UpdateWindow(hWnd);
}
else return (DefWindowProc(hWnd,msg,wp,lp));//自分と関係のないタイマーは戻す
break;
case WM_CLOSE:
KillTimer(hWnd,1000);//タイマーを破棄
DestroyWindow(hWnd);//ウインドウを破棄
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return (DefWindowProc(hWnd,msg,wp,lp));
}
return 0;
}
▲トップページ
>
Windows と C++