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


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

Win32API質問箱 Build85



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

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

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

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

Win32API質問箱 Build84
pc12.2ch.net/test/read.cgi/tech/1259478896/

686 名前:デフォルトの名無しさん mailto:sage [2010/01/19(火) 20:21:42 ]
エディットやリストボックスを画面上から消すにはどうすればいいんだ?
DestroyWindowてのを試したが何も起きなかった

687 名前:デフォルトの名無しさん mailto:sage [2010/01/19(火) 20:55:04 ]
>>686
エディットやリストボックスのウィンドウハンドルが合っているか確認する。
エディットやリストボックスがDestroyWindowを呼び出すスレッドに属しているか確認する。

688 名前:デフォルトの名無しさん [2010/01/19(火) 21:30:27 ]
>エディットやリストボックスがDestroyWindowを呼び出すスレッドに属しているか確認する。

どういうこと?コントロールを生成したスレッドじゃないと消せないってことなの?

689 名前:デフォルトの名無しさん mailto:sage [2010/01/19(火) 21:54:05 ]
別のスレッドで作成したウィンドウを DestroyWindow 関数で破棄することはできません。

690 名前:デフォルトの名無しさん mailto:sage [2010/01/20(水) 09:09:42 ]
ウィンドウのサイズ変更で、
縮小できるサイズを制限する方法教えてください

691 名前:デフォルトの名無しさん mailto:sage [2010/01/20(水) 09:45:30 ]
GETMINMAXINFO

692 名前:デフォルトの名無しさん mailto:sage [2010/01/20(水) 20:01:14 ]
CreateWindow関数をでテキストボックスを作成し
SetWindowTextでボックスに文字を入れたいのですが
ボックス内をクリックしないとSetWindowTextで入れた文字が画面に描画されません
InvalidateRect関数で再描画をしてみたのですがやはり反映されないようです・・・
どのようにすれば、テキストボックス内に文字をすぐ描画することができますか?

693 名前:デフォルトの名無しさん mailto:sage [2010/01/20(水) 21:14:49 ]
>>692
SetWindowTextだけで反映するよ

static HWND hEdit;//or グローバルでHWND hEdit;
・・・
hEdit = CreateWindow... 
・・・
SetWindowText(hEdit,".....");
確認してみて。

694 名前:デフォルトの名無しさん mailto:sage [2010/01/20(水) 21:38:30 ]
>>693
ちょっとやってみます。
ありがとうございます。



695 名前:デフォルトの名無しさん mailto:sage [2010/01/21(木) 22:49:21 ]
キーボードで左右上下に何かを移動させるようなゲームを作りたいんだけど
キー入力がある度に背景のマップも再描画しないとならないの?

696 名前:デフォルトの名無しさん mailto:sage [2010/01/21(木) 22:50:01 ]
無効じゃない領域は再描画しなくていいよ

697 名前:デフォルトの名無しさん mailto:sage [2010/01/21(木) 23:05:35 ]
スクロールするなら移動して背景について新たに表示が必要になった部分だけ描画する

698 名前:デフォルトの名無しさん mailto:sage [2010/01/21(木) 23:27:13 ]
IMEパッドみたいにマウスで文字を書くプログラムを作りたいんだけど
MouseMoveと何を使えばいいですか?
マウスで直線を描くプログラムならできるのですが・・・

699 名前:デフォルトの名無しさん mailto:sage [2010/01/21(木) 23:31:45 ]
>>698
直線で曲線を近似すればいいと思うよ。

700 名前:デフォルトの名無しさん mailto:sage [2010/01/21(木) 23:54:23 ]
>>699
マウスポインタの始点と終点をLineTo関数で繋ぐことしかできないんで・・・
どうすれば曲線の近似をかけますか?

701 名前:デフォルトの名無しさん mailto:sage [2010/01/22(金) 00:04:42 ]
>>700
俺とて素人だから大きなことは言えないが
たとえば0.1秒ごとに点を取ってつなぐとか。

702 名前:デフォルトの名無しさん mailto:sage [2010/01/22(金) 00:06:54 ]
試しにさぁ
MouseMoveが来るたびにx,yにSetPixelしてごらんよ

点が集まれば線になることは分かるだろ
点をでかくするのもいいだろう

703 名前:デフォルトの名無しさん mailto:sage [2010/01/22(金) 00:11:29 ]
本に書いてあった方法だが、>>702のようにすると飛び飛びの点々になるだけだから、
MouseMoveでLineToを呼べばちゃんと繋がるとのこと

704 名前:デフォルトの名無しさん mailto:sage [2010/01/22(金) 00:12:00 ]
GDI+のGraphics::DrawCurveならスプラインが描画できるな。



705 名前:698 mailto:sage [2010/01/22(金) 00:45:09 ]
timer使ったりしてるんですけどなかなかうまくいきません・・・
けど、いろいろ試そうと思います。
みなさん、ありがとうございます。

706 名前:デフォルトの名無しさん mailto:sage [2010/01/22(金) 01:43:50 ]
case WM_TIMER
pt.x=LOWORD(lParam);
pt.y=HIWORD(lParam);

ってできないんだっけ?

707 名前:698 mailto:sage [2010/01/22(金) 02:42:09 ]
あ、linetoを2回使ったらできました!
皆さんのおかげです。
ありがとうございました。

708 名前:デフォルトの名無しさん mailto:sage [2010/01/22(金) 03:19:24 ]
マウスで曲線描く場合
一般的には始点制御点終点の3点からベジエ曲線を描くと比較的簡単
ja.wikipedia.org/wiki/%E3%83%99%E3%82%B8%E3%82%A7%E6%9B%B2%E7%B7%9A

709 名前:デフォルトの名無しさん mailto:sage [2010/01/22(金) 03:45:56 ]
>>706
LPARAMは常にマウス座標が入ってんのか
面白いw



710 名前:デフォルトの名無しさん mailto:sage [2010/01/22(金) 19:04:37 ]
GetMessagePosとかなんとか

711 名前:デフォルトの名無しさん mailto:sage [2010/01/22(金) 21:52:11 ]
TRUEって打とうと思ったのにTERUってなっててワロタんですがどうしたらいいですか?

712 名前:デフォルトの名無しさん mailto:sage [2010/01/22(金) 21:58:34 ]
#define TERU TRUE

713 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 01:02:57 ]
座標xが0〜10yが0〜10
の範囲に線が引かれているかどうか確認するプログラムを作りたいのですが
どうすればいいか思いつきません、誰か知恵を貸してください

714 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 01:17:54 ]
お前センス無いからもう諦めた方がいい



715 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 01:37:44 ]
そこをなんとか、頼みます

716 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 02:06:32 ]
>>715
一度その線を描き
GetPixelの類で(0,0)〜(10,10)までの座標の点色を1個1個確かめるという
バカでもわかる方法があるけど
まともなレスを求めるなら
線にも色々あるのでどんな線なのか
0〜10までの刻み幅はどの程度なのか
端数の処理方法はどうなってるのか
このあたりは最低限欲しいところ。

717 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 02:25:02 ]
すみません
線はLineTo関数で書く普通の線です。
例えば、100*100ピクセルの正方形内にどんな形でもいいので線が引かれていたら1を出力
線が引かれていなかったら0を出力するみたにしたいです。
説明が下手ですみません。


718 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 02:37:12 ]
>>717
線数を数える変数でも作って、LineToで線を描くときにカウントするのは駄目なの?
正方形の範囲外にも線が引かれる可能性があるなら、線を描く時にマウスの座標で範囲チェックも実施するとか。

719 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 02:51:04 ]
>>717
線分&矩形のあたり判定なので
レーザーアリシューティングゲームのソースでも見なさい
速さや精度が必要ないなら
いったん描画してGetPixelで調べるのがいちばん簡単

720 名前:717 mailto:sage [2010/01/23(土) 04:49:14 ]
レスありがとうございます
GetPixcelでやって見ようと思うんですが
RGBの値をうまく取得できません。すべて255,255,255になってしまいます。
下のようにやったのですが、何がいけないのでしょうか?

COLORREF color;

hdc=BeginPaint(hWnd,&ps);
color=RGB(0,0,255);
SetPixel(hdc,10,10,color);
int r=GetRValue(GetPixel(hdc,10,0));
int g=GetGValue(GetPixel(hdc,10,0));
int b=GetBValue(GetPixel(hdc,10,0));
wsprintf(buff,TEXT("%d %d %d"),r,g,b);
MessageBox(NULL,LPWSTR(buff),NULL,MB_OK);


721 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 05:14:33 ]
>>720
10,10 に 0,0,255をセットしつつも
10,0の座標を見てる

722 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 07:02:03 ]
GetPixelが遅いのは.NET通したときだけで、API叩く分には速いの?

723 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 07:13:37 ]
遅い。
一端DIBに転送してからシステムメモリ上で確認した方がいい。

724 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 10:01:16 ]
出る質問全てが中学生クラスの質問レベルだったり単純な数字のミスだったりで萎える
小学生か?



725 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 10:14:37 ]
>>7211
すみません、ありがとうございます

>>724
すみません。。

726 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 10:15:29 ]
最近の小学生は中学生クラスの質問をするのか。
ゆとり教育を止めて正解だったようだな。

727 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 10:18:01 ]
すまないと思うなら1日は自分で悩めよ低脳

728 名前:デフォルトの名無しさん [2010/01/23(土) 10:38:26 ]
SHAutoCompleteを使わずにコンボボックスで入力補完を行う方法を教えてください。

729 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 10:52:11 ]
>>728
CLSID_AutoCompleteで作ったAutoCompleteオブジェクトをどうこうする。
詳細は以下を参照。
User Interface - Windows Shell - Shell Developer's Guide
- Application Support - Using Autocomplete

730 名前:デフォルトの名無しさん [2010/01/23(土) 11:08:47 ]
>>729
蟻がd

731 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 12:31:17 ]
テーマとかビジュアルスタイルを設定した、ボタン等のコントロールのイメージは、どのようにすれば取得できますか。

732 名前:デフォルトの名無しさん [2010/01/23(土) 12:32:35 ]
レジストリの中で、Explorerのコンテキストメニューを作り出すための
ファイルの「新規作成」メニュー用のキーとその扱い方について教えて
ください、これの言語対応について。

WindowsXpまでは、この「新規作成」されるファイルのファイル名は日本語
バージョンのOSでは確かに日本語の名称になっていました。
たとえば、'.rtf' の場合、rtffile の「新規リッチテキストドキュメント」
でした。

ところが、Vistaですとこれが「Rich Text Document」といった英語名になっていて、
それでもExplorerではメニューは日本語の名称で現れ、かつ新規作成もされていました。
これはWin32APIで日本語に変換できるものか、それともどこかに言語別の対応データが
レジストリにあるのでしょうか?

733 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 13:50:48 ]
>>732
実データは実行ファイルやDLLの文字列リソースに入っていることが多いな。
レジストリにはそのリソースへの参照文字列が入っている。
FriendlyTypeNameとか、ShellNewのItemNameとか。
拡張子に関連付けられた名前なら、AssocQueryStringで取れた気がする。

これ以上は、世界のどこかにいる関連付けマイスターにでも訊いてくれ。
歴史的経緯もあってか複雑怪奇過ぎて、俺も詳しくは知らん。

734 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 14:19:36 ]
>>732
成功した暁には、是非その操作を一つの関数にまとめ、貴方の謹作Win32APIとしてフリーに公開して下さると一同感激します。



735 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 14:23:35 ]
名前は
GetNewDocumentDefaultNameWhenNewDocumentOfRightClickContextMenuOfExplorer辺りでしょうか?

736 名前:732 [2010/01/23(土) 14:47:39 ]
>>733
>FriendlyTypeName, ShellNewのItemName, AssocQueryString など

なるほど!そういえばVistaにはこれらのキーがありますね、これらを
取得して調べてみます。ありがとうございました!!


737 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 14:50:39 ]
どこを見てるのかわからないけど、「@filename,resource」の形式なら、
SHLoadIndirectString() とかで取れるよね。

738 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 14:57:41 ]
>>734-735
過去ログ見れとか検索しろとかいうよりか
2ch仕様のWin32APIとしてまとめてDLLをどっかの
サイトにソースごと置いておいてくれると有り難いよ
な。確かに。

739 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 16:00:56 ]
GetPixelより早いの無いの?

740 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 16:10:10 ]
LONG WINAPI GetPixel2ch( HBITMAP hmembitmap,int x,int y)
C++用にはインポートされておらずマクロで定義されているので
早い。

741 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 16:43:37 ]
>>739
GetDIBits

742 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 22:15:26 ]
lineToの幅は何ピクセルか分かりますか?

743 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 22:17:00 ]
殺すぞ

744 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 22:19:38 ]
>>742
デバイスコンテキストのペンを取得してGetObjectしてペンのスタイルと幅を見る。
ヒントは出したから後は自分で考えろ。



745 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 22:25:02 ]
ヒントっていうかまんまだな

746 名前:デフォルトの名無しさん mailto:sage [2010/01/24(日) 02:42:52 ]
おかげさまでキラーアプリが出来上がりました。
明日、特許申請に行こうと思います

747 名前:デフォルトの名無しさん mailto:sage [2010/01/24(日) 05:52:45 ]
ノートPCに、USBキーボード指して使ってるんですが
USBキーボードのキーを押しっぱなしにしていても
ノートPCのキーボードが押されてないと判断するのか
WM_KEYDOWNの直後に同じキーのWM_KEYUPが発生してしまうのですが。

アプリで標準の入力とみなすキーボードの選択って
どうやるのか教えて頂ける方いましたら宜しくお願いします。


748 名前:デフォルトの名無しさん mailto:sage [2010/01/24(日) 05:55:12 ]
WM_KEYDOWN
WM_KEYUP
WM_KEYUP
WM_KEYUP
WM_KEYUP

っていう意味ならオートリピートしてるだけじゃないの?

749 名前:デフォルトの名無しさん mailto:sage [2010/01/24(日) 06:15:02 ]
ノートPCに直接ついてるキーボードでAキー押しっぱなしにしても
KEYUPは来ないんですが、USBキーボードでAキー押しっぱなしにすると
押しっぱなしにしてるのにKEYUPが来てしまうんです。

↓のような感じです。
if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE)){

 if(!GetMessage(&msg,NULL,0,0)){
  break;
 }

 if(msg.message == WM_KEYUP)
 {
  break; ←USBキーボードだとキー押下だけで、引っかかる。
 }


750 名前:デフォルトの名無しさん mailto:sage [2010/01/24(日) 06:20:35 ]
>>748
すいません見落としました。
調べてみます。有難うございました。

751 名前:747 mailto:sage [2010/01/24(日) 13:32:40 ]
たびたびすみません。
PCのキーボード長押しの後、離すと
WM_KEYDOWN  このとき"lParam30ビット直前のキー状態" は0
WM_KEYDOWN  このとき"lParam30ビット直前のキー状態" は1
WM_KEYDOWN  このとき"lParam30ビット直前のキー状態" は1
...
WM_KEYUP

となり、自分が想像してるオートリピートの処理となるのですが
USBキーボードだと長押しだけで
WM_KEYDOWN  このとき"lParam30ビット直前のキー状態" は0
WM_KEYUP
WM_KEYDOWN  このとき"lParam30ビット直前のキー状態" は0
WM_KEYUP
WM_KEYDOWN  このとき"lParam30ビット直前のキー状態" は0
WM_KEYUP
...繰り返す

となるようなのですが、
直前のキー状態が0になるので
OSのキーリピートでなく、自動連打?のようなものが働いているのですが
これはキーボードについてるオートリピート機能と
OSのキーリピートは異なるのでしょうか。
これだけをアプリから無効化する手段は何か無いでしょうか。


752 名前:デフォルトの名無しさん mailto:sage [2010/01/24(日) 13:47:05 ]
自動連打って何よ。
ゲームの連射機能みたいなもん?

753 名前:747 mailto:sage [2010/01/24(日) 14:00:51 ]
キーボードの説明書とやらを見てもリピートみは触れてないし
キーボードのプロパティで、速度を、一番長く遅くしても短く速くしても
似たタイミングで↑のようなことになるんだもの。
きっと下らない原因なんでしょうが。
押下中にKEYUPが起こってもらうわけには絶対いかないので
脳内でこれを自動連打と名付けて対処方法考え中なだけです。

754 名前:デフォルトの名無しさん mailto:sage [2010/01/24(日) 14:16:50 ]
Bingってみると、チャタリングによる不良とかPS/2->USB変換機絡みで
そういう事が起きることもあるみたいだな。
USBキーボード側が腐ってるって事で良いんじゃね?



755 名前:747 mailto:sage [2010/01/24(日) 15:05:15 ]
>>754
有難うございます。

手動ではありえないくらい短い時間で連続してKEYUP来たら
それは無視する、とかでもう少し粘ってみます。

756 名前:デフォルトの名無しさん mailto:sage [2010/01/24(日) 15:44:06 ]
Viewを管理するクラスを作っているのですが
フォントってウィンドウごとに設定されるのでしょうか?



757 名前:デフォルトの名無しさん mailto:sage [2010/01/24(日) 16:03:26 ]
USBキーボードを違うのに変えても結果はおなじ?

758 名前:デフォルトの名無しさん mailto:sage [2010/01/24(日) 16:20:30 ]
キーボードのドライバがなんかやってるんじゃないの?


759 名前:デフォルトの名無しさん mailto:sage [2010/01/24(日) 16:27:54 ]
ドライバじゃいと予想してみた。初心者がつくった怪しげな常駐ソフトとか。

760 名前:デフォルトの名無しさん mailto:sage [2010/01/24(日) 17:26:29 ]
USBキーボードだとそんなことあるのか。
うちでも実験してみるかな?

761 名前:デフォルトの名無しさん mailto:sage [2010/01/24(日) 19:20:01 ]
>>756
CS_OWNDCでウィンドウ毎にDCを持たせればそういう事も出来るが、
そうでない場合は設定とかは無い。
WM_GET/SETFONTも実装側で対応しないと何の効果も無かったはずだし。

762 名前:747 mailto:sage [2010/01/24(日) 20:12:57 ]
>>757
見直したところ、 ノートPCに付けてたのは、PS2 キーボードを
USB PS2変換ケーブル「Arvel AUO1PS」につないで、 USBに指して使ってました。

別にUSBキーボードと、別のPS2キーボード、
WindowsXPマシン、WindowsVistaマシン
が丁度あったのでテストしてみました。

開発環境(Windows Vista)
+USBキーボード = 未発生。
+PS2キーボードA + 変換ケーブル = 発生。
+PS2キーボードB + 変換ケーブル = 発生。

WindowsXP マシン
+USBキーボード = 未発生。
+PS2キーボードA + 変換ケーブル = 発生。
+PS2キーボードB + 変換ケーブル = 発生。

Windows Vista マシン
+USBキーボード = 未発生。
+PS2キーボードA + 変換ケーブル = 発生。
+PS2キーボードB + 変換ケーブル = 発生。

763 名前:747 mailto:sage [2010/01/24(日) 20:15:10 ]
>>754

>>PS/2->USB変換機絡みで そういう事が起きることもあるみたい

自分はソースを見つけられなかったので
確証無く、単に自分の変換ケーブルが壊れているだけかもですが、
自分で勝手に作ってるソフトなので、これを信じ、
対処の処理を追加したいと思います。
的確な、ご指摘有難うございました。

764 名前:デフォルトの名無しさん mailto:sage [2010/01/25(月) 04:01:24 ]
二次元配列の中身をメッセージボックスで並べて表示したいのですがどうすればいいですか?



765 名前:デフォルトの名無しさん mailto:sage [2010/01/25(月) 04:06:02 ]
どうすればって…空白と\n(改行)で繋いで表示するとかしたらいいんじゃないでしょうか

766 名前:デフォルトの名無しさん mailto:sage [2010/01/25(月) 10:39:16 ]
可変幅フォントでカラムがずれるという事じゃないかな。
MessageBoxで揃える方法があるなら俺も知りたい。

767 名前:デフォルトの名無しさん mailto:sage [2010/01/25(月) 12:07:13 ]
>>766
::MessageBox()のAPIフックして固定幅フォントをセットし直せばよいのではなかろうか

768 名前:デフォルトの名無しさん mailto:sage [2010/01/25(月) 12:38:07 ]
MessageBoxをCreateWindowしたいってことじゃないの?

769 名前:デフォルトの名無しさん mailto:sage [2010/01/25(月) 13:52:47 ]
そこまでやるならダイアログ作るんじゃないかw

770 名前:デフォルトの名無しさん mailto:sage [2010/01/25(月) 14:17:11 ]
メッセージボックスを一度に複数表示したいということかもしれない

771 名前:デフォルトの名無しさん mailto:sage [2010/01/25(月) 15:03:15 ]
結局よく分からないな…

772 名前:デフォルトの名無しさん mailto:sage [2010/01/25(月) 16:32:29 ]
CreateStatusWindowで作るステータスバーに右から左に流れるメッセージを
表示するにはどうすればいい?


773 名前:デフォルトの名無しさん mailto:sage [2010/01/25(月) 16:41:35 ]
オーナードロー。

774 名前:デフォルトの名無しさん mailto:sage [2010/01/25(月) 16:41:53 ]
タイマーか何かで一文字ずつずらして表示すればいいんでは
1回目ABCDE
2回目BCDE
3回目CDE
.
.
6回目
7回目    A



775 名前:デフォルトの名無しさん mailto:sage [2010/01/25(月) 16:48:50 ]
>>774
そういう方向で実装するしかないんですか・・・めんどくさいな

776 名前:デフォルトの名無しさん mailto:sage [2010/01/25(月) 17:00:20 ]
ダイアログのクライアント領域にエディット・ボックスを縦に並べ、
最上部のウィンドウを開け閉めしてダイアログの高さを変更しようと
してますが、うまくいきません。

┌[ダイアログ]──────────┐
│┌─────────────┐│
││       Edit Box1       ││
││                   ││
│└─────────────┘│
│┌─────────────┐│
││       Edit Box2       ││
││                   ││
│└─────────────┘│
│┌─────────────┐│
││       Edit Box3       ││
││                   ││
│└─────────────┘│
└───────────────┘

  ShowWindow(1,SW_HIDE);
  MoveWindow(2);
  MoveWindow(3);
  MoveWindow(ダイアログ);

では、ダイアログ・ウィンドウ内が真っ白になり、マウスでサイズ変更すると
1が消えているだけです。

こういう動作は、どんな手順ならよいのでしょ〜か?

777 名前:デフォルトの名無しさん mailto:sage [2010/01/25(月) 17:19:03 ]
ちゃんとRepaintフラグ送ってんですか?

778 名前:デフォルトの名無しさん mailto:sage [2010/01/25(月) 17:21:35 ]
BeginDeferWindowPos

779 名前:デフォルトの名無しさん mailto:sage [2010/01/25(月) 17:38:25 ]
>>775
せいぜい1時間くらいだよ
一回書けば使いまわし出来るだろ

780 名前:デフォルトの名無しさん mailto:sage [2010/01/25(月) 17:40:19 ]
では一時間後に >>779 がうpしてくれるのを楽しみに待つとしよう

781 名前:デフォルトの名無しさん mailto:sage [2010/01/25(月) 18:13:06 ]
……。

782 名前:デフォルトの名無しさん mailto:sage [2010/01/25(月) 18:36:00 ]
wktk

783 名前:デフォルトの名無しさん mailto:sage [2010/01/25(月) 19:47:02 ]
779ではないが。なんか書けたぞ。通るかも解らんが(笑)

static int nNowPos = 0; static DWORD dwLastTime = 0;
DWORD dwWork; char bufWork[256]; char bufHyouziString[256];

strcpy(bufWork,"ABCDEが流れると嬉しいな。 ");

//前回より1秒経過してたら。更新
dwWork = timeGetTime();
if((dwLastTime + 1000) < dwWork){
//最後に更新した時間を更新
dwLastTime = dwWork;
//今の文字が全角なら、次に進めるカウントは+2
if(bufWork[nNowPos] & 0x80 == 1){
nNowPos +=2;
}
else{
nNowPos ++;
}

//最後まできてたらまた最初
nNowPos = nNowPos % strlen(bufWork);
}
//進んだアドレスを先頭にして、文字列コピー
strcpy(bufHyouziString,bufWork[nNowPos]);

//ここまでで、bufHyouziString に来るんではないかね多分・・・


784 名前:デフォルトの名無しさん mailto:sage [2010/01/25(月) 19:49:17 ]
いろいろ間違えてるな。0x80 との比較結果は != 0だった。
まぁどうでもよいか。



785 名前:デフォルトの名無しさん mailto:sage [2010/01/26(火) 01:25:17 ]
とりあえず出来た
もうすぐうp

786 名前:デフォルトの名無しさん mailto:sage [2010/01/26(火) 02:02:44 ]
おれなら
char orig[]="ABCDEが流れると嬉しいな。 ";
なら
char tmpbase[]="\t\tABCDEが流れると嬉しいな。 ______________________";//_は半角スペースでステータスバーが埋まるだけの数
を用意して
定期的にtmpworkからtmpbaseをコピーして適切な位置に\0挿入する

787 名前:デフォルトの名無しさん mailto:sage [2010/01/26(火) 11:42:26 ]
ステータスバーが埋まる文字数。が常に固定であるかの
考慮忘れて発現してた。
GUIで食ってる人はこういう時の定石とかあるのかな。

788 名前:デフォルトの名無しさん mailto:sage [2010/01/26(火) 12:28:58 ]
そういうUIは嫌われるから作らないのが定石。

789 名前:デフォルトの名無しさん mailto:sage [2010/01/26(火) 12:58:19 ]
ステータスバーに文字が流れるのって昔見たなー、と思ったが
あれはブラウザにjavascriptで書いてたんだったか

790 名前:デフォルトの名無しさん mailto:sage [2010/01/26(火) 13:07:01 ]
ずーーーっと見てないと何が書いてあるのかわからないのは時間の無駄


791 名前:デフォルトの名無しさん mailto:sage [2010/01/26(火) 14:44:10 ]
SB_SETPARTS にも対応してくだされ

792 名前:デフォルトの名無しさん mailto:sage [2010/01/26(火) 18:00:16 ]
>>787
こんなクソUI作らないのが定石です

793 名前:デフォルトの名無しさん mailto:sage [2010/01/26(火) 18:15:08 ]
文字流す用のウィンドウ作ってそれをステータスバーの上に乗せればよくね

794 名前:デフォルトの名無しさん mailto:sage [2010/01/26(火) 19:59:26 ]
作りたいもの作ればいいのよ
やる気だけが自分を向上させてくれる



795 名前:デフォルトの名無しさん mailto:sage [2010/01/26(火) 21:33:34 ]
同意

796 名前:デフォルトの名無しさん mailto:sage [2010/01/26(火) 21:34:44 ]


797 名前:デフォルトの名無しさん mailto:sage [2010/01/26(火) 21:45:42 ]
文字列が与えられたときにフォント(等幅・プロポーショナルとも)考慮して
その文字列の画面上での表示幅を教えてくれるような関数ってWin32APIになかったっけ?

798 名前:デフォルトの名無しさん mailto:sage [2010/01/26(火) 21:53:14 ]
GetTextExtentPoint32

799 名前:デフォルトの名無しさん mailto:sage [2010/01/26(火) 22:11:25 ]
おおきに

800 名前:デフォルトの名無しさん mailto:sage [2010/01/26(火) 22:16:25 ]
>>791
SB_GETPARTS でパート数と座標が判るので書きたい場所に DrawText 汁
この方法だと GetTextExtentPoint32 使わなくても良くなると思う

801 名前:デフォルトの名無しさん mailto:sage [2010/01/27(水) 07:03:47 ]
ブラウザと同じように
ツールバーの右に何かの進行状況を
表すゲージを表示させるにはどうしたらいいの?

802 名前:デフォルトの名無しさん mailto:sage [2010/01/27(水) 07:05:38 ]
ブラウザと同じようにやれば良い

803 名前:デフォルトの名無しさん mailto:sage [2010/01/27(水) 08:06:24 ]
ブラウザはどうやってるの?

804 名前:デフォルトの名無しさん mailto:sage [2010/01/27(水) 08:23:41 ]
そのブラウザ使ってググレカス



805 名前:デフォルトの名無しさん mailto:sage [2010/01/27(水) 15:19:58 ]
ブラウザのツールバーの右に進行状況を表すゲージってでたっけ?
ステータスバーの右のこと?

806 名前:デフォルトの名無しさん mailto:sage [2010/01/27(水) 16:56:00 ]
脳内変換しとけよ

807 名前:デフォルトの名無しさん mailto:sage [2010/01/27(水) 16:57:57 ]
はいや

808 名前:デフォルトの名無しさん mailto:sage [2010/01/27(水) 17:07:40 ]
どのブラウザだろう

809 名前:デフォルトの名無しさん mailto:sage [2010/01/27(水) 18:08:19 ]
うちのブラウザです

810 名前:デフォルトの名無しさん mailto:sage [2010/01/27(水) 19:33:04 ]
うちのブラウジャーですごめんなさい

811 名前:デフォルトの名無しさん mailto:sage [2010/01/27(水) 20:52:20 ]
うちの妹のです

812 名前:デフォルトの名無しさん mailto:sage [2010/01/28(木) 00:35:58 ]
そのブラウザい

813 名前:デフォルトの名無しさん mailto:sage [2010/01/28(木) 08:13:12 ]
ぶらぶら

814 名前:デフォルトの名無しさん mailto:sage [2010/01/28(木) 12:23:14 ]
Rich じゃない Edit control で、文字列の特定個所をハイライト表示させる
ことはできるのでしょうか??



815 名前:デフォルトの名無しさん mailto:sage [2010/01/28(木) 13:42:53 ]


816 名前:814 mailto:sage [2010/01/28(木) 14:12:16 ]
EM_POSFROMCHAR で取得(すればよいのか?)した領域の

・バックカラーを変更するのは、どうすればよいでしょうか? (・д・)


817 名前:デフォルトの名無しさん mailto:sage [2010/01/28(木) 14:23:28 ]
当該領域を選択すればよいと思われますが

818 名前:デフォルトの名無しさん mailto:sage [2010/01/28(木) 14:36:29 ]
ということは、領域を選択する前に

(1)SetBkColor(黄色)
(2)領域を選択
(3)SetBkColor(オリジナル色)

とすれば良いのですかね?

819 名前:デフォルトの名無しさん mailto:sage [2010/01/28(木) 14:43:26 ]
黄色って何? どこから出てきた?

820 名前:デフォルトの名無しさん mailto:sage [2010/01/28(木) 14:46:26 ]
つまり、選択した領域のバックグランドカラーを任意に変えたいのです。

821 名前:デフォルトの名無しさん mailto:sage [2010/01/28(木) 14:46:32 ]
ハイライト表示 が いつのまにか指定色背景のブロック塗り にカワットル

822 名前:デフォルトの名無しさん mailto:sage [2010/01/28(木) 14:59:19 ]
素直に Rich Edit おすすめ

823 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 03:51:35 ]
WM_PAINTでBitBltしてビットマップ表示してるとき
そのビットマップの上でボタンとか置いてると
再描画したときにボタン消えるのはどうすればいいの?

多分上書きされて見えなくなってるんだと思うんだけど

824 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 03:57:01 ]
クリッピング



825 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 08:28:47 ]
ボタンを再描画させる。

826 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 10:52:30 ]
WS_CLIPCHILDREN

827 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 18:08:34 ]
32 bit プロセス内で DuplicateHandle(..., process_handle_of_64bit_process, &target_handle, ...) して
64 bit プロセスに target_handle をプロセス間通信で渡したんだけど、そのまま使って問題無い?

16bit → 32bit: WOWHandle32 で変換しなさい。
32bit → 64bit: WOWHandle64 …らしきものは見つけられなかった。

実は HANDLE は下位 32 bit に収まっていて、上位 bit を 0 で埋めればおkとか?


828 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 20:06:04 ]
32bitのハンドルを64bitのプロセスでDuplicateHandleすれば、
64bitプロセスで使えるハンドルが得られる、ような気がする。
あまり具体的に書かれていないので、実際に試さないと分からないが。

829 名前:827 mailto:sage [2010/01/29(金) 21:22:49 ]
> 32bitのハンドルを64bitのプロセスでDuplicateHandleすれば、
> 64bitプロセスで使えるハンドルが得られる、ような気がする。
つまりこうですか?

--code_for_x64.cpp--
DWORD handle_32; // sizeof(DWORD) == 4
HANDLE handle_64; // sizeof(HANDLE) == 8
ReadFile(pipe等, &handle_32, sizeof(DWORD), ...);
DuplicateHandle(static_cast<HANDLE>(handle_32), process_handle_of_32bit_process, &handle_64, GetCurrentProcess(), ...);

> あまり具体的に書かれていないので、実際に試さないと分からないが。
実際のところ、HANDLE は 32bit で表現できない値にはならなそうだけど…。

やはり具体的な記述が欲しいですね。
MSDN に x86 x64 共存 FAQ とかないかな。


830 名前:デフォルトの名無しさん [2010/01/29(金) 21:52:09 ]
ファイルの更新時間を変更したくてSetFileTime関数を使おうと考えています。
ただ、この関数を使うためにはCreateFileでGENERIC_WRITEを使ってHANDLEを
取得する必要があります。

問題は、ReadOnlyのファイルの更新時間を変える場合に、GENERIC_WRITEを使ってハンドルが取得できない点です。
ReadOnlyなファイルの更新時間はcygwinのtouchで変更できるのでなにか方法はあると思うのですがWin32APIを使う方法が分かりません。

どーしたらいいの?

831 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 22:00:21 ]
attribe -r

832 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 22:07:18 ]
readonlyを一旦外せばいいのでは?

833 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 22:19:54 ]
>>829
msdn.microsoft.com/en-us/library/ms724251(VS.85).aspx
> DuplicateHandle can be used to duplicate a handle between
> a 32-bit process and a 64-bit process. The resulting handle
> is appropriately sized to work in the target process.

834 名前:827 mailto:sage [2010/01/29(金) 23:31:42 ]
>>833
おお、ありがとう!
普通に書いてありましたね。



835 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 03:44:16 ]
>>823
BitBltの前にボタンの位置とサイズでExcludeClipRectすると少しだけよくなることなら知ってる

836 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 06:56:21 ]
>>823
ビットマップの上にボタンを置かなければよい。
仕様が間違っている。

837 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 07:02:22 ]
>>836
お前のアホさがとても残念だ

838 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 09:32:30 ]
WS_CLIPCHILDRENがあるじゃない

839 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 10:58:56 ]
GetPrivateProfileString
でバッファサイズが足りないと戻り値がnSize-1になるみたいなんですが
切り捨てられたか、文字数がピッタリ一致してただけなのかを区別することはできますか?

840 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 11:25:45 ]
バッファサイズを1文字余分に取る

841 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 12:04:29 ]
HWND h;
SHELLEXECUTEINFO sei = { 0 };
sei.cbSize = 60;
sei.nShow = SW_SHOW;
sei.fMask = SEE_MASK_NOCLOSEPROCESS;
sei.lpFile = "notepad.exe";
ShellExecuteEx(&sei);
Sleep(3000);
h = FindWindowEx(sei.hProcess, NULL, TEXT("Edit"), NULL);
SendMessage(h, WM_SETTEXT, 0, (LPARAM)("test"));

ShellExecuteExでメモ帳を起動させて3秒後に"test"を
エディットに表示させたいんだけど
FindWindowExがNULLを返す模様。どうしたらいいの?

842 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 12:29:07 ]
>>840
あなたは天才ですね!
ありがとうございました!

843 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 14:18:08 ]
>>841
FindWindowExにメモ帳の「ウィンドウ」ハンドルを渡す。
プロセスハンドル渡しても無意味でんがな。

844 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 19:14:29 ]
FindWindowExってウィンドウ見つけるんじゃないの?
初めからあるものをどうやって見つけるんだ



845 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 19:16:37 ]
>>844
お前バカじゃないの?MSDN読んでるか?



HWND FindWindowEx(
HWND hwndParent, // 親ウィンドウのハンドル
HWND hwndChildAfter, // 子ウィンドウのハンドル
LPCTSTR lpszClass, // クラス名
LPCTSTR lpszWindow // ウィンドウ名
);

パラメータ

hwndParent
検索する子ウィンドウの親ウィンドウのハンドルを指定します。
NULL を指定すると、デスクトップウィンドウが親ウインドウとして使われ、デスクトップの子ウィンドウが探されます。

846 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 19:20:09 ]
プロセスハンドルが分かるのだから

プロセスを作成する

ウィンドウを列挙する

ウィンドウを作成したプロセスIDを取得する

プロセスハンドルとプロセスIDの紐付け

( ^ν^ )

847 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 19:25:52 ]
顔文字キモイ。

848 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 20:02:46 ]
νは口なのか鼻なのかはっきりしろ

849 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 20:14:52 ]
EnumChildWindows の戻り値の説明って間違ってないですか?

850 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 21:47:30 ]
Win7だと、EnumWindowsと同じような返し方をして来るな。
OSのバージョンによっては妙な値が返してくるやつもあるのか?

851 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 23:20:52 ]
Vistaでした

852 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 23:42:02 ]
メインウィンドウのダイアログから CreateDialogParam() で、検索 popup ダイアログを
開いたのですが、キー・バインドなどが働きません。MSDNを見ると、

”To support keyboard navigation and other dialog box functionality,
the message loop for THE DIALOG BOX MUST CALL THE IsDialogMessage() FUNCTION.”

と、あります。キー・バインドが利かないのも、これが原因と思われますが、
メインウィンドウのメッセージ・ループ以外で IsDialogMessage() を実装しろ
という意味なのでしょうか??? ここがよく分かりません。

IsDialogMessage() をどこで、どうやって実装すればよいのか教えてください。

853 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 23:56:02 ]
FindWindowEx()で、検索対象のウィンドウに、複数のEDITが有り、
検索クラス名がEDITだった場合、一番最初のEDITのハンドルしか取れないけど、
2つめ3つめのEDITのハンドルを取得するにはどうしたらいいのでしょう?

854 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 23:57:46 ]
hwndChildAfter
子ウィンドウのハンドルを指定します。Z オーダーでこのウィンドウの次にくる子ウィンドウから検索が開始されます。



855 名前:デフォルトの名無しさん mailto:sage [2010/01/31(日) 00:05:09 ]
LineTo君に続いて
FindWindowEx君も死ねよ
二度と来るな

856 名前:デフォルトの名無しさん mailto:sage [2010/01/31(日) 00:11:18 ]
落ちつけよ。

857 名前:デフォルトの名無しさん mailto:sage [2010/01/31(日) 00:13:41 ]
おっかないインターネッツですね

858 名前:デフォルトの名無しさん mailto:sage [2010/01/31(日) 05:13:07 ]
>>852
そこは、書いてあるとおりダイアログを処理するメッセージループで。
普通メッセージループなんて1つしかないだろうから、そこでいい。






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

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

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