Win32API質問箱 Build47
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2006/11/13(月) 08:56:12やさしいお兄さんやお姉さんたちが答えてくれるかも。
過去スレ、関連リンクは>>2-5くらい。
■注意
・質問する前にMSDNライブラリやPlatformSDK、Google等で検索しましょう。
・日本語版MSDN Online Libraryは不完全です。英語版(http://msdn.microsoft.com/library/)の利用推奨。
・APIフックなど高度な事をしたい場合はできるだけAdvenced Windowsを読みましょう。
・言語特有の問題やIDE、MFCやVCLなどの質問はそれぞれの言語や開発環境スレで
0669デフォルトの名無しさん
2006/12/05(火) 05:42:42ExpandEnvironmentStringsの話ならおk?
0670デフォルトの名無しさん
2006/12/05(火) 05:47:34Vistaに限らずNT系の新APIに見えるものは実はntdllの非公開APIに公開の皮を
かぶせただけ、ってパターンも結構あるな。
Win9x切り捨てたので遠慮する必要がなくなったんだろう
0671デフォルトの名無しさん
2006/12/05(火) 09:51:21ttp://msdn.microsoft.com/library/en-us/winui/winui/windowsuserinterface/windowing/dialogboxes/aboutdialogboxes.asp
>Dialog boxes usually belong to a predefined, exclusive window class.
>The system uses this window class and its corresponding window procedure for both modal and modeless dialog boxes.
>When the function is called, it creates the window for the dialog box, as well as the windows for the controls in the dialog box,
>then sends selected messages to the dialog box procedure.
0672デフォルトの名無しさん
2006/12/05(火) 10:15:18VisualC++ 2005 EE を使い始めたのですが、
VisualC++ 6.0と違ってリソースエディタがありません。
なので、無理矢理コントロールをウインドウに貼り付けて処理したいと思うのですが、
どのように貼り付ければ良いのか、参考となるサイトなど教えていただけないでしょか?
0673デフォルトの名無しさん
2006/12/05(火) 10:33:34VC6のリソースエディタなりサードパーティ製リソースエディタ使えば?BCCFormとか。
0674デフォルトの名無しさん
2006/12/05(火) 10:41:56LRESULT API DefDlgProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
BOOL result = FALSE;
hwnd->DWL_MSGRESULT = 0;
if(hwnd->DWL_DLGPROC
&& (result = CallDlgProc(hwnd, message, wParam, lParam))
{
//メッセージに応じてDWL_MSGRESULTかresultを返す
return DWL_MDGRESULT or result;
}
else
{
switch(message)
{
/*さまざまなメッセージハンドラ*/
case WM_XXXX:
return 何とか
default:
return DefWindowProc(hwnd, message, wParam, lParam);
}
}
}
DlgProcはダイアログのWindowProcのフロントエンドなので、
DlgProcでデフォルト処理後に独自の処理を加えるのはメンド臭いです。
0675672
2006/12/05(火) 11:14:36迅速なレス有難う御座います。
方法すら見当もつかなかった自分としては、お二方のご指南本当に有難いです。
やはりソースコードで全て処理するとなるとやや時間もかかり、
面倒かもしれませんが、頑張ってみようと思います。
0676デフォルトの名無しさん
2006/12/05(火) 11:28:37DragQueryFile関数を使いパスつきのファイル名が取得できますが
パスなしのファイル名が取得できる関数はあるのでしょうか?
0677デフォルトの名無しさん
2006/12/05(火) 11:30:530678デフォルトの名無しさん
2006/12/05(火) 11:37:490680デフォルトの名無しさん
2006/12/05(火) 13:35:57その方法は面倒だが、それだって探せばいくらでも見つかる。
親のWM_CREATEで子をCreateWindow(Ex)すればいいだけ。
0681デフォルトの名無しさん
2006/12/06(水) 13:52:31接続されたイベントを取得したい場合どうすればいいでしょうか?
ipodを繋いだらitunesが起動するみたいなことがやりたいです。
msdnとかで調べたけどわかりませんでした。
お願いします。
0682デフォルトの名無しさん
2006/12/06(水) 14:04:190683デフォルトの名無しさん
2006/12/06(水) 15:19:42日本語入力をしたいのですが
IMEに未確定文字を表示させないようにして
独自で描画することはできますか?
0684683
2006/12/06(水) 15:49:390685デフォルトの名無しさん
2006/12/06(水) 17:10:55SHCNE_MEDIAINSERTEDだな。
0686デフォルトの名無しさん
2006/12/06(水) 19:21:50ValidateRectで描画を更新しているのですが
VC++6.0から実行すると、ツールバーが消えてしまいますが
exeから動かすとツールバーが表示されています。
これはどうしようも無いんでしょうか。
BeginPaint〜EndPaintだとVC++6.0の実行でも問題なし
0687デフォルトの名無しさん
2006/12/06(水) 21:16:06絶対なんかやってることがおかしい。
あと「ValidateRectで描画を更新」って何だよ?
0688デフォルトの名無しさん
2006/12/06(水) 21:33:280689デフォルトの名無しさん
2006/12/06(水) 21:35:210690デフォルトの名無しさん
2006/12/06(水) 21:37:140691203
2006/12/06(水) 21:48:28while( 1 )
{
if( ::PeekMessage( &msg, NULL, 0U, 0U, PM_NOREMOVE ) )
{
if( ::GetMessage( &msg, NULL, 0, 0 ) <= 0 )
return msg.wParam;
::TranslateMessage(&msg);
::DispatchMessage(&msg);
}
}
プロシージャでは
GetClientRect( g_hWnd, &wrc );
GetClientRect( g_hTool, &trc );
wrc.top = trc.bottom;
を
case WM_TIMER:
InvalidateRect( g_hWnd, &wrc, TRUE );
UpdateWindow( g_hWnd );
break;
case WM_PAINT:
ValidateRect( g_hWnd, &wrc );
break;
といった感じで処理しています。
たまにツールバーが出現したりして謎です。
ValidateRectの描画の更新は、すいません表現を間違えました。
0692デフォルトの名無しさん
2006/12/06(水) 21:50:27やり方教えてください。
0693691
2006/12/06(水) 21:50:56×203
○686
0694デフォルトの名無しさん
2006/12/06(水) 21:51:250695692
2006/12/06(水) 21:51:310696デフォルトの名無しさん
2006/12/06(水) 21:52:500697デフォルトの名無しさん
2006/12/06(水) 21:53:280698696
2006/12/06(水) 21:54:44他ののWindowバージョンだとどうでしょうか。
0699デフォルトの名無しさん
2006/12/06(水) 21:57:100700デフォルトの名無しさん
2006/12/06(水) 21:59:53http://www.google.com/search?num=100&hl=ja&ie=EUC-JP&q=%A5%EA%A5%B9%A5%C8%A5%D3%A5%E5%A1%BC%A4%CE%B9%D4%A4%CE%B9%E2%A4%B5
0701デフォルトの名無しさん
2006/12/06(水) 22:00:33ゲーム作ってる時とか
0702デフォルトの名無しさん
2006/12/06(水) 22:02:11WM_PAINT内の処理がありえないな
せっかく描画しようとしてるところを、描画もせずに「もう描画しなくていいよ」なんていや消えるのは当たり前だろ
ツールバーも親ウィンドウ上にあるものだぞ?
0703デフォルトの名無しさん
2006/12/06(水) 22:05:48人に「ちょっとこっち来て!」って呼んどいて
来たら「こっち来るんじゃねーよ!」って言うようなもんだな。
0704686
2006/12/06(水) 22:06:39NULLなりGetClientで得た領域をそのまま渡すと
ツールバーが塗り潰されてしまいます。
ツールバーとValidateRectは合わないのだろうか
0705デフォルトの名無しさん
2006/12/06(水) 22:07:49>>695
0706デフォルトの名無しさん
2006/12/06(水) 22:09:42つーかあんた、最初の自分の書き込みで最後に結論出してるだろうが
0707686
2006/12/06(水) 22:12:12BeginPaint〜EndPaint を使うと
DirectXの
Clear, BeginScene, EndScene, Present使うと
チラチラチラチラするもんで
出来れば ValidateRect を使いたいなと
0708704
2006/12/06(水) 22:12:300709デフォルトの名無しさん
2006/12/06(水) 22:44:13>>686=>>704=>>708なの?
0710708=706
2006/12/06(水) 22:46:580712デフォルトの名無しさん
2006/12/06(水) 22:56:44文字化けするかしないかってだけなら
そ ん な こ た ぁ 自 分 で 実 行 し て み り ゃ わ か る だ ろ
0713デフォルトの名無しさん
2006/12/06(水) 22:59:31>>696みたいな質問は出てくるわけがないと思うんだが。
0714デフォルトの名無しさん
2006/12/06(水) 23:00:38まあソフトで使う分には、対象言語圏が日本なら心配要らないだろう
0715デフォルトの名無しさん
2006/12/06(水) 23:03:070716デフォルトの名無しさん
2006/12/06(水) 23:05:44丸数字の文字化けを考えないといけないのは違うOSで表示させる場合
(WEBアプリケーションとか)
0717デフォルトの名無しさん
2006/12/06(水) 23:06:26この場合も化けはしないけどな
0718696
2006/12/06(水) 23:21:48参考になりました。
0719デフォルトの名無しさん
2006/12/06(水) 23:34:04勿論丸付き数字どころの騒ぎではない。
0720デフォルトの名無しさん
2006/12/07(木) 00:09:420721デフォルトの名無しさん
2006/12/07(木) 00:15:000722デフォルトの名無しさん
2006/12/07(木) 00:26:590723720
2006/12/07(木) 00:41:14に表示させない(つかわない)方法はないでしょうか?
0724デフォルトの名無しさん
2006/12/07(木) 01:09:400725デフォルトの名無しさん
2006/12/07(木) 01:20:220726デフォルトの名無しさん
2006/12/07(木) 02:07:180727デフォルトの名無しさん
2006/12/07(木) 05:58:30その他のアイコンエディタをほとんど使ってないから、
他と比べてどうかは知らんが満足してる。
0728デフォルトの名無しさん
2006/12/07(木) 07:05:56不可視の親ウィンドウ
0729デフォルトの名無しさん
2006/12/07(木) 10:15:11>ツールバーが塗り潰されてしまいます。
DirectXが塗りつぶしているのなら、DirectXの使う領域を指定する。
単一色で塗りつぶされているのなら、ウィンドウスタイルにWS_CLIPCHILDRENをつける。
または、WNDCLASS(EX)のhbrBackground=NULLでもいいと思う。
それより、DirectX描画用の子ウィンドウをつくり、
WM_SIZEでクライアント領域のツールバーの下に移動する方が簡単。
0730デフォルトの名無しさん
2006/12/07(木) 10:27:26別にウィンドウが一旦隠れたわけでもないのに
メッセージループ内からWM_PAINT発生させてんのか理解できんのだが
そんなことすりゃチラつくのは当たり前だろうと
WM_PAINTの存在意味を解って無いだろ
0731デフォルトの名無しさん
2006/12/07(木) 11:39:00BeginPaintせずにValidateRectしてるんだからちらつきましぇん。
0732686
2006/12/07(木) 11:59:59有難うございます
WS_CLIPCHILDRENで解決しました。
領域を指定しての最初のValidateRect
は無効領域を残したままだったので
いつまでもWM_PAINTが残っている状態でした。
かといって全領域を指定するとWM_PAINTは消えますが
ツールバーごと塗り潰すといった事態に
DirectXに関してはPresentに
ツールバー分を引いたクライアント領域に
転送(2番目引数)するようにしています。
>DirectX描画用の子ウィンドウをつくり、
>WM_SIZEでクライアント領域のツールバーの下に移動する方が簡単。
その内使わせて頂きます。
>>730
アニメーションやらシミュレーションやらを入れたいと思ったので
WM_PAINTを発生させまくる状況を作ってみました。
0733デフォルトの名無しさん
2006/12/07(木) 16:31:03@icon + ドットエディタ
0734デフォルトの名無しさん
2006/12/07(木) 20:26:05アニメーションやらシミュレーションやらを入れるのにWM_PAINT連打せねばならぬのか
0735デフォルトの名無しさん
2006/12/07(木) 23:34:51他アプリケーションのDataGridに表示されている値を取得する方法はありますでしょうか?
LABELやConboBoxの値はWin32APIを使って取得する方法は分かるのですが
DataGrid系に表示されている値の取得方法がどうしても分かりません・・・('A`)
0736デフォルトの名無しさん
2006/12/08(金) 01:29:31CD-Rや、DVD-Rなどの光メディアに、プログラムから書き込むことって可能ですか?
API名とか、ヒント下さい。
0737デフォルトの名無しさん
2006/12/08(金) 01:56:42IMAPI
0738デフォルトの名無しさん
2006/12/08(金) 01:59:27SPTI
0739デフォルトの名無しさん
2006/12/08(金) 02:00:54どうしても0が返されます。
DirectXアプリ以外のエリアで情報を取得する分には問題ないのですが。
特殊なやり方をしないととれないのでしょうか。
0740デフォルトの名無しさん
2006/12/08(金) 02:07:02なるほど、こんなのが有ったんですね。
ありがとうございます。助かりました。
0741デフォルトの名無しさん
2006/12/08(金) 03:15:590742デフォルトの名無しさん
2006/12/08(金) 04:25:420743デフォルトの名無しさん
2006/12/08(金) 05:08:280744kk
2006/12/08(金) 08:51:48ダイアログのエディットボックスに入力されてる文字列はどうすれば
PTSTRなどに入れられるのでしょうか
0745デフォルトの名無しさん
2006/12/08(金) 08:57:560746kk
2006/12/08(金) 09:17:280747デフォルトの名無しさん
2006/12/08(金) 10:02:430748245
2006/12/08(金) 11:21:04rectangleで書きこんで一部消去とか(真中だけ抜く)は、
抜きたい部分をXORで合成するしかないでしょうか?
指定したrectの分だけ消去するとかできないもんでしょうか。
CreateCompatibleDCで作った場所に書きこんで、
ほかのDCに書きこんだら、CreateCompatibleDCにrectangleしたところ意外は、
透明でほかのDCに書きこまれるので、rectangleの真中だけ書きこむ前の透明にしたいです。
0749デフォルトの名無しさん
2006/12/08(金) 11:23:28日本語でおk
rectangleしたところって意味不明すぎるw
0750デフォルトの名無しさん
2006/12/08(金) 11:25:40GetDlgItemTextは親のウィンドウハンドルと子のIDがあれば十分。
GetWindowTextLengthとGetWindowTextのコンビを行いたければ、GetDlgItem使え。
0751748
2006/12/08(金) 12:33:40HDC hDC = GetDC(hWnd)
HCD hMemoryDC = CreateCompatibleDC(hDC);
HBITMAP hBitmap = CreateComatibleBitmap(hDC, 640, 480);
SelectObject(hMemoryDC, hBitmap);
DeleteObject(hBitmap);
SelectObject(hMemoryDC, GetStockObject(GRAY_BRUSH));
Rectangle(hMemoryDC, 0, 0, 640, 480);
ClearRect(hMemoryDC, 160, 120, 480, 360);// Rectangleで書いたところの一部を消したい
----------
WndProcでWM_PAINTのところ
case WM_PAINT:
hDC = BeginPaint(hWnd, &ps);
BitBlt(hDC, 0, 0, 640, 480, hMemoryDC, 0, 0, SRCCOPY);
EndPaint(hWnd, &ps)
↑みたいな処理で、ClearRectに該当する処理を探しています
0752デフォルトの名無しさん
2006/12/08(金) 12:47:57>SelectObject(hMemoryDC, hBitmap);
>DeleteObject(hBitmap);
こういうところ見ると仕組みを理解してないのがよくわかる。
ここを一通り呼んで勉強してくれ。
ttp://msdn.microsoft.com/library/en-us/dnanchor/html/gdi.asp
0753748
2006/12/08(金) 13:02:33ttp://www13.plala.or.jp/kymats/study/MULTIMEDIA/bmp_multibuf.html
ここを参考にしました
0754748
2006/12/08(金) 13:11:20使っている間は、DeleteObjectしたらあかんという意味ですね。
プログラミングWindowsを読むと、WM_DESTROYでDeleteObject(hBitmap)みたくなっているのが多いので。
0755kk
2006/12/08(金) 13:27:56ありがとうございます。
>>747
そう思ったのは、リソーススクリプトを使用したので
HWND = CreateWindow(--------,---,-,-,.....);
と書かなかったからです。
>>750
GetDlgItemText()で、ちゃんと入力された文字列を取り入れることができました。
ありがとうございます。
0756デフォルトの名無しさん
2006/12/08(金) 15:17:28何そのダメすぎるサイト
そんなとこ参考にしてたらキミも終わっちまうぜ
0757748
2006/12/08(金) 15:39:200758デフォルトの名無しさん
2006/12/08(金) 16:50:470759デフォルトの名無しさん
2006/12/08(金) 16:54:01JavaでいうところのSystem.currentTimeMillisはありますか?
GetLocalTimeでSYSTEMTIMEとって自分で掛け算ですか?
0760デフォルトの名無しさん
2006/12/08(金) 17:00:460761デフォルトの名無しさん
2006/12/08(金) 18:57:27どんな方法がよさげ?
コマンドラインパラメータ以外で。
0762デフォルトの名無しさん
2006/12/08(金) 19:10:59コマンドライン以外だと渡して起動というよりも起動後通信だな。
pipe、共有メモリ、ネットワーク等。
0763デフォルトの名無しさん
2006/12/08(金) 19:18:10量は多くても1KBくらい。
確実に渡せる方法がいいです。
0764デフォルトの名無しさん
2006/12/08(金) 19:39:200765デフォルトの名無しさん
2006/12/08(金) 19:46:54そうしてみるわ
トンクス
0766デフォルトの名無しさん
2006/12/08(金) 20:30:14Windowsのエクスプローラの、ファイルやフォルダが表示される部分を
自分で作ったウィンドウに埋め込むにはどうすれば良いでしょうか。
0767デフォルトの名無しさん
2006/12/08(金) 20:37:23IEコンポーネントを使っている例だが参考になる。
アドレスバーに入力すればわかるが、フォルダだって表示できる。
0768デフォルトの名無しさん
2006/12/08(金) 20:43:30■ このスレッドは過去ログ倉庫に格納されています