TransparentBltやAlphaBlend等を認識させるには?


POP  2004-11-10 14:45:58  No: 55100

TransparentBltやAlphaBlendなどを利用する際
msimg32.libが必要になると知ったのですが、
オブジェクト/ライブラリモジュールの欄の末尾に
半角スペースを挟んでmsimg32.libと追記してもうまくいきません。

wingdi.hと同ヘッダ内のWINVERに従い0x0500とする必要があるとも
聞き、wingdi.hをインクルードし、WINVERを再定義したのですが、
うまくいきません。

この場合、どういったことが原因と考えられるでしょうか?

開発環境はwindows2000、VC++5.0です。よろしくお願いします。


tetrapod  2004-11-10 17:39:01  No: 55101

VC++6 だと wingdi.h に AlphaBlend や TransparentBlt の宣言があります。
VC++5 は手元に無いのでわかりません。
とりあえずエディタで wingdi.h を開き AlphaBlend を検索。
関数原型宣言が無いようなら、未対応ということでしょう。

プレコンパイルヘッダを使っているのであれば WINVER の再定義は
プロジェクトオプションで指定する必要があります。


POP  2004-11-11 03:50:25  No: 55102

大文字の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
をヘッダーの先頭やソースファイルの先頭に入れてみたのですが、
同様のエラー(定義されていない識別子です)を吐き出します。

開発環境改良も検討の視野に入れる必要があるのでしょうか?


tetrapod  2004-11-11 17:29:52  No: 55103

まあ VC++6 だって既に古い (.NET 200x が出てるし) 訳だし、開発環境の更新もありかも。
C++ で template を多用してるようなら VC++7.1 の出来がかなりいいみたいだし、
template 対応が中途半端で腐っている VC++6 は私もはやく捨てたいです。

最新 Platform SDK って VC++5 に対応してるのでしたっけ?
対応しているようなら入れてみてもいいかも。

> をヘッダーの先頭やソースファイルの先頭に入れてみたのですが、
いやだからプロジェクトオプションに指定しないと無駄です。
VC++6 の場合はプロジェクト→設定→C++→一般→プリプロセッサの定義に
WINVER=0x0500
を追加。  VC++5 は知りません。


YuO  2004-11-11 20:44:35  No: 55104

> 最新 Platform SDK って VC++5 に対応してるのでしたっけ?

公式情報では対応していません。
ただし,2003.Feb版は突っ込んでも問題は出ませんでした。


POP  2004-11-12 04:26:50  No: 55105

ご指摘の通りやってみましたが、結果は変わりませんでした。
私の開発環境が悪いと考えるのが筋だと思われますので、
色々新しい環境を整えていきたいと思います。

tetrapod様、YuO様、初心者の私に
お付き合いいただき、ありがとうございました。
大変勉強になりました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加