TransparentBltやAlphaBlendなどを利用する際
msimg32.libが必要になると知ったのですが、
オブジェクト/ライブラリモジュールの欄の末尾に
半角スペースを挟んでmsimg32.libと追記してもうまくいきません。
wingdi.hと同ヘッダ内のWINVERに従い0x0500とする必要があるとも
聞き、wingdi.hをインクルードし、WINVERを再定義したのですが、
うまくいきません。
この場合、どういったことが原因と考えられるでしょうか?
開発環境はwindows2000、VC++5.0です。よろしくお願いします。
VC++6 だと wingdi.h に AlphaBlend や TransparentBlt の宣言があります。
VC++5 は手元に無いのでわかりません。
とりあえずエディタで wingdi.h を開き AlphaBlend を検索。
関数原型宣言が無いようなら、未対応ということでしょう。
プレコンパイルヘッダを使っているのであれば WINVER の再定義は
プロジェクトオプションで指定する必要があります。
大文字のWINGDI.Hというのも見つかりましたが、
とりあえず無視して、wingdi.hをメモ帳で開いてAlphaBlendを検索しました。
すると、以下のような部分がありました。
#define AC_SRC_ALPHA 0x01
WINGDIAPI BOOL WINAPI AlphaBlend(…引数…);
WINGDIAPI BOOL WINAPI TransparentBlt(…引数…);
これを見る限り未対応ということは無さそうです。
また、カレントフォルダ内のdebugフォルダに中間ファイルとして
『(プロジェクト名).pch』というファイルがありました。
実際に、プロジェクト設定を見てみると、
「プリコンパイル済みヘッダを自動的に使用」にチェックが入っており、
使用されているものと考えられました。
しかし、プロジェクトオプションから指定する方法がわからなかったので、
#ifndef WINVER
#define WINVER 0x0500
#endif
をヘッダーの先頭やソースファイルの先頭に入れてみたのですが、
同様のエラー(定義されていない識別子です)を吐き出します。
開発環境改良も検討の視野に入れる必要があるのでしょうか?
まあ VC++6 だって既に古い (.NET 200x が出てるし) 訳だし、開発環境の更新もありかも。
C++ で template を多用してるようなら VC++7.1 の出来がかなりいいみたいだし、
template 対応が中途半端で腐っている VC++6 は私もはやく捨てたいです。
最新 Platform SDK って VC++5 に対応してるのでしたっけ?
対応しているようなら入れてみてもいいかも。
> をヘッダーの先頭やソースファイルの先頭に入れてみたのですが、
いやだからプロジェクトオプションに指定しないと無駄です。
VC++6 の場合はプロジェクト→設定→C++→一般→プリプロセッサの定義に
WINVER=0x0500
を追加。 VC++5 は知りません。
> 最新 Platform SDK って VC++5 に対応してるのでしたっけ?
公式情報では対応していません。
ただし,2003.Feb版は突っ込んでも問題は出ませんでした。
ご指摘の通りやってみましたが、結果は変わりませんでした。
私の開発環境が悪いと考えるのが筋だと思われますので、
色々新しい環境を整えていきたいと思います。
tetrapod様、YuO様、初心者の私に
お付き合いいただき、ありがとうございました。
大変勉強になりました。
ツイート | ![]() |