• 締切済み

GetStockObject

雑誌に載っているソースファイルの int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR lpCmdLine, int nCmdShow ) { WNDCLASS wc; MSG msg; wc.style = CS_HREDRAW | CS_VREDRAW; wc.lpfnWndProc = WindowProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hInstance; wc.hIcon = LoadIcon(NULL , IDI_APPLICATION); wc.hCursor = LoadCursor(NULL , IDC_ARROW); ここ → wc.hbrBackground = GetStockObject(WHITE_BRUSH); wc.lpszMenuName = NULL; wc.lpszClassName = APP_NAME; ここのところでerror C2440: '=' : 'void *' から 'struct HBRUSH__ *' に変換することはできません。(新しい動作 ; ヘルプを参照) 'void*' から非 'void' 型への変換には明示的なキャストが必要です。とエラーがでてしまいます。なにぶん初心者なものでエラーの意味が分かりません。教えていただけたら嬉しいです。

みんなの回答

  • titokani
  • ベストアンサー率19% (341/1726)
回答No.3

CのプログラムをC++でコンパイルしようとしているとか。

fm27
質問者

お礼

回答のとうりでした。C言語でコンパイルしたら作動しました。 本当に困っていたのでありがとうございました。

  • php504
  • ベストアンサー率42% (926/2160)
回答No.2

hbrBackground は HBRUSH(HBRUSH__ *)型の変数です。 そこに GetStockObject( )関数の戻り値である HGDIOBJ(void *)型の値を代入しているので型が違うというエラーが出ています。 以前はコンパイラが自動的に型を変換していたのでエラーにならなかったのでしょう。 新しいコンパイラでは wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); 又は wc.hbrBackground = (HBRUSH__*)GetStockObject(WHITE_BRUSH); のように手動で明示的に型を変換(キャストという)しないといけません。

fm27
質問者

お礼

非常に参考になりました。本当に困っていたのでありがとうございました。非常に分かりやすい説明です。ありがとうございました。

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

コンパイラのチェックが厳しくなっているのでしょう wc.hbrBackground = (HBRUSH*)GetStockObject(WHITE_BRUSH); といった具合に キャストしてやればいいと思いますよ

関連するQ&A