[表示 : 全て 最新50 1-99 2chのread.cgiへ]
Update time : 05/09 14:36 / Filesize : 16 KB / Number-of Response : 44
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Win32API質問箱 Build73



1 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 14:02:11 ]
スレ立てるまでもない、Win32APIのついての質問はこちらへどうぞ。
やさしいお兄さんやお姉さんたちが答えてくれるかも。
「知らないならレスしないで下さい。ウザイだけです。 」なんて言わないでねっ!

過去スレ、関連リンクは>>2-10くらい。

■注意
・質問する前にMSDNライブラリやPlatformSDK、Google等で検索しましょう。
・日本語版MSDN Online Libraryは不完全です。英語版(msdn2.microsoft.com/library/)の利用推奨。
・APIフックなど高度な事をしたい場合はできるだけAdvenced Windowsを読みましょう。
・言語特有の問題やIDE、MFCやVCLなどの質問はそれぞれの言語や開発環境スレで

- Win32API質問箱 wiki
wiki.livedoor.jp/program1/d/FrontPage

Win32API質問箱 Build72
pc11.2ch.net/test/read.cgi/tech/1226575789/

8 名前:デフォルトの名無しさん [2008/11/29(土) 14:09:34 ]
ReadFile関数の読み込みバッファにwchar_t型のバッファを渡したのですが、
文字列が格納出来ていない原因がわかりません
char型のバッファだとうまくいくのですが

9 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 14:10:26 ]
BOMつけろ馬鹿

10 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 14:11:01 ]
>>8
入力がwcharじゃないからでしょうよそりゃ


            , ;,勹
           ノノ   `'ミ
          / y ,,,,,  ,,, ミ
         / 彡 `゚   ゚' l
         〃 彡  "二二つ
         |  彡   ~~~~ミ
     ,-‐― |ll  川| ll || ll|ミ―-、
   /     |ll        |   ヽ
  /       z W`丶ノW     ヽ
 /        \\   / /      |
/    天      \`i / /  狗   |

11 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 14:15:04 ]

         *、 *、      。*゚    *-+。・+。-*。+。*
        / ゚+、 ゚+、   *゚ ・゚    \       。*゚
       ∩    *。  *。    +゚    ∩    *
   (´・ω・`)      +。   +。   ゚*     (´・ω・`)
   と   ノ      *゚  *゚    ・     。ヽ、  つ
    と、ノ     ・゚  ・゚     +゚    *  ヽ、 ⊃
     ~∪    *゚  *゚      *    +゚    ∪~   ☆
          +′ +′      +゚   ゚+。*。・+。-*。+。*゚

12 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 14:25:57 ]
予めウィンドウのハンドルなどを適当な変数に代入しておいて、
ウィンドウプロシージャ内などで、引数として与えられるハンドルではなく、予め代入しておいたハンドルを使用することは、何か問題あるのでしょうか。


13 名前:デフォルトの名無しさん [2008/11/29(土) 14:37:56 ]
>>12
まったく問題ないよ。でも WM_CREATEは、作成完了前に送られるから、プロシージャの仮引数を使わないといけないね。

14 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 14:38:34 ]
>>13
ありがとうございます。分かりました。

15 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 14:53:08 ]
これ思い出した
ttp://www.hsjp.net/upload/src/up54027.jpg

16 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 14:54:06 ]
>12
同じウィンドウクラスに属するウィンドウを複数作るのが面倒になるけどね。



17 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 14:55:56 ]
>>15
どこの誤爆だよw
そしてどういう状況だよw

18 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 14:57:30 ]
Windowをクラスでラップすればいいんじゃね?www
俺天才wwwwww

メンバ関数ポインタをウィンドウプロシージャに設定するにはどうしたらいいんですか

SetWindowLongを呼んだら64bitがどうのと警告がでます

19 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 15:13:57 ]
>>18
SetWindowLongPtrだろ。
こっち使って64ビットの警告が出るのはバグみたいなもんだから、
64ビットで動けば無視していい。あるいはATLみたいな対策するのもありだ。

20 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 15:28:08 ]
MenuHelp使うと、ステータスバーが平面になるのは仕様?

21 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 18:28:33 ]
>>15
Hello Kitty guy!

22 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 19:07:52 ]
まあ俺も、みずほの通帳とカードはキティなんだけどな。

23 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 19:53:11 ]
自分のこと俺って呼ぶ女の子ですね。分かります。そういうの嫌いじゃありません

24 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 20:55:39 ]
※ わざと誤爆したり.NETマンセーして荒らす基地外が粘着中です ※

25 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 21:21:54 ]
嫌いじゃないどころか燃えるのですが、私って変ですか?

26 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 22:16:44 ]
AlphaBlend()がうまくいかないので教えてください。
BCBのソースで申し訳ないのですが基本的にはMFCなどと同等です。

Graphics::TBitmap* bt = new Graphics::TBitmap;
BLENDFUNCTION blend = {AC_SRC_OVER, 0, 100, 0};
RGBQUAD rgbq;
TCanvas* ti = Image1->Canvas;
bt->Width = 256;
bt->Height = 256;
bt->PixelFormat = pf32bit;

for (int i = 0; i < 255; i++) {
int* sc = reinterpret_cast<int*>(bt->ScanLine[i]);
for (int j = 0; j < 255; j++) {
rgbq.rgbBlue = i;
rgbq.rgbGreen = j;
sc[j] = reinterpret_cast<int&>(rgbq);
}
}

BOOL RESULT =
::AlphaBlend(ti->Handle, 0, 0, Image1->Width, Image1->Height,
bt->Handle, 0, 0, bt->Width, bt->Height,
blend);
if (RESULT == FALSE) {
Application->MessageBox(L"失敗!", L"", MB_OK);

これでImage1という場所に32bitのBitmapを透過度100で貼り付けようと
しているのですが、白い四角が表示されるだけです。しかもAlphaBlend()が
返す値は常にFALSE、つまり失敗しているのです。
BCB固有の部分を無視していただいて差し支えありません。単純に32bitの
Bitmapを透過度100程度で別の場所に貼り付けたいだけなのです。



27 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 22:24:35 ]
GetLastError

28 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 22:27:52 ]
87

29 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 22:31:36 ]
>>27
わかりました。調べてみます。

30 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 22:46:04 ]
>>27>>28
はい、その通りエラーコード87でした。
つまり ERROR_INVALID_PARAMETER って事ですか・・・

ちなみにAlphaBlend()を通さずに直接描画するとちゃんと
グラデーションがかかった256×256の画像が表示されるのですが、
どこがIvvalid Parameterなのやらさっぱり。

31 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 23:02:42 ]
INVALID_PARAMETERって言われてるなら渡してるハンドルが変なんじゃないの
OWLだっけ?じゃなくて普通に作ったHDC渡して試すとか

32 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 23:06:03 ]
VCLですが、HandleプロパティがVCL内部に保持している
オブジェクトのHDCを取り出します。
BCBのヘルプを見ても、Handleで取り出したHDCでWin32を
呼び出しているプログラム例が載っていました。

でも実際に呼び出しが失敗しているわけですから、もうHandleが
おかしいとしか考えられませんね。普通にHDC作ってやってみます。

33 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 23:08:46 ]
www.geocities.jp/asumaroyuumaro/program/winapi/bitmap.html

例えばこれですが、Delphiなんですけどちゃんと動くんですよね。
ここを参考にBCBに移植したら動かなくなったので、移植が失敗
しているのかもしれません。

34 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 23:25:26 ]
NescafeGoldBlend()

35 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 23:37:02 ]
お騒がせしました。
×bt->Handle, 0, 0, bt->Width, bt->Height,
○bt->Canvas->Handle, 0, 0, bt->Width, bt->Height,

私のケアレスミスでした。無事動きました。

36 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 23:38:46 ]
NescafeGoldBlendの大瓶500円で買ってきますた



37 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 23:57:47 ]
職場で飲むのかえ?

38 名前:デフォルトの名無しさん mailto:sage [2008/11/30(日) 01:47:06 ]
そういやAlphaBlend() APIって計算式おかしいよね

Dst.Red = Src.Red * Src.Alpha + (1 - Src.Alpha) * Dst.Red
Dst.Green = Src.Green * Src.Alpha + (1 - Src.Alpha) * Dst.Green
Dst.Blue = Src.Blue * Src.Alpha + (1 - Src.Alpha) * Dst.Blue

↑これが正しいはずなのに

> Dst.Red = Src.Red + (1 - Src.Alpha) * Dst.Red
> Dst.Green = Src.Green + (1 - Src.Alpha) * Dst.Green
> Dst.Blue = Src.Blue + (1 - Src.Alpha) * Dst.Blue

↑実際はこういう計算らしい

なんでこんなおかしな仕様なんだろう

39 名前:デフォルトの名無しさん mailto:sage [2008/11/30(日) 02:13:36 ]
うそん

40 名前:デフォルトの名無しさん mailto:sage [2008/11/30(日) 02:15:24 ]
>>38
SrcとAlphaの対応は固定だから事前に計算しておけば計算量が減るだろ?

41 名前:デフォルトの名無しさん mailto:sage [2008/11/30(日) 02:22:38 ]
>>38
もっとちゃんとヘルプ見た方がいいぞ。

42 名前:デフォルトの名無しさん mailto:sage [2008/11/30(日) 03:16:14 ]
>>40
違う

AC_SRC_ALPHAを指定するとSrc/Destは合成する画像のそれぞれのピクセルだから
ピクセルごとにRed/Green/Blue/Alphaの値は違う

43 名前:デフォルトの名無しさん mailto:sage [2008/11/30(日) 06:28:55 ]
>>38-42
要するに、Src(32bppDIB)をDstに合成したいときは、

AlphaBlend(Dst, Src)
ではなくて、

Tmp.Red = Src.Red * Src.Alpha
Tmp.Green = Src.Green * Src.Alpha
Tmp.Blue = Src.Blue * Src.Alpha
Tmp.Alpha = Src.Alpha
を用意しておいて、

AlphaBlend(Dst, Tmp)
って事でしょ。使えねぇw






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](*・∀・)<16KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef