トップページ > 過去ログ > 記事閲覧
メインウインドウのクラススタイルを変更
名前:sy(サイ) 日時: 2011/12/03 13:52

こんにちは。いつもライブラリにお世話になっています。 今回、ダブルクリックが使いたくなったのでWinAPIで適当に使おうと思いました。 ウインドウズメッセージのダブルクリックを受け取るにはクラススタイルにCS_DBLCLKSを使う必要がありますが、 InitializeWindowではそれが定義されていません。 そこで自作のクラススタイルを定義して実装しようと思ったのですが、 //================================================================================== // 3.06c //================================================================================== WNDCLASS winc; winc.style = CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS; // Dxlibでダブルクリックを使いたいので winc.lpfnWndProc = WndProc; winc.cbClsExtra = winc.cbWndExtra = 0; winc.hInstance = hInstance; winc.hIcon = LoadIcon(NULL , IDI_APPLICATION); winc.hCursor = LoadCursor(NULL , IDC_ARROW); winc.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH); winc.lpszMenuName = NULL; winc.lpszClassName = TEXT("Map Editor"); if (!RegisterClass(&winc)) return -1; SetMainWindowClassName( TEXT("Map Editor") ) ; if( DxLib_Init() == -1 ) { // エラーが起きたら直ちに終了 return -1 ; } while( ProcessMessage() == 0 && !GetIsDown(KEY_INPUT_ESCAPE) ) { // 処理 } ProcessMessage()ではじかれて一回もループに入りません・・・^^; 自分でクラススタイルを設定するにはどうしたらよいでしょうか?

Page: 1 |

Re: メインウインドウのクラススタイルを変更 ( No.1 )
名前:いっち 日時:2011/12/03 18:52

おそらくDXライブラリ的にはマウスは自分で監視するのが筋なのだと思いますが、私は以下のような感じでできました。 (ウィンドウプロシージャでメッセージを処理しなかった場合の戻り値が 0 で良いのかちょっと不安ですが・・・) //- 以下、テストコード -// #include "DxLib.h" LRESULT CALLBACK WndProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam ) { switch ( msg ) { case WM_LBUTTONDBLCLK: MessageBox( 0, "WM_LBUTTONDBLCLK", "TEST", MB_OK ); return 0; case WM_RBUTTONDOWN: MessageBox( 0, "WM_RBUTTONDOWN", "TEST", MB_OK ); return 0; default: break; } return 0; } int WINAPI WinMain( HINSTANCE, HINSTANCE, LPSTR, int ) { ChangeWindowMode( TRUE ); SetHookWinProc( WndProc ); SetMouseDispFlag( TRUE ); SetWindowText( "DxLib:" DXLIB_VERSION_STR ); if ( DxLib_Init( ) == -1 ) return -1; int white = GetColor( 255, 255, 255 ); SetClassLong( GetMainWindowHandle( ), GCL_STYLE, GetClassLong( GetMainWindowHandle( ), GCL_STYLE ) | CS_DBLCLKS ); SetDrawScreen( DX_SCREEN_BACK ); while ( ProcessMessage( ) == 0 && CheckHitKey( KEY_INPUT_ESCAPE ) == 0 ) { ClearDrawScreen( ); DrawFormatString( 0, 0, white, "TEST" ); ScreenFlip( ); } DxLib_End( ); return 0; }
Re: メインウインドウのクラススタイルを変更 ( No.2 )
名前:sy(サイ)(解決) 日時:2011/12/04 01:39

おぉ〜。出来ましたありがとうございます^^ なるほど。クラススタイルを変更できる関数があったのですねorz 確かにDirectXを使う以上は、directinputを使って自分で監視するべきですね。。 既に、自分のwinのコールバックを作って色々やっていたので、こちらが出来たら楽だなぁーと思っての質問でした。 どうもありがとうございました。

Page: 1 |