質問 |
||
| QNo.4016504 | GetStockObject | |
|---|---|---|
| 質問者:fm27 |
雑誌に載っているソースファイルの 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' 型への変換には明示的なキャストが必要です。とエラーがでてしまいます。なにぶん初心者なものでエラーの意味が分かりません。教えていただけたら嬉しいです。 |
|
困り度:
|
||
| 質問投稿日時: 08/05/12 13:53 |
||
回答 |
|
| ANo.3 | CのプログラムをC++でコンパイルしようとしているとか。 |
|---|---|
| 回答者:titokani | |
| 種類:アドバイス どんな人:専門家 自信:参考意見 |
|
| 回答日時: 08/05/12 15:47 |
|
| |
| この回答への補足 | この回答に補足をつける(質問者のみ) |
| この回答へのお礼 | 回答のとうりでした。C言語でコンパイルしたら作動しました。 本当に困っていたのでありがとうございました。 |
回答 |
|
| ANo.2 | hbrBackground は HBRUSH(HBRUSH__ *)型の変数です。 そこに GetStockObject( )関数の戻り値である HGDIOBJ(void *)型の値を代入しているので型が違うというエラーが出ています。 以前はコンパイラが自動的に型を変換していたのでエラーにならなかったのでしょう。 新しいコンパイラでは wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); 又は wc.hbrBackground = (HBRUSH__*)GetStockObject(WHITE_BRUSH); のように手動で明示的に型を変換(キャストという)しないといけません。 |
|---|---|
| 回答者:php504 | |
| 種類:回答 どんな人:一般人 自信:参考意見 |
|
| 回答日時: 08/05/12 14:45 |
|
| |
| この回答への補足 | この回答に補足をつける(質問者のみ) |
| この回答へのお礼 | 非常に参考になりました。本当に困っていたのでありがとうございました。非常に分かりやすい説明です。ありがとうございました。 |
回答 |
|
| ANo.1 | コンパイラのチェックが厳しくなっているのでしょう wc.hbrBackground = (HBRUSH*)GetStockObject(WHITE_BRUSH); といった具合に キャストしてやればいいと思いますよ |
|---|---|
| 回答者:redfox63 | |
| 種類:回答 どんな人:専門家 自信:自信あり |
|
| 回答日時: 08/05/12 14:07 |
|
| |
| この回答への補足 | この回答に補足をつける(質問者のみ) |
| この回答へのお礼 | この回答にお礼をつける(質問者のみ) |