トップページ > 過去ログ > 記事閲覧
子ウィンドウをつかって表示
名前:わからんこ 日時: 2013/03/30 21:06

ttp://hpcgi2.nifty.com/natupaji/bbs/patio.cgi?mode=view&no=1556 このスレッドを参考に子ウィンドウにdxlibを描画することはできました。 しかし、親ウィンドウが触れなくなってしまいました。 Windowsプログラムに慣れていないので子ウィンドウの作り方があっているかわからないのですが一度見てもらえないでしょうか? #include <windows.h> #include "DxLib.h" LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); ATOM InitApp(HINSTANCE); BOOL InitInstance(HINSTANCE, int); TCHAR szClassName[] = TEXT("Window01"); TCHAR szClassName2[] = TEXT("Window02"); HWND TestWc; HWND TestWc2; int QuitMessage = 0; int WINAPI WinMain(HINSTANCE hCurInst, HINSTANCE hPrevInst, LPSTR lpsCmdLine, int nCmdShow) { MSG msg; BOOL bRet; int Num=0; if (!InitApp(hCurInst)) return FALSE; if (!InitInstance(hCurInst, nCmdShow)) return FALSE; // 作成したウインドウをセット SetUserWindow( TestWc2 ); // DXライブラリの初期化 if( DxLib_Init() < 0 ) return -1; // 裏画面を使用する SetDrawScreen( DX_SCREEN_BACK ) ; // メッセージループ while( ProcessMessage() == 0 && QuitMessage == 0 ) { // 画面をクリア ClearDrawScreen() ; // ボックスを描画 DrawBox( Num, 100, 200, 200, GetColor( 255,0,0 ), TRUE ) ; // 裏画面の内容を表画面に反映する ScreenFlip() ; // メッセージ処理 if( PeekMessage( &msg,TestWc2, 0, 0, PM_REMOVE ) ) { TranslateMessage( &msg ) ; DispatchMessage( &msg ) ; } Num+=10; if(Num==400){ Num=0; } } // DXライブラリの後始末 DxLib_End(); return (int)msg.wParam; } // ウィンドウクラスの登録 ATOM InitApp(HINSTANCE hInst) { WNDCLASSEX wc; WNDCLASSEX wc2; 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 = szClassName; wc.hIconSm = (HICON)LoadImage( NULL, MAKEINTRESOURCE(IDI_APPLICATION), IMAGE_ICON, 0, 0, LR_DEFAULTSIZE | LR_SHARED); //--------------子ウィンドウクラスの登録---------------// wc2.cbSize = sizeof(WNDCLASSEX); wc2.style = CS_HREDRAW | CS_VREDRAW; wc2.lpfnWndProc = WndProc; wc2.cbClsExtra = 0; wc2.cbWndExtra = 0; wc2.hInstance = hInst; wc2.hIcon = (HICON)LoadImage( NULL, MAKEINTRESOURCE(IDI_APPLICATION), IMAGE_ICON, 0, 0, LR_DEFAULTSIZE | LR_SHARED); wc2.hCursor = (HCURSOR)LoadImage( NULL, MAKEINTRESOURCE(IDC_ARROW), IMAGE_CURSOR, 0, 0, LR_DEFAULTSIZE | LR_SHARED); wc2.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); wc2.lpszMenuName = NULL; wc2.lpszClassName = szClassName2; wc2.hIconSm = (HICON)LoadImage( NULL, MAKEINTRESOURCE(IDI_APPLICATION), IMAGE_ICON, 0, 0, LR_DEFAULTSIZE | LR_SHARED); if((RegisterClassEx(&wc)==0||RegisterClassEx(&wc2)==0)) return 0; return TRUE; } // ウィンドウの生成 BOOL InitInstance(HINSTANCE hInst, int nCmdShow) { HWND hWnd; HWND hWnd2; hWnd = CreateWindow(szClassName, TEXT("親ウィンドウ"), /* WS_OVERLAPPEDWINDOW*/ NULL, 270, 160, 600, 640, NULL, NULL, hInst, NULL ); if(!hWnd) return FALSE; //----------子ウィンドウの作成----------// hWnd2 = CreateWindow(szClassName2, // クラス名 TEXT("子ウィンドウ"), WS_OVERLAPPEDWINDOW, 870, 160, 200, 640, hWnd, NULL, hInst, NULL ); if(!hWnd2) return FALSE; ShowWindow(hWnd, nCmdShow);   ShowWindow(hWnd2, nCmdShow); UpdateWindow(hWnd); UpdateWindow(hWnd2); //グローバル変数に格納 TestWc=hWnd; TestWc2=hWnd2; return TRUE; } // ウィンドウプロシージャ LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp) { switch (msg) { case WM_DESTROY: PostQuitMessage(0); QuitMessage = 1 ; break; default: return (DefWindowProc(hWnd, msg, wp, lp)); } return 0; }

Page: 1 |

Re: 子ウィンドウをつかって表示 ( No.1 )
名前:管理人 日時:2013/03/31 19:15

// メッセージ処理 if( PeekMessage( &msg,TestWc2, 0, 0, PM_REMOVE ) ) { TranslateMessage( &msg ) ; DispatchMessage( &msg ) ; } こちらの部分を // メッセージ処理 if( PeekMessage( &msg,TestWc2, 0, 0, PM_REMOVE ) ) { TranslateMessage( &msg ) ; DispatchMessage( &msg ) ; } // メッセージ処理 if( PeekMessage( &msg,TestWc, 0, 0, PM_REMOVE ) ) { TranslateMessage( &msg ) ; DispatchMessage( &msg ) ; } こうしたら( 親ウインドウのメッセージ処理もするようにしたら )親ウインドウも 動くようになりました よろしければお試しください
Re: 子ウィンドウをつかって表示 ( No.2 )
名前:わからんこ 日時:2013/03/31 21:32

ありがとうございます。 Dxlibのウィンドウにもメッセージ処理が必要だったんですね。

Page: 1 |