[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2chのread.cgiへ]
Update time : 05/10 00:36 / Filesize : 205 KB / Number-of Response : 1002
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


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

Win32API質問箱 Build77



1 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 01:54:24 ]
スレ立てるまでもない、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質問箱 Build76
pc11.2ch.net/test/read.cgi/tech/1233622578/

285 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 22:07:53 ]
newを使いたくないなら無理やり↓みたいにスコープ作ればよいのでは。
{
 Gdiplus::Bitmap bitmap1(TEXT("C:\\WINDOWS\\winnt.bmp"));
 printf("%d\n",bitmap1.GetWidth());
}

286 名前:281 mailto:sage [2009/03/09(月) 22:22:46 ]
>>285
レスありがとうございます。
デストラクタのタイミングを制御する必要がある時意外でも、
たとえば、デストラクタのタイミングを制御する必要がなく、いっけんnewを使う必要が無いような時も

自分のやり方だと
Gdiplus::Graphics graphics1(hdc1);
という風にスタックに確保する場面で

他の人は
Gdiplus::Graphics*pGraphics1=new Gdiplus::Graphics(hdc1);
という風にnewで確保しているようです。
この理由がわかりません。

287 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 22:53:01 ]
>>286
クラスのインスタンスでも、基本的には変数と同じ使用方法でいいと思うけどね。
#関数内でのみの使用、永続的な使用等で切り分け

わざとnewで確保するのは、明示的にdeleteを呼ぶことでそこでデストラクタが
実行されることを示したいからじゃない?

ま、別にこだわる必要はなし。
下手にnewばかりしてメモリリークさせるなら>>281の方が合理的なのは確か。

288 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 22:59:10 ]
コンストラクタでGdiplusStartup呼んで、デストラクタでGdiplusShutdown呼ぶクラス一個つくって
mainの頭に置こうぜ

289 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 23:02:40 ]
>>286
サイズがデカいクラスをスタックにとりたくない場合はnewする場合はある。
Gdiplusがそこまでデカいかは知らんが。

290 名前:デフォルトの名無しさん [2009/03/09(月) 23:04:02 ]
> Gdiplusがそこまでデカいかは知らんが。

実装依存

291 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 23:09:29 ]
Gdiplusの実装とか

292 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 23:14:07 ]
>>281のエラーの出るコードをコンパイル実行するとメモリリーク発生だな
何でだろ?

293 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 23:15:15 ]
>>289
言われてみれば、他作クラスはサイズが分からんから
念のためにヒープの方がいいかもな



294 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 23:19:49 ]
readprocessmemory関数を使いたくてVB2005ExpressEditionでプログラムを組んでみたのですが、
エラーが出て動きません。なぜでしょうか??いろいろググってみたけどわかりませんでした。
やりたいことは単にプロセスのメモリを読みたいだけなんですが・・・

「AccessViolationExceptionはハンドルされませんでした。
保護されているメモリに読み取りまたは書込み操作を行おうとしました。他のメモリ
が壊れていることが考えられます。」

Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hWnd As Long, ByRef lpdwProcessId As Long) As Long
Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpszClassName As String, ByVal lpszWindowName As String) As Long

Dim hProc As Long
Dim PID As Long
Dim threadid As Long
hProc = FindWindow("Notepad", vbNullString)
threadid = GetWindowThreadProcessId(hProc, PID) ←ここの処理でエラーになる

295 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 23:23:00 ]
>>292
すでに>>285が答えてるだろ
bitmap1が関数の終わりで解放処理を行おうとするが
その時にはGdiplusShutdownでgdiplusの環境が破棄されてるから正常に終了できない
だからローカル変数のスコープを{}で狭い範囲に閉じ込めなければならない

296 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 23:25:43 ]
>>294
大幅に間違ってる。とりあえず、リファレンスを見直せ。

297 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 23:26:33 ]
HWND な変数に hProc なんて名前を付けるのはやめれ・・・

298 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 23:41:32 ]
>>295
すまん、>>282がそのものずばりのこといってるんだな、俺、ダメポ
デストラクタが呼ばれる前にShutdownすれば、当然、メモリリーク出るわな
Gdiplus::GdiplusShutdown(gdiToken); でShutdownさているのに
プログラム終了時にGdiplus::Bitmap bitmap1のデストラクタ呼ぶんだからな



299 名前:281 mailto:sage [2009/03/09(月) 23:48:25 ]
>>287
>>わざとnewで確保するのは、明示的にdeleteを呼ぶことでそこでデストラクタが
>>実行されることを示したいからじゃない?
僕もそう思います。

>>288
それもいい方法だと思います。

>>289
newを使う理由が1つわかりました。ありがとうございます。

>>290
とりあえずスタックが壊れるほど大きくはなさそうです。

>>292,298
僕も282さんに聞くまで気付きませんでした。

>>293
慎重にやるならそれもいい方法ですね。

>>295
追加説明ありがとうございます。

300 名前:デフォルトの名無しさん mailto:sage [2009/03/10(火) 00:01:49 ]
>>293
他作クラスであってもスタック上に確保できるならサイズは調べられるだろ。
そうでないとそもそもコンパイル不能だ。

まあ、将来的に変更される可能性はあるが。

ちなみに手元の環境だとsizeof(Bitmap)は16で画像の実態は内部で保有してるポインタの先にある。

301 名前:デフォルトの名無しさん mailto:sage [2009/03/10(火) 00:10:50 ]
他人が作ったライブラリの初期化と後始末を同じ関数内でやるのは細心の注意がいるね

302 名前:デフォルトの名無しさん mailto:sage [2009/03/10(火) 00:11:28 ]
>>300
更に言われてみれば、まともなメーカーが提供してるクラスだと
確かに馬鹿でかいクラスのオブジェクトをスタックに積む、なんて
アホなクラスなんぞ無いはずだよな。。。

>コンパイル不能
StackOverflowってコンパイル時に分かるものだったっけ?

303 名前:デフォルトの名無しさん mailto:sage [2009/03/10(火) 00:16:13 ]
スタックにばかでかい配列取ろうとしたときは怒られるな



304 名前:デフォルトの名無しさん mailto:sage [2009/03/10(火) 00:26:58 ]
>>303
thx
警告レベルが低いせいかあまり見た記憶が無いな
今度試してみよう

305 名前:デフォルトの名無しさん mailto:sage [2009/03/10(火) 10:06:06 ]
>>280

>>276

306 名前:デフォルトの名無しさん mailto:sage [2009/03/10(火) 10:14:17 ]
ここは荒らしていいスレじゃなかったっけ

307 名前:デフォルトの名無しさん [2009/03/10(火) 13:11:43 ]
OSではなくソフトウェアから、パフォーマンス オプションの「パフォーマンスを優先する」に設定することは可能でしょうか?そのようなAPIをご存知の方いますでしょうか?

308 名前:デフォルトの名無しさん mailto:sage [2009/03/10(火) 13:25:29 ]
OSもソフトウエア

309 名前:デフォルトの名無しさん mailto:sage [2009/03/10(火) 13:30:44 ]
>>307
そういうAPIがあるかどうかは知らんが、力技でいくなら、レジストリ書き換えて WM_SETTINGCHANGE を発行すれば?

310 名前:デフォルトの名無しさん [2009/03/10(火) 13:30:46 ]
>>308
知らないならレスするなクズ

311 名前:デフォルトの名無しさん mailto:sage [2009/03/10(火) 13:32:23 ]
G(S)etPriorityClass

312 名前:デフォルトの名無しさん mailto:sage [2009/03/10(火) 13:45:49 ]
HKLM\SYSTEM\CurrentControlSet\Control\PriorityControl\Win32PrioritySeparation
をレジストリAPIで適切な値に書き換えて再起動。

313 名前:307 [2009/03/10(火) 13:54:40 ]
ありがとうございます。レジストリ強制書き換えなら可能なのですね。APIでG(S)etPriorityClassでもできるのでしょうか?



314 名前:デフォルトの名無しさん mailto:sage [2009/03/10(火) 13:59:41 ]
システムの動作に関わるレジストリを勝手に書き換えるソフトか

ウィルス並だな

315 名前:デフォルトの名無しさん [2009/03/10(火) 14:03:32 ]
>>314
お前みたいなクズはウィルスよりたちが悪いぜ。

316 名前:デフォルトの名無しさん [2009/03/10(火) 14:17:00 ]
>>315
知らないならレスするなクズ

317 名前:デフォルトの名無しさん mailto:sage [2009/03/10(火) 22:48:00 ]
WSHはCOMですか?

318 名前:デフォルトの名無しさん mailto:sage [2009/03/10(火) 22:49:54 ]
>>317
はい。API ではないのでスレ違いだと思われます。

319 名前:デフォルトの名無しさん mailto:sage [2009/03/10(火) 23:17:54 ]
ActiveScriptはぎりぎりこのスレの範疇にできるだろうけど、
WSHは外れていると思う。

320 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 02:09:42 ]
ウィンドウのクライアント領域をドラッグしてウィンドウの位置を移動させたいんですが、ちょっとうまくいかないので質問。
WM_MOUSEMOVEでマウスボタンが押されていたらドラッグとみなし、SetWindowPosで前回位置との差分分移動としています。
しかし、これだとマウスが動くと同時にウィンドウがガタガタと元の位置辺りとマウス位置あたりに行ったり来たり
を繰り返してしまって、とても汚いです。どういう風にやるとタイトルバーをドラッグした時のように綺麗に動くのでしょうか?
ちなみにマウスの座標はクライアントでもスクリーンでもダメでした。

321 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 02:20:15 ]
WM_NCHITTESTでHTCAPTION返せ

322 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 06:28:31 ]
>>320
いい加減に書くとそうなる
(移動した時にWM_MOUSEMOVEが発生するので、WM_MOUSEMOVE→移動→WM_MOUSEMOVE→・・・を繰り返してしまう)

323 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 07:45:14 ]
WM_LBUTTONDOWNでフラグ立てて、WM_LBUTTONUPで落とすような
処理が必要じゃないの?



324 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 09:00:29 ]
知らない人はレスしなくていいです。

325 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 09:25:56 ]
前回位置との差分じゃなくてWM_LBUTTONDOWNが来た時のカーソル座標と現在のカーソル座標との差分を使うんだよ。
ていうかこんなのググればサンプルがすぐ見つかるんだから深夜に糞スレで質問するぐらいなら自分で探しなよ。

326 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 10:04:15 ]
つーか>>321で一発なのにな

327 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 10:24:15 ]
>>325
そんなアホな処理しなくても>>321でおk

328 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 10:50:14 ]
むしろ>>321でいいのにな

329 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 10:51:07 ]
むしろ>>321でいいのにな

330 名前:デフォルトの名無しさん [2009/03/11(水) 12:02:18 ]
>>321でいいとかマジで言ってるならアホすぎ

331 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 12:27:19 ]
case WM_LBUTTONDOWN:
::PostMessage( hWnd, WM_NCLBUTTONDOWN, HTCAPTION,i lParam);
break;

332 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 12:42:23 ]
タイトルバー以外の部分をドラッグしてウィンドウを移動させる
hp.vector.co.jp/authors/VA023539/tips/window/005.htm

333 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 14:08:28 ]
>>331
コンパイルエラーだろバカ



334 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 14:28:31 ]
#define i

335 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 14:33:24 ]
333 はおそらく実際にコンパイルしてみたに違いないw

336 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 14:36:08 ]
そんなもんコンパイルしなくても見ればわかるだろ JK

337 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 14:41:37 ]
つーかこんな所に貼られたコードを安易にコンパイルして実行する奴なんて居るのか?
得体の知れないファイルを平気でクリックして実行するレベルだろ

338 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 14:44:38 ]
>>337
このスレに貼られたコードの意味が分からない奴なんて居るのか?

339 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 14:47:51 ]
>>338
居るよ
>>337とか


340 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 15:02:01 ]
むしろこのスレに貼られたコードの意味が分かる奴なんて居るのか?

341 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 15:04:27 ]
>>340
いるよ
>>339とか

342 名前:339 mailto:sage [2009/03/11(水) 15:07:17 ]
いや俺は.netしか使ったことないから分かってないよw


343 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 15:07:39 ]
NCHITTESTだと、どのボタンが押されたかとか、自作ライブラリとの親和性が低いとかあるので
>>325の方法で大方解決しました。ありがとうございました。

ところでGDI+の半透明描画や画像の回転機能を自分で作りたいんですが、あのライブラリは
ハードの機能を使ったりしているんでしょうか?自分でちまちまピクセルごとの計算をしたら
とてもゲームに使えるようなスピードにならない気もするんですが・・・



344 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 15:28:34 ]
やってみたのか

345 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 15:31:31 ]
やってみたのだ

346 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 15:39:54 ]
これでいいのだ

347 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 16:11:23 ]
まだやってないです
やるとしたら、描画命令来るたびにロックするとかかな

348 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 17:22:55 ]
>>343
GDI+はソフトウェア描画だよ。

349 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 17:34:05 ]
>>330
何がアホなのか言ってみな

350 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 18:17:52 ]
>>348
ソフトウェア処理だけど一応MMX/SSEなどは使ってるみたい

まあゲームで使える速度じゃないのは言うまでも無いけど

351 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 19:34:55 ]
          ____   
       / \  /\ キリッ
.     / (ー)  (ー)\      
    /   ⌒(__人__)⌒ \    < 何がアホなのか言ってみな
    |      |r┬-|    |      
     \     `ー'´   /      
    ノ            \
  /´               ヽ              
 |    l              \
 ヽ    -一''''''"~~``'ー--、   -一'''''''ー-、.    
  ヽ ____(⌒)(⌒)⌒) )  (⌒_(⌒)⌒)⌒))
          ____
        /_ノ  ヽ、_\
 ミ ミ ミ  o゚((●)) ((●))゚o      ミ ミ ミ
/⌒)⌒)⌒. ::::::⌒(__人__)⌒:::\   /⌒)⌒)⌒)
| / / /     |r┬-|    | (⌒)/ / / //  だっておwwwwwww
| :::::::::::(⌒)    | |  |   /  ゝ  :::::::::::/
|     ノ     | |  |   \  /  )  /
ヽ    /     `ー'´      ヽ /    /     バ
 |    |   l||l 从人 l||l      l||l 从人 l||l  バ   ン
 ヽ    -一''''''"~~``'ー--、   -一'''''''ー-、    ン
  ヽ ____(⌒)(⌒)⌒) )  (⌒_(⌒)⌒)⌒))

352 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 19:37:31 ]
ほらな
答えられない

353 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 20:04:05 ]
>>348ぐぐ そうですか
バリバリフレームレート出まくってるゲームで描画が5割以上GDI+みたいなゲームってありますか?
GDI+入れて組むのめんどくてどんなもんなのかよくわからんのです。知ってる人いたらラッキーなんで教えてくださいよ先輩



354 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 20:09:51 ]
>>353
妄想レスだがフレームレート上げたいゲームならDirectXを普通に使うんじゃない?


355 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 20:34:18 ]
[環境]非MFCでWin32API(VC2005でC++)です。
[質問]画面に入りきらないテキストを描画して、スクロールしたら、
   上の方の文章を消して、下の方の文章を表示するプログラムが組めません。
[どこまでできたの?]
DrawText作ってテキストを表示。
スクロールするだけのWindow。

スクロールした値は取れるので、それをDrawTextに反映させたいのですが、
どうやればいいでしょうか?

356 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 20:35:58 ]
素直にエディットコントロール使うんじゃだめなのか…

357 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 20:48:00 ]
>>356 レスサンクス。
もっと、初期の段階だったらそれも考えれるのですが、、、ここの部分組んだらプログラム完成するんです、、、。

DrawTextの第4引数のRECT構造体の値があるんですが、
これって、マイナスの値入れるのは危険ですか?

RECT rc;
GetClientRect( hWnd, &rc );
rc.top -= 100;

358 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 20:48:54 ]
GDI+の用途って画像ファイルの入出力とアンチエイリアスつきのベクタ描画ぐらいじゃね

359 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 21:01:11 ]
>>357
問題はない。

360 名前:357 mailto:sage [2009/03/11(水) 21:04:13 ]
>>359 レスありがとん。
それを聞いて安心しました。
あとは、テキストのたての長さを割り出す作業だけでいけそうです。
ありがとうございました。

361 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 21:48:35 ]
メモリDCに最初から全部描いておいて、スクロールの都度、必要な部分だけBitBltする手もあるぞ

362 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 21:58:41 ]
早く数学を教えてください。
待て待て

363 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 22:49:25 ]
>>354それもそうですね。
>>358GDIだけだと結構やりたいこと出来ないんですよ・・・



364 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 23:24:54 ]
CloseHandleの戻り値って確認してる?
正しいハンドルを渡してもエラーになる場合ってどんなとき?

365 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 23:27:49 ]
::GetLastError()

366 名前:デフォルトの名無しさん [2009/03/11(水) 23:38:41 ]
>>351
アホ乙w

367 名前:デフォルトの名無しさん mailto:sage [2009/03/12(木) 00:15:36 ]
>>364
通信系だと、通信不良とか?

368 名前:デフォルトの名無しさん [2009/03/12(木) 00:49:05 ]
プロパティシートで
psp.lParam=(LPARAM)Data; とlParamに構造体 DATAを設定しているのですが、
受取先の、Windowでは死んでいます。うまく受け渡しが
できません。
psp.pszTemplate = "IDD_D";
psp.pfnDlgProc = (DLGPROC)Function0;
psp.lParam=(LPARAM)Data;

hpsp[0] = CreatePropertySheetPage(&psp);



memset(&psh, 0, sizeof(PROPSHEETHEADER));
psh.dwSize = sizeof(PROPSHEETHEADER);
psh.dwFlags = PSH_NOAPPLYNOW;
psh.hInstance = hInst;
psh.hwndParent = hDlg;
psh.nPages = 1;
psh.phpage = hpsp;
psh.pszCaption = "設定";
(HWND)PropertySheet(&psh);
うまく受け渡すにはどうしたらいいでしょうか

369 名前:デフォルトの名無しさん mailto:sage [2009/03/12(木) 01:00:26 ]
Dataの型は DATA か DATA* か? 前者なら間違い

370 名前:デフォルトの名無しさん mailto:sage [2009/03/12(木) 01:01:18 ]
肝心の受け取り部分が書いてないが
((PROPSHEETPAGE*)lParam)->lParamにしてるか?

371 名前:デフォルトの名無しさん mailto:sage [2009/03/12(木) 01:57:57 ]
>>364
ディクス書き込みで、フラッシュ時に IO エラーが発生するとか、
ディスクフルになるとか。

372 名前:デフォルトの名無しさん mailto:sage [2009/03/12(木) 08:34:59 ]
>>371
ファイル書き込みは遅延書き込みありでキャッシュされているから、
CloseHandle()の戻り値では、アプリケーションからディスクI/O時の
エラーは検出されないと思う。イベントログに上がるだけでは?

キャッシュを書き戻す処理に関係なく、キャッシュとディスク上の配置は
マップ管理されていると思うので、ディスクフルはWriteFile()の戻り値で
エラーが返されるはず。

当然だが、オープンされていない間違ったハンドルを渡せばエラーが返る。

373 名前:デフォルトの名無しさん mailto:sage [2009/03/12(木) 12:26:27 ]
          ____
        /_ノ  ヽ、_\
 ミ ミ ミ  o゚((●)) ((●))゚o      ミ ミ ミ
/⌒)⌒)⌒. ::::::⌒(__人__)⌒:::\   /⌒)⌒)⌒)
| / / /     |r┬-|    | (⌒)/ / / //  >>366 そんなこと言うなよ。仲間だろ?wwwwwww
| :::::::::::(⌒)    | |  |   /  ゝ  :::::::::::/
|     ノ     | |  |   \  /  )  /
ヽ    /     `ー'´      ヽ /    /     バ
 |    |   l||l 从人 l||l      l||l 从人 l||l  バ   ン
 ヽ    -一''''''"~~``'ー--、   -一'''''''ー-、    ン
  ヽ ____(⌒)(⌒)⌒) )  (⌒_(⌒)⌒)⌒))



374 名前:デフォルトの名無しさん mailto:sage [2009/03/12(木) 18:11:18 ]
ボタンの描画についての質問です。
グループボックスや、ラジオボタンが描画されるとき、文字列描画部分の背景色を透過することはできないでしょうか。

MSDNを読むとWM_CTLCOLORBTNはオーナードローのボタンでないと、意味が無いということで (実際無理でした)
サブクラス化をして、WM_ERASEBKGNDを捕まえて何も処理せずにreturnしたり、
GetClassInfoEx → styleメンバに CS_OWNDC を OR演算 → 新しいクラス登録、その後 WM_CREATE でSetBkMode(hdc,TRANSPARENT)を試してみたりしましたが、どちらもできませんでした。
ボタンの描画自体はデフォルトの処理を任せたいのですが、何か方法はないでしょうか。

375 名前:デフォルトの名無しさん mailto:sage [2009/03/12(木) 18:16:18 ]
WS_EX_TRANSPARENTを指定してWM_CTLCOLOR〜でNULLブラシを返せば?

376 名前:デフォルトの名無しさん mailto:sage [2009/03/12(木) 18:30:15 ]
>>375
レス有難う御座います。
試してみましたが、変化が現れませんでした。

377 名前:デフォルトの名無しさん mailto:sage [2009/03/12(木) 18:32:15 ]
WM_CTLCOLORBTN or WM_CTLCLORSTATIC にて

SetBakMode( hDC, TRANSPARENT);
return (HBRUSH)GetStockObject( NULL_BRUSH);

378 名前:デフォルトの名無しさん mailto:sage [2009/03/12(木) 18:50:07 ]
>>377
コンパイルエラーだろバカ

379 名前:デフォルトの名無しさん mailto:sage [2009/03/12(木) 18:56:37 ]
STATICコントロールは WM_...STATIC で透過させることが出来ますが、
BUTTONコントロールはどうもうまくいかないみたいです・・・。
素直に諦めることにします。

380 名前:デフォルトの名無しさん mailto:sage [2009/03/12(木) 19:03:33 ]
普通に可能なんだが・・・

ああ馬鹿なのね

381 名前:デフォルトの名無しさん mailto:sage [2009/03/12(木) 19:21:27 ]
面倒だから煽らなくていいです

382 名前:デフォルトの名無しさん mailto:sage [2009/03/12(木) 19:57:00 ]
>>380はわかってない馬鹿とみた

383 名前:デフォルトの名無しさん mailto:sage [2009/03/12(木) 20:03:24 ]
>>382
ん?悔しかったの?www



384 名前:デフォルトの名無しさん mailto:sage [2009/03/12(木) 20:07:28 ]
ラジオボタンやグループボックスの背景なら>>375>>377が書いてる方法で透過するだろ。
前にそういうコード書いたことあるし。

385 名前:デフォルトの名無しさん mailto:sage [2009/03/12(木) 20:46:16 ]
>>384
新しくプロジェクトを始めて、ダイアログベースではないウィンドウ上で試してみたら、成功しました。
リソースから作ったダイアログ上のタブコントロールの上にこれらのBUTTONコントロールを配置した時に、見栄えが悪かったため
最初の質問をさせていただきましたが、グループボックスをリソースからではなく、
WM_INITDIALOG内にて、親ウィンドウをタブコントロールとして生成したところ、やりたかったことを実現することが出来ました。
レスしてくれた方々、有難う御座いました。








[ 続きを読む ] / [ 携帯版 ]

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

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