突然質問で失礼します。
CDialogの継承クラスにおいて
ワーカスレッドからメインスレッドに15msecおきに
SendNotifyでユーザ定義メッセージを送って
関数を実行させようとしています
しかし、どうしてもランダムに
200msec前後の遅延が発生します
どうにか15msecぐらい間隔で目的の関数を
呼び出すことはできないでしょうか?
どうか、アドバイスをよろしくお願いします
ウィンドウメッセージを使ってその精度が維持できると思っているのが間違い。
timeSetEvent() でもつかったら?
初心者の質問に答えていただきあいがとうございました。
モードレスで作成したプロパティシート(ページではない)を削除する
方法ってどうしたらいいのでしょう?
モードレスにしたプロパティシートのハンドルを引数にして
DestroyWindowでおこなうとWindows APIバイブル2のサンプルCD
(CHAPTER4のGETTABCT.MAK)ではなっているのですが、VC.NET2002
でおこなうと、終了処理の後にハングしてしまいます。
宜しくお願いします。
324 :
デフォルトの名無しさん:04/10/05 09:22:47
ReadDirectoryChangesW を使って,
全ドライブのファイル操作の監視をしたい.
CreateFile で監視するディレクトリィのハンドルをとって,
わたしてやるんだが,例えば,cドライブを見たければ,
"c:\\" とか指定すればいいんだが,
全ドライブを指定することはできないだろうか?
GetLogicalDriveStrings で生きてるドライブ名をとって,
個別にそれぞれ CreateFile で開いて,
ReadDirectoryChangesW で監視するってのは
あほらしくてやってられない.
一発でできないだろうか?
325 :
デフォルトの名無しさん:04/10/05 13:12:49
休止状態から指定時刻に復帰するプログラムを作りたいのですが、どのAPIを使用すれば良いのでしょうか?
アドバイスお願いします。
>>324 盲目的に全ドライブ監視は危険。メディアの入れ替えで恐ろしいことが起こる。
やるなら個別でやるべき。
327 :
デフォルトの名無しさん:04/10/05 15:07:05
他のアプリが最大化しているか、などの状態を取得するAPIありますか。
>>324 漏れの6連装CDドライブをガチャガチャ言わすのはオマエか!
>>327 ウィンドウを列挙して、ウィンドウが最大化しているかどうか調べれば良いかと
ありがとうございます。
列挙と言うとEnumWindowとかですか?
具体的なキーワードを頂けるとありがたいです。
331 :
デフォルトの名無しさん:04/10/05 16:11:16
半角を全角にするAPIはありませんか?
332 :
デフォルトの名無しさん:04/10/05 16:25:54
void replace(char* text,char* key,char* rep)
{
char *p,buf[256];
p = strstr(text,key);
while(p!=NULL){
*p='\0';
strcpy(buf,p+strlen(key));
strcat(text,rep);
strcat(text,buf);
p = strstr(p+strlen(rep),key);
}
}
[使い方]
replace(buf,"ア","ア");
replace(buf,"イ","イ");
replace(buf,"ウ","ウ");
replace(buf,"エ","エ");
replace(buf,"オ","オ");
replace(buf,"カ","カ");
replace(buf,"キ","キ");
replace(buf,"ク","ク");
replace(buf,"ケ","ケ");
replace(buf,"コ","コ");
replace(buf,"サ","サ");
>>327 IsZoomed
IsIconic
GetWindowPlacement
>>321 マルチメディアタイマを使ってみたのですが
10000回に1度くらいの割合で
イベント10回くらいをスルーしちゃって
コールバック関数内で呼び出してある関数が
実行されてないようです
どうしてでしょう?
コールバック関数内の処理を軽くしても
改善されませんでした
原因に心当たりのある方
是非アドバイスをよろしくお願いします
実行されていないようです
俺を最強のプログラマにするAPIはありませんか?
TerminateProcess(
>>338, 0)
>>337 必ずコールバックされると思っているのが間違い。
コールバック関数の中で前回呼ばれた時のシステム時間との時間差を計算して、
呼ばれなかった分の穴埋めを行う処理をしないといけない。
341 :
デフォルトの名無しさん:04/10/05 21:33:20
ウィンドウの枠の上下左右の一箇所だけ枠なしとかにすることはできる
でしょうか?
SetRegion とか LayeredWindow とかを使うとできるよ。
>>341 WM_NCHITTEST と WM_NCCALCRECT と WM_NCPAINT と WM_NCACTIVE あたりを
自前で実装すれば可能。
>>337 1.コールバック関数から SendNotifyMessage を呼んでいる時、メインスレッドで
直前のメッセージ処理が終わるまで待っている状態。
メッセージを使わないようにする。
表示の更新だけなら InvalidateRect のみとか、
直接 dc 取得してワーカースレッドから描いてしまうとか。
2.GDI に対して描画要求を過剰に繰り返し行うと起こる現象。
描画部分を小さくしたり、DrawDibDraw とか DirectDraw を使えば良くなるかも。
>>340 コールバック関数内にグローバル変数の
イベント発生カウンタを持っているのですが
そのカウンタとコールバック関数内の
一部の関数が走った回数が一致しません
イベントカウンタの方が大きい値になります
従って、コールバック関数は呼ばれているのですが
その中の関数が走ってないように見えます
どうしてでしょうか?
>>345 ファイルIOはそれなりに高速なので、ログでも書き出して動作を検証すべき。
あとコールバック処理中に再びコールバックが呼ばれるケースとかも考慮するべき。
349 :
デフォルトの名無しさん:04/10/06 10:04:35
VS.NETで作成できるWindowsインストーラーでサイレントインストール時に
インストール先をiniファイルなどやオプションなどに記述して
変更する方法はないものでしょうか。
宜しくお願いいたします。
微妙にすれ違い
IMEが変換を確定したタイミングはどうやって知る事ができますか
>>351 WM_IME_COMPOSITION とかでどう?
354 :
デフォルトの名無しさん:04/10/07 02:52:23
「未解決の外部シンボル
"int __cdecl InitInstance(struct HINSTANCE__ *,int)"
(?InitInstance@@YAHPAUHINSTANCE__@@H@Z)
が関数 _WinMain@16 で参照されました。」
というエラーが出るのですが、何をリンクすればこのエラーがなくなるのでしょうか?
#includeしているのは
#include <windows.h>
#include <windowsx.h>
#include <winsock2.h>
#include <stdlib.h>
#include "resource.h"
なのですが、、、このエラーだけはどうすれば回避できるのか
わかる方がいましたら教えてください。
356 :
デフォルトの名無しさん:04/10/07 09:30:19
Win32 API の CreateThread を使うときに,
実際スレッドで動かす函数として
ある特定の型の函数への指示子をわたしてやるんだが,
この函数って大局じゃないとうまく動かない.
類の要員函数ではいけないの?
氏ね
>>354 恐らくなにかのサンプルをコンパイルしようとしてるかどっかからのコピペ
コードなんだと思うけどInitInstanceは普通自分で定義するんじゃないか?
ソース全部見ないと正確にはわかりません。
>>356 クラスメンバなら大丈夫。そうじゃないときは暗黙のうちにthisがわたされる
から無理。4番目のパラメータにthisわたしてクラスメンバからメンバ関数を
呼び出せばいいと思う。
359 :
デフォルトの名無しさん:04/10/07 09:51:58
>>354 InitInstance というと AppWizard が自動生成するスケルトンに入っている関数か?
CreateThread に渡そうとして引数を変えたのにプロトタイプを直し忘れたとか、そーゆーオチか?
354です。MAPI.Libをリンクするとそのエラーはなくなりましたが、
C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\lib\MAPI.Lib
: fatal error LNK1136: ファイルが無効であるか、 または壊れています。
というエラーが出て結局ビルドできません。
>>360 単に、別のリンクエラーが出て、そこで止まっただけ
362 :
デフォルトの名無しさん:04/10/07 10:32:08
>>360 関係なさそうだな
そんなとこに InitInstance なんてねえもん
363 :
デフォルトの名無しさん:04/10/07 15:35:15
該当スレが分からなかったので、ここで質問させてください。
すでに起動しているWindwosMediaPlayerを
外部からメッセージを送って操作する方法はありますか?
具体的には、あるタイミングで、WMPですでに選択されている
ファイルの再生をスタートさせるだけです。
よろしくお願いします。
364 :
デフォルトの名無しさん:04/10/07 15:42:45
WindowsサービスからユーザがWindowsにログオン/ログオフするのを検知したいんだけど、
どうしたらいいんでしょうか?
とりあえずイベントログを定期的にチェックして検知とか考えました。
そんなめんどくさいことしないでもイベント通知してもらえたりするんでしょうか?
GINA使わないでやりたいです。
よろしくお願いします。
365 :
デフォルトの名無しさん:04/10/07 16:47:53
函数と書きたいだけの厨房発見
厨房と書きたいだけの(rya
(ryaと書きたいだけの
と書きたいだけの
>>354 InitInstance は Windows API ではないので、中身は自分で書きましょう。
ウィンドウクラスの登録用に、習慣的にその名前を使っていただけ。
>>363 WM_COMMAND送りつければいいんじゃ?
>>363 MicrosoftR Windows Media? Player 7 SDK
Windows Media Player コントロール Version 6.4
ただし VBアプリから起動させる場合
>>354 int WNAPI WinMain(〜)
が書いてある行より手前に
int InitInstance(HINSTANCE, int);
と書いてみろ。
371 :
デフォルトの名無しさん:04/10/07 23:01:34
WNAPI
GUIDを文字列にしてくれるAPIはありませんか?
自分で作ってもいいのですが、標準で用意されているような気がしてなりません。
StringFromGUID2
猫でもわかるの122章のプログラムを実行したのですが、次のような問題が発生します。
・DLLのロードに失敗する。
・hMyLibをstaticにしないと強制終了する。
・WM_PAINTメッセージが複数回ディスパッチされる。
元のソースコードは、構文的に間違っていないと思います。
対処法が全く分からず、困っています。どうすれば良いのでしょうか?
OSはWinXPHome、コンパイラはBCCを使用しています。
リストビューについて質問です。
カラムの挿入でiColに好きな値を設定できないようなのです。
iOrderで順番も入れ替わるし、iColとサブアイテム番号の対応は自分で管理しないといけないのでしょうか?
>>374 もうちょっと詳細に教えてくれ。
>・DLLのロードに失敗する。
LoadLibraryの後でGetLastErrorを呼んでエラーコードを調べる。
>・hMyLibをstaticにしないと強制終了する。
できればどの行で強制終了するのかデバッガ(BCCじゃ無理か?)で調べる。
>・WM_PAINTメッセージが複数回ディスパッチされる。
これは多分仕様。(違うかも)
>>376 エラーコードを調べようとして、次のようにソースコードを書き換えたのですが、強制終了します。
case WM_PAINT:
hMyLib = LoadLibrary( "dll04.DLL");
wsprintf(str,"%d",GetLastError());
MessageBox(hWnd,str,"",MB_OK);
書き方に問題があれば、指摘して下さい。(^_^;)
MessageBox(NULL,"","",MB_OK);をWM_PAINTメッセージの処理部分の所々に挿入しながら検証していたのですが、
コンパイルを繰り返す内に、メッセージボックスが表示されなくなり、強制終了するようになりました。
最初は、画面の右下の方に表示されていました。中央に表示されないのが変だと思っていたのですが...。
また、メッセージボックスが表示される時に鳴る警告音が立て続けに20回くらい鳴ります。
そのため、WM_PAINTメッセージが複数回ディスパッチされていると判断しました。
>>378 実行ファイルと同じ場所に置いてあるので、問題ないと思うのですが...。
>>379 WM_PAINTハンドラ→MessageBox→モーダルループ→無効領域がクリアされてない→WM_PAINT発生→WM_PAINTハンドラ→・・・
で無限ループに陥ってるかも。
それはWM_PAINT処理にMessageBoxなんか入れたことが原因だろ。
>>380 >>381 >>382 ありがとうございます。Turbo Debuggerをインストールしているのですが、使い方が分からないので困っていました。(^_^;)
紹介して頂いたデバッガを利用してみたいと思います。
>>383 勘違いされてるような気がしないでもないので、
補足しておくと、
OuputDebugStringは文字列をデバッグ出力に送るAPI
リンク先のは、OuputDebugStringの出力を表示するツール
ちゃんとしたデバッガを使ってるなら、
それの使い方を覚えた方がいいと思われ
>>384 いろいろ教えて頂きありがとうございます。Windowsプログラミングで簡単に文字列を出力する方法を知らなかったので、
仕方なくMessageBox関数を使用していました。OuputDebugString関数を使えば良いのですね。
>>379 無限ループになるのは当然ですね。つまらないミスでした。反省しています。(^_^;)
>>376 GetLastError関数の戻り値は0でした。やはり、DLLのロードに失敗しているようです。
>
>>379 > 無限ループになるのは当然ですね。つまらないミスでした。反省しています。(^_^;)
すみません、リンク先を間違えました。
>>379ではなく
>>380です。(^_^;)
MessageBoxをループ内に配置するとエライ事になる。
ループ離脱条件を戻り値IDOK以外にしていたとする。
DestoryWindow()が親に送られたら地獄。
応答不能・シャットダウン不能となる。
DestoryWindow()APIがダイアログをIDOKで閉じるからである。
戻り値でループ離脱をする場合、十分注意しよう。
389 :
デフォルトの名無しさん:04/10/08 15:57:57
質問です。
階層構造が複雑で、子孫ウインドウが多数存在するトップレベルウィンドウがあります。
ウィンドウを非アクティブからアクティブにしたときに、そのウィンドウが
非アクティブになる前に持っていたキーボードフォーカスの位置を元に戻したいのですが、
WM_ACTIVATE(WA_INACTIVE) が送られてくるタイミングで GetFocus() してフォーカスを保存しようとしても、
ウィンドウを最小化したときなどはすでにフォーカスが失われているらしく、うまくいきません。
現在はすべてのウィンドウプロシージャで子ウィンドウのフォーカスの移動を監視し、それを
親ウィンドウに次々と通知することで実現しているのですが、あまりスマートとはいえません。
もし、もっとウマーな方法があればご教示ください。
>>388 すみません、勘違いしていました。発言を撤回します。(^_^;)
>>384 OuputDebugString関数を使用してみたのですが、
"未定義の関数 'OuputDebugString' を呼び出した"
というエラーメッセージが表示されます。windows.hはインクルードしてあるのですが、
別のヘッダファイルをインクルードする必要があるのでしょうか?
OutputDebugStringだろ。
漏れがタイポしたもより・・・欝だ詩嚢
>>390 つーかこういう時ってまずタイポ疑えよ。
エラー起こるたびに訊いてるようじゃ進歩ねーぞ。
>>392 >>384のレスの関数名をそのまま使用していたので、スペルのミスに気が付きませんでした。
指摘して頂いてありがとうございます。(^_^;)
っていうか、BCCだとTestFuncではなく_TestFuncになるからじゃね?
[はい][いいえ]の2つのボタンがあって、
右上の[×](クローズボタン)も有効なメッセージボックスって、
「MessageBox()系のAPIでは作れない」ってことでよろしいでしょうか…?
DebugTracerというツールを使ってOutputDebugStringの文字列を表示することができるようにました。
しかし、エラーコードは6(無効なハンドル)でした。環境に問題があるのでしょうか?
>>396 SDKをアップデートする必要があるのでしょうか?WinXPHomeSP1で作業しているのですが、
SP2に移行した方が良いのでしょうか?
>>399 hMyLibがNULLかどうかも判断せずに、GetLastErrorしてOutputDebugStringしてないか?
これだからタダコンパイラ使ってるような奴はイヤなんだよ!
>>398 作れません。
Xで閉じてキャンセルなら「はい/いいえ/キャンセル」の形式にしないとユーザわけわかんなくなるし・・・
>>402 どうもありがとうございます。
> Xで閉じてキャンセルなら「はい/いいえ/キャンセル」の形式にしないとユーザわけわかんなくなるし・・・
確かにおっしゃる通りだと思います。
ただ、例えばデスクトップ上などでファイルを右クリック⇒削除を選ぶと、
>>398 のようなダイアログボックスが表示されるので、可能性がないわけではないかな…と思いまして。
>>399 hMyLibは、NULL(=0)ではなく、012B0000という値を持っていました。LoadLibraryは失敗していなかったようです。
しかし、エラーコードをチェックすると、その値が無効であると言われてしまいます。
>>404 ほとんどの場合、関数が成功した場合、SetLastErrorされないので、
GetLastErrorしても意味ない。
つーか、GetProcAddressのTestFuncを_TestFuncに書き換えれば、うまくいくはず。
>>405 ありがとうございます。SetLastErrorとGetLastErrorの働きがよく分かりました。
指示通りに書き換えてみたのですが、うまくいきません。
ここはお前の日(AAともにry
408 :
デフォルトの名無しさん:04/10/08 22:18:38
黙ってりゃ報告くらいしろと騒ぐし
409 :
デフォルトの名無しさん:04/10/08 22:24:37
グローバルフックを用いてキー入力をフックして、
フックプロシージャの中で、目的のウィンドウにキー入力を送信したいです。
どういう風に目的のウィンドウのウィンドウハンドルを取得するのがスマート、
というか一般的なんでしょうか
410 :
ぬるぽ:04/10/08 22:25:46
必死だな
>>409 目的のウィンドウが自分で作ってるウィンドウなら、共有メモリ領域にハンドルを書いておく。
そうでないなら、EnumWindow とかでゴリゴリ探すとか、Spy++ で手動で探したときと同じ
方法で探す。
>>409 目的のウィンドウのタイトルotウィンドウクラス名がわかってるならFindWindowも
>>411 >>412 ありがとうございます
自前のウィンドウに送りたいだけなので、
色々やってみます
>>414 あきらめかけていたのですが、どうもありがとうございます。
でも、レスをいただけないということは、いい方法がないのかも・・・
416 :
デフォルトの名無しさん:04/10/09 00:51:44
>親ウィンドウに次々と通知することで実現しているのですが、あまりスマートとはいえません。
なんでスマートといえないんだ?
君のプログラムは親関数に次々と return することで実現するより
グローバル変数のほうがスマートといえるのか?
jmp_buf みたいに親ウインドウのハンドルを次々に渡しておいて
通知はそのハンドルで一挙にって手もあるが、俺は推奨しないなあ・・・
417 :
デフォルトの名無しさん:04/10/09 00:54:41
もしかして GetWindowLong / SetWindowLong を知らないのか?
419 :
デフォルトの名無しさん:04/10/09 01:14:49
説明するのだるいんでキーワードだけ出しとく
WNDCLASS::cbWndExtra
GWL_USERDATA
ポインタをキャスト
やっぱりただのアホだったか
421 :
デフォルトの名無しさん:04/10/09 01:25:53
痛いネタいっぱつお見舞いするか
423 :
デフォルトの名無しさん:04/10/09 01:35:23
誰の発言かわからなくなるまでしばらく沈黙
sageてないのは二人しかいないような。
お返事が遅くなりました。レスをくださった皆さん、どうもありがとうございます。
>>416 > なんでスマートといえないんだ?
すみません、「スマートといえない」という表現には語弊がありました。
ただ、取得のタイミングさえ合っていれば GetFocus() で一発で済むところを
わざわざ次々と橋渡ししなければならない構造にひっかかるものはありました。
GetFocus() を実行するのにいいタイミングで送られてくるようなウィンドウ
メッセージが存在するということが、実は一番期待していた答えだったのです。
> グローバル変数のほうがスマートといえるのか?
いえ、私もできるだけグローバル変数は使わないことにしていますので、
グローバル変数を使うことをためらった結果、あのような構造になったわけです。
>>417 >>419 > もしかして GetWindowLong / SetWindowLong を知らないのか?
私へのレスでしょうか? 普通に使っていますが、この場合はそれほど
有用ではないような気が…。私へのレスでなかったらすみません。
>>425 いろんなフレームワークで行っているPreTranslateMessageみたいなことやれば?
MFCのフレームワークでさえ、結構面倒な機構を準備してフォーカスの
復元をしてるから、一発で解決するようなメッセージは無いと思う。
> ・hMyLibをstaticにしないと強制終了する。
> ・WM_PAINTメッセージが複数回ディスパッチされる。
WM_PAINTハンドラにMessageBoxを置いたことが原因でした。(^_^;)
> ・DLLのロードに失敗する。
GetProcAddressに失敗していました。エラーコードは127(指定されたプロシージャが見つからない)です。
実は123章のプログラムでもファイルマッピングオブジェクトの読み出しに失敗します。
名前を指定する方法に問題があるのでしょうか?VCとBCCの仕様の違いでしょうか?
>>405
>>428 DLLは自作か?その際に名前のエクスポートはしてるのか?
エラーコードが出てるんだからまずその内容を調べろよ。
回答者のレベル低すぎ・・・。
DepedencyWalkerとかでdll内部の関数名を確認しろ。
ま、DepedencyWalkerがなくてもdllの中身が見れるはずだが。
VCでビルドした場合だとC++のデフォで関数名が変わるのは常識だぞ。
エクスポート関数名に@とか混じってないか?
>>430 374を読んでる?
アンタもレベル低すぎですから!残念!
bccのデフォルトの呼び出し規約は__fastcallのはずなので
DLLの方で
#define EXPORT extern "C" __declspec(dllexport) __stdcall
EXEの方は
typedef __stdcall int (*PTESTFUNC)(int, int);
>>431 読解力ないな。誰も話をVCだけに限定してないだろ。
それともBCはdllの規格をMSの規則に逆らうわけか?
質問者はBCC使ってるのにVCの話したり、
CでのコーディングなのにC++で関数名が変わるのは常識とか言ったり
他人をレベル低いとか言ってるのに
自分もトンチンカンなレスしてるからだろ…
>それともBCはdllの規格をMSの規則に逆らうわけか?
関数名の問題なんでDLLの規格は関係ないでしょ。
>>432 やはり、うまくいきません。
元のソースコードはVCを基準に書かれているので、BCCとの仕様の違いが明確になれば、
対処できると思うのですが...。(^_^;)
もうVC買うかフリー版のVC使うかBCCでのサンプルを見つけろ。
>>434 >Cでのコーディングなのに
そんなこと書いてあった?
>>434 君は
>>374の足りない記述に関して通常の脳内補完をしているようだ。
それは通常レベルのプログラマ相手なら正しいだろうが、
初心者相手の場合はそうではない。
多くの場合、ありとあらゆる疑いの眼差しで初心者を見守ってあげる必要があるのだ。
>>438 DLLのソースにextern "C"が有るから
C++の名前変形は関係ないでしょ。
441 :
デフォルトの名無しさん:04/10/09 09:34:46
>それともBCはdllの規格をMSの規則に逆らうわけか?
parse error
つーかもう初心者スレでやってよ。
443 :
デフォルトの名無しさん:04/10/09 09:53:30
QueryPerformanceCounter、QueryPerformanceFrequency
この2つのAPIは最近のPCでエラーが起こりますか?
たとえば、CPUによって動作しないとかありますか?
>>437 紹介して頂いたツールを利用してDLLをリストアップしたのですが、ロードしたDLLは見当たりません。
しかし、LoadLibraryには成功しています。ロードしたDLLと、それに含まれている関数の名前も、
呼出元と呼出先で相違がないことを確認しました。
今なら言える
心の底から氏ねと
446 :
デフォルトの名無しさん:04/10/09 10:54:48
>>444 Z:\>dumpbin /exports dll04.dll
Microsoft (R) COFF/PE Dumper Version 7.10.3077
Copyright (C) Microsoft Corporation. All rights reserved.
Dump of file dll04.dll
File Type: DLL
Section contains the following exports for dll04.dll
00000000 characteristics
0 time date stamp Thu Jan 01 09:00:00 1970
0.00 version
1 ordinal base
2 number of functions
2 number of names
ordinal hint RVA name
1 0 00001238 _TestFunc
2 1 00009158 ___CPPdebugHook
(ry
まず
>>374は勉強が足りないな。
レス受けた内容についてもろくに解かってないようだし、
1日くらい試行錯誤してから書き込んだほうがいい。
>>443 キミの知り合いが突然、「このAPIは最近のPCでエラーが起こりますか?
CPUによって動作しないとかありますか?」って質問してきたらどうする?
返答に困るデショ。
>>448 高解像度カウンタは古いCPUだと使えないわけだが
>>443 IntelならPentium以降(P54なら確実、P5はしらん)
AMDは少なくともK5はサポートされてたはず
Cyrix系は不明
脳内HDDと脳内メモリの容量が小さい漏れにはプログラミングは不可能ですか?
電話の相手の苗字とかすぐ忘れるんだよ。
ずいぶん上の方に流れてしまいましたが・・・
>>426 > フレームワークで行っているPreTranslateMessageみたいなことやれば?
どうもありがとうございます。ただ、PreTranslateMessage の機構を
導入するとなると、私のイメージするものからは遠ざかってしまいそうです。
>>427 > MFCのフレームワークでさえ、結構面倒な機構を準備してフォーカスの
> 復元をしてるから、一発で解決するようなメッセージは無いと思う。
なるほど・・・MFCではほとんど組んだことがなかったので気が付きませんでした。
あきらめて今までの方法でいこうと思います。どうもありがとうございました。
>>444 もう1度122章のプログラムを作り直せ。
もとのソースは見るな。どこも書き換えるな。
.defファイルちゃんと書いてるのかな
>>450 output = (input)%size
って感じ。
たとえば文章を80文字で wrap すると、81文字目は次の行の先頭に表示される。
456 :
デフォルトの名無しさん:04/10/09 14:12:13
>>454 __declspec(dllexport) してるんだからそんな必要はない。
ラベル名に対する、ある思い込みが邪魔をしているだけだ。
>>456 はぁ?嘘もいい加減にしろヴォケ
defファイルきちんと書かんと@付いた変な名前になって
GetProcAddressで引けなくなるぞ
extern "C"が要るんだっけ?
でもそうすると他の言語から呼び出せなくなるね
459 :
デフォルトの名無しさん:04/10/09 14:46:45
>>457 装飾名になるかどうかはエクスポートしたかどうかとは無関係
↑何言ってるのかワカンネ
ほら、チョン学校で日本語やり直さないと
462 :
デフォルトの名無しさん:04/10/09 14:57:34
>>460 だいたい「変な名前」なんて用語ねえんだよ
おおかた MSU 逝く金もねえんだろ (プゲラ
463 :
デフォルトの名無しさん:04/10/09 14:58:50
MSDN も全部デッドコピーか
>>459 装飾名になるかどうかはエクスポートしたかどうかとは無関係だから、
defファイルを書いておかないと装飾名つきのままエクスポートされてしまうと言っているのだと思うが。
465 :
デフォルトの名無しさん:04/10/09 15:04:55
>>464 なるほど、アフォケテーイでよかったんだな
質問者の分際で情報小出しする馬鹿は、もうスルーしろ。
・・・・・・・・・・・・・・dllネタ終了・・・・・・・・・・・・・・・・・・・・
467 :
デフォルトの名無しさん:04/10/09 15:17:06
・・・・・・・・・・・・・・dllネタ再開・・・・・・・・・・・・・・・・・・・・
回答者づらをしてみたかっただけのど初心者が1人いるようだがスルーよろ
>>449 質問者は「最近のPC」と書いてるデショ。
質問者はもう少し情報を提供してくれないと返答できませんョ。
469 :
デフォルトの名無しさん:04/10/09 15:39:52
もう少しって、どのくらいか基準でもあるのか?
詳しく書かれすぎても連投荒らしみたいになるぞ
どんな情報が必要かは回答者ごとに異なると思う
核心の部分を故意に記述しない質問者も荒らしだろ。
しかも、他人を巻き込み無駄レスを大量発生させる。
471 :
デフォルトの名無しさん:04/10/09 16:17:10
いっぱつサックリ答えられる必要ないじゃん
技術的な話を楽しみに来てる人だっているわけで・・・
472 :
デフォルトの名無しさん:04/10/09 16:46:47
RegisterClassがめんどいんですけど。
最近では既存のコントロール乗っ取ってサブクラス化して
自分色に染めるのが好きです。
そういう用途に都合の良い既存クラスってありませんか?
腐女子は何でも801の対象にできる
477 :
デフォルトの名無しさん:04/10/09 20:00:22
GDI+でダブルバッファリング使いたいんですけど、
C++の場合はどのようにすれば良いんでしょうか?
C#だと
Image img = new Bitmap(width , height);
Graphics buf = Graphics.FromImage(img);
として、バッファに書き込み最後に
g.DrawImage(img , 0 , 0);
とすれば良いと、分かったんですが
C++になると分かりません。
どなたか教えてください
480 :
デフォルトの名無しさん:04/10/09 20:46:54
>>479 BCCちゅーからコマンドラインかと思たーよ
>>480 BCC Developerを使用しています。
>>479 何の仕様が違うと思ってるのかは知らないが、
そこに書かれている内容はVC++の場合となんら違いない。
483 :
477:04/10/09 21:09:48
>>478 C++の場合
Image img = new Bitmap(width , height);
の部分でどう書けばいいか分からないんです。。。
>>479 それってGetProcAddressを使った明示的ロードには見えないがそれでいいのか?
>>484 次のように書き換えました。
extern "C" __declspec(dllexport) int TestFunc( int a, int b )
↓
extern "C" int WINAPI __declspec(dllexport) TestFunc( int a, int b )
このように書き換えないと、DLLのロードに失敗します。
もういいじゃん。飽きた。
まんぐりがえしを抑制するだけだろ
490 :
デフォルトの名無しさん:04/10/09 23:00:42
荒れるからageないで
493 :
デフォルトの名無しさん:04/10/09 23:30:48
うっさい
ウィンドウのサイズ変更したら再描画するようにするにはどうすればいいか教えてください
CS_HREDRAW, CS_VREDRAW
>>495 ありがとうございます。あとWM_PAINTメッセージじゃなくて
ウィンドウのサイズを変更したら送られるメッセージとかってありますか?
>>496 WM_SIZE
っていうかMSDN読め
スパれよ小僧が
WM_SIZINGも調べとけ
>>432 >>491 うまくいかなかったのは、新しいDLLをコピーし忘れ、古いDLLの方をロードしたためです。
いい加減なレスをして申し訳ありませんでした。(^_^;)
PostMessage(hfw,WM_KEYDOWN,VK_SPACE,0);
のように、キー入力メッセージを渡したいのですが、
Ctrl+A(コントロールを押しながらAキーを押す)入力メッセージを
渡すにはどうすればいいでしょうか?
keybd_eventにしたら?
ウィンドウの終了処理について×ボタンを押すてもexeが終了せず、
ビルドを再度行うと、LINK : fatal error LNK1168: 書き込みモードで Debug/rap.exe を開けません
というエラーが出ます。
以下ソースです。原因分かる方がおりましたらお教え願います。
LRESULT CALLBACK WndProc(HWND hwnd , UINT msg , WPARAM wp , LPARAM lp)
{
switch(msg){
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hwnd,msg,wp,lp);
}
----------略--------------------
while(GetMessage(&msg , NULL , 0 , 0)) DispatchMessage(&msg);
return msg.wParam;
×ボタンについては、WM_CLOSEを処理汁。
で、前のプログラムをちゃんと終了させればエラーも出なくなる。
>>504 終了しないプログラム(ファイル)を書き換えることができないのでビルドに失敗する。
何らかの方法で強制終了してからビルドすべし。
>>505 WM_CLOSEをDefWindowProcに送ればDestroyWindowされるけど。
>>507 そうでしたね。出しゃばってすみません。
みなさまレスサンクスです。
WinMain関数中のWNDPROC 型の指定をWndProcでは無くべつ名前にしておりました。
お騒がせ致しました。
変数aに読み込んだデータをあるところで区切って改行して下に表示したいのですがどうすればいいですか?
1. あるところで区切って改行する
2. 下に表示する
以上
いやだからさ、クライアント領域全部に描画しちゃうからさ
1回描画したら2回目以降の表示で前回の表示消えちゃうだろボケが
>>512 この文章の意味がわからないのは漏れだけ?
お前だけ
>>513 書いてある文字は理解できるが内容が理解できん
どこから出てきた話だ、これ?
はいはい、わかりましたよ。まずよ、文字描画するときって
変数に貯めてる文字をいっぺんにクライアント領域に描画しますよね。
そうじゃなくて変数に貯めてあるデータを決まったバイト数分ごとに
改行して描画したいのですよ糞ボケが。なので教えてくださいタコが
・補足後も情報足りない
・口調が悪い
答える物好きもおるまいて
>>516 文字列を任意の位置に表示することはできるの?
だったら改行したい量ごとに文字を分割して
それぞれ任意のy座標に書けばいいだけじゃないか。
まあ馬鹿にはわからないだろうがバックバッファ持って横幅文字数に区切った文字列を描画
その文字のサイズ分Yを足して2行目描画
描画実行時にそれをクライアント領域に転送
API以前の問題だな。馬鹿らしい
なんでバックバッファが出てくるんだ?
>>520 いきなりクライアント領域に2回に分けて書いたらちらつく場合があるからじゃない?
バックバッファなんてわかんねぇよチンカス
だまれぼけ
変数に改行する情報とかって入れれないの?
>>510 DrawTextのRECTを設定して描画じゃだめなのか?
描画するときはエディットコントロールにEdit_SetTextマクロを使って描画してます。
れくと構造体は使いません
普通に改行いれちゃだめのか?
普通というと?
バカは放置しろよ
方法わかる方のみレスをつけてください。バックバッファとか言ってる馬鹿はいりません
*NULL='\0';
そんなことはできない
特定のバイト数分ごとに変数に特定の文字は入れれる。改行ができない
dwStyle = WS_CHILD | WS_VISIBLE;
dwExStyle = WS_EX_LAYERED;
だと表示されないんだけど、これは仕様ですか?
MSDN 読んだけど、特に注意書きはないし(´・ω・`)
ちなみに、WS_CHILD をなしにすると、
ちゃんと半透明もしくはカラーキー付きで表示できるのは確認済みです。
WS_EX_LAYERED
Windows 2000/XP: Creates a layered window.
Note that this cannot be used for child windows.
Also, this cannot be used if the window has a class style of either CS_OWNDC or CS_CLASSDC.
Windows XP: With WS_EX_COMPOSITED
set, all descendants of a window get bottom-to-top painting order using double-buffering.
Bottom-to-top painting order allows a descendent window to have translucency (alpha) and transparency (color-key) effects,
but only if the descendent window also has the WS_EX_TRANSPARENT bit set.
Double-buffering allows the window and its descendents to be painted without flicker.
>>536-538 レスサンクスです
> Note that this cannot be used for child windows.
ハッキリ書いてましたね(´・ω・`)
日本語のほうにはこれっぽちも書いてないのにヽ(`Д´)ノ
お騒がせしました。
奇跡。改行できた。お前等マジで糞。訳に立たなすぎ(プゲラチョフ
特にバックバッファとか逝ってた糞ボケ。はぁ?アホ?なに?バックバッファって?
子ウィンドウはダメっぽいので、WS_POPUPでやることにしました。
フォーカスを親から奪ってしまう点などは、無理矢理SetFocusさせて解決できそうです。
ああ、あと位置も、親のWM_MOVEの時にまとめて修正で行けそうです。
ありがとうございました。
542 :
デフォルトの名無しさん:04/10/13 02:54:42
Sleep(1)で10ms待たされます。
もっと正確なSleepを使うにはどうすればよいのでしょうか?
>>542 そんなSleepありません。マルチメディアタイマーを使っても
そんな精度出るかどうか。
戻ってくるまでに 1010ms かかるってこと?
>>544 それでは、1ms待ちたいのに、1秒と10ms待たされる事になりますけど…
timeSetEventも駄目でした。
timeGetTimeで測定しているのが駄目なのかもしれないので、
PerformanceCounterで測ってみます。
PerformanceCounterだと、20ms待たされる事が一番多かったです。
Sleepはタイムスライスを放棄するためのAPIであって一定時間待つためのAPIじゃない。
じっけんだ!
SetPriorityClass(GetCurrentProcess(), REALTIME_PRIORITY_CLASS);
SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_TIME_CRITICAL)
してから、timeSetEvent したらどうなるのかな?
# マシンが応答しなくなるかもしれんがw
>>548 特に重たくはなりませんでした。
timeSetEvent(17, 1, TimeProc, 0, TIME_PERIODIC);
だと、10msか20msにばらけるので使えないと思ったのですが、
timeSetEvent(1, 1, TimeProc, 0, TIME_PERIODIC);
にして、TimeProc内で17ms経過を待ってみます。
549のやり方でも10ms単位みたいです。
>548で単純ループ(CPU使用率100%)で時間を数えると、マシンの応答が無くなりました。
これを変えなければ特に遅くはならないので、単純ループで数える事にします。
>>545 timeBeginPeriod(1) すると、Sleep() の精度も上がるよ。
どっちにしろ、リアルタイムOSではないので完全に正確にはならないが。
PerformanceCounterで10msって・・・どういう環境だよ
あれ普通マイクロ秒とかそういう精度だろ?
>>542 何の目的で正確に10ms待つ必用が用途を言った方がいいかも。
>>551で十分かもしれないし、場合によってはドライバ書いたり
別OSじゃないと駄目だったりするから。
あらゆる状況で10msだけ待つことを保障するっていうのは普通
Windowsじゃ無理。
554 :
デフォルトの名無しさん:04/10/13 13:27:07
zip圧縮をDLL無しで行う方法を教えてください
>>554 ファイルを選んで右クリックでコンテキストメニューが出るだろ。
557 :
デフォルトの名無しさん:04/10/13 13:40:45
>>556 zlibの入手先やリンク方法を教えてくださ
連邦のモビルスーツはグーグルを知らんのか!
グーグルはどこで売っているのでしょうか。近所にはGOOしか売ってないです。
え?うちの近所じゃinfoseekとlivedoorも打ってたよ
安かったから買ってきたんだが、infoseakとJivedoorだった!だまされた!
>>552 QueryPerformanceFrequency
>>545 timeBeginPeriodしなきゃtimeGetTimeの精度も上がらないのでは?
563 :
デフォルトの名無しさん:04/10/13 20:23:46
すみませんが質問させて下さい。
vc6.0+win32環境です。
ツールバーをカスタムドローしてボタンのアイコンを書いています。
NM_CUSTOMDRAWメッセージを処理してNMCUSTOMDRAWのRECTメンバ
からアイコンの位置を取得する時に、ドロップダウンを持つボタンのみ
縦の位置がずれてしまいます(XP環境でテーマ(manifest)を置いている時に限りです)。
何方か位置がずれない方法を知りませんでしょうか?
よろしくお願いします。
リストビューのカラムの数はどうやって得るのでしょうか?
565 :
デフォルトの名無しさん:04/10/13 21:24:07
>564
LVM_GETHEADERと
HDM_GETITEMCOUNTかな
Windows2000のグループ名を取得したいけどどうしたらいい?
MSDNで見つけられなかった・・(つД`)
NetWkstaGetInfo
>567
ありがとうございまつ。これで今日寝られる・・・(つД`)
ファイルのオープンに関して質問です.
GetOpenFileName()で指定したファイルをオープンできる所まで試しました.
ですが,選択する画面でデフォルトのパスがマイドキュメントになっています.
これを任意のディレクトリに変更するにはどうしたらよいでしょうか?
VC7環境です
OPENFILENAMEのメンバかたっぱしから調べろ
WindowsXPで
ファンクションF3キーでの「検索結果」ウインドウ
をグローバルフック等で無効化したいのですが、
どのクラスでメッセージを受け取っているのか
分からない状態で困っています。
spy++などで「Shell_TrayWnd」を覗いてみたのですが
「0xC0F2」(登録:ShellFileOpened)のメッセージが
ポストされていて、未処理の様で、ここでは無いみたいです。
どなたかご存知の方いらっしゃいませんでしょうか?
少なくとも指定した分だけ待つ、じゃないかなあ。
>>572 もしかして、環境は9xなのか? 2000ではそれなりにきっちりSleep()してくれたんだが。
sleepは最低これだけ待つというだけだぞ
だから極端な話20秒ウェイトがかかったとしても仕様通り
MSDNはちゃんと読もうね。
The Sleep function suspends the execution of the current thread
for "at least" the specified interval.
""内に注目。
ほんとに、プログラマめざしてるのか?
最低、2chなんぞ頼るなよボケ、絶対採用しない
>>578 間違ってあなたの会社へ行かないようにするため、社名を教えてくれませんか?
>>580 1ms単位が必要と言うより、10ms単位が困るのです。
10ms単位だと、11ms待ちたい時に20ms待つ事になり、倍時間が変ってきます。
これが、100msと110msとなら気にならないかもしれません。
>>581 それはやっぱり1ms必要ってことじゃん
>>581 11ms待ちたい時に20ms待つ事になっても大丈夫なように作るのが
Windows流です。
Sleepがどんなに正確でも
Sleepから返って来た直後に別スレッドに持ってかれたら意味無いわけで。
マルチタスクOSで正確なウェイトなんて考えるほうがバカ。
というか、ゲームでのウェイトにSleep使うな
メインループでぶん回し、メインループから分岐で各処理を呼び出す
ウェイトが必要なら、その処理を空回りさせて処理しろ
うちのプログラムで使ってるそのへんの処理を簡略化して書くとこんな感じだ
// これはメインループから呼び出される関数内
switch( process ){
case WAIT_START:
TickCheckStart = GetTickCount();
oldprocess = process;
process = WAIT;
break;
case WAIT:
if( (TickCheckStart + 10) > GetTickCount() )
process = oldprocess;
break;
case KEYWAIT:
// キー待ち処理とか
// あとはこの調子で画面効果とか、スクリプト処理とかを分岐させていく
}
// 画面描画
>587
常時CPU使用率が100%になるゲーム、逝ってよし。
Sleepを怖がってWindowsでゲームが作れるか!
>>588 あぁ、Sleepは入れるよ
ただ、Winに処理返すために使うのであって、10msきっちりとかは考えない
>>581で言ってるような細かいことにSleep使うのはやるなってこと
Sleep(0)じゃCPU使用率が100%になるから意味内
WaitForXXXでいいだろ。
Sleepなんか使うな、メッセージへの応答も遅くなるし。
ウィンドウメッセージはメインスレッドで処理して、
ゲームループは別スレッドで回すモンじゃないのか?
ああああ,11111,うううう,おおおお,22222
カンマ区切りのデータを読み込んで
それぞれのエディットボックスに表示させたいと思っているのですが・・・。
最初はWM_COMMANDメッセージのイベントにANSI Cでstrtokを使用し、
カンマ区切りでデータを分割しようとしたのですが
データに日本語が入っているため、うまくいきませんでした・・・。
こうすれば超簡単とかいうのがございましたらお教え願います。
>データに日本語が入っているため、うまくいきませんでした
ダウト
というかWIN32APIの話ではないな。
どーしてもWIN32APIで処理したいなら、ODBCでテキストドライバでも使え。
strtok のマニュアルを隅々まで読め。超簡単だろう。
>>593 Win32APIじゃないけど_mbstokじゃだめか?
レスたいへんありがとうございます。(TT)
日本語をカンマ区切りでテキストに書き込めましたので
読み込みもできると思い込んでおりました。
英数字だけのカンマ区切りのデータの場合の処理の仕方がありましたら
どんなものか概要をお教え頂ければ幸いです。
WinAPIでコントロールをたくさん貼り付けて作成しているので、
こちらで質問させて頂きました。
そもそも、WinAPIにANSI Cを使うことは間違いなのでしょうか。
598 :
デフォルトの名無しさん:04/10/14 19:18:31
スタティックコントロール内の文字なんですが、縦センタリングって可能なんで
しょうか?
自動的でなくても、表示位置を任意に設定できるならそれを使おうと思うのです
が、どうしても方法が分かりません。
> そもそも、WinAPIにANSI Cを使うことは間違いなのでしょうか。
それ自体は間違いでも何でもない。
・ANSI C関数の使い方(選び方)
・このスレの使い方
が間違っている
DVD-RAMの空き容量を取得したいのですが、
GetFreespaceEx()で取得できるのでしょうか?
重ね重ねでもうしわけないのですが、
DVD-RAMドライブにDVD-RAMを挿入した状態で、
GetDriveType()を行った場合、DRIVE_RAMDISKは返ってきるのでしょうか?
>>600 GetDiskFreeSpaceEx()のことかね?
>>601 DVD-RAMはあからさまにRAMディスクじゃねえからなあ…
>>602 そのとおりです。間違いました、すみません。
>>601 Panasonic LF-D201ではGetDriveType()でDRIVE_CDROMが返ってきた。
GetDiskFreeSpaceEx()で空き容量を取得することは出来た。
>>602 お手数おかけして、すみませんでした。
試して頂いたおかげで助かりました、どうもありがとうございました。
HRESULT hr;
IStream pi;
if( FAILED(hr = SHCreateStreamOnFile("A:\\a.txt", STGM_WRITE | STGM_SHARE_EXCLUSIVE | STGM_CREATE | STGM_DIRECT, &pi)) )
{ /* エラー */ }
const UINT size = 1457665;
LPBYTE buf = new BYTE[size];
ULONG written;
if( FAILED(hr = pi->Write(buf, size, &written)) )
{ /* エラー */ }
空のフロッピーに1457665バイト(空き容量+1バイト)書き込みます。
空き容量より大きいので失敗すると思ったのですが、なぜかS_OKが返ってきます。
writtenにもsizeと同じ値が返ってきてます。
空き容量が足りないはずなのに、なぜ成功してしまうのでしょうか?
>>607 >IStream pi;
IStream* pi;
修正
あと、実際にフロッピーに作られたファイルは1,454,080バイトでした。
>>492
>>609 バッファリングされるからWriteではエラーにならないとか?
もっと極端に大きなサイズを書こうとすればエラーになるんじゃない?
CPU使用率が100%のまま移行するとCPUが熱くなって、
ノートパソコンだとファンがうるさいそうです。
>>610 Commit(STGC_DEFAULT)を呼んだらSTG_E_MEDIUMFULLが返ってきました。
どうやらバッファリングしてるみたいです。1,454,080が512や4096の整数倍だし。
とりあえず最後にCommitすることで解決しました。Writeでエラーにならないのは釈然としないけど…
ありがとうございました。
>>612 なんでもありません。いつのまにか付いてました。
>>613 >Writeでエラーにならないのは釈然としないけど
実際に書き出しているわけではないから仕方ないかと。
エディットボックスやコンボボックスなどのをコントロールをたくさん作成して
あるお方のお手本通りウインドウプロシージャ内(WinPrco)のWM_CREATEで作成しているのですが
WinMain関数内で作成しないでWM_CREATE内で作成する理由はあるのでしょうか。
また、WM_CREATEは、プログラム起動時に発生するメッセージという認識なのですが
間違っていますでしょうか?
>>615 WM_CREATEが来るのはウィンドウ作成中
WinMainでウィンドウ作成後に設定するよりスマート(だと俺は思っている)
WM_CREATEはプログラム開始時ではなく、ウィンドウ作成時。名前の通り
ウィンドウプロシージャを再利用する時、そのウィンドウに
関する初期化処理をWM_CREATEに書いておけばウマーとか。
最近、ワイド液晶を搭載したノートPCとかが出ていますけど、
こういうモニタの物理的なアスペクト比を取得する手段って
ないでしょうか?
レジストリ
GetDeviceCaps で取れないか?
GetMonitorInfoじゃないか。
質問です。
CreateWindowで作成したLISTBOXで
WM_DRAWITEMを使わずに
リストボックスの各項目の背景を任意のビットマップにする方法はあるでしょうか?
なんかうまいことやってるアプリを昔見かけた気がするのですが・・
あれはオーナードローなのかな。
>>615 グローバル変数の使用を極力避けるようなプログラミングを心がけている人なら、
自然と WM_CREATE の中で初期化をおこなうようになりますよん。
>グローバル変数の使用を極力避けるようなプログラミングを心がけている人なら、
>自然と WM_CREATE の中で初期化をおこなうようになりますよん。
関連性ないよ
>>615 もし何らかの理由でコントロールの構築に失敗した場合、
DestroyWindowせずとも-1を返してやるだけでウインドウの作成をキャンセルできるから。
626 :
デフォルトの名無しさん:04/10/15 21:40:35
>>389 ローカルフックでWM_SETFOCUSのHWNDを保存しる
ShellExecuteEx で実行するプログラムに環境変数を設定して渡してやるには
どうしたらいいのでしょう?SEE_MASK_DOENVSUBST フラグを使えばいいよう
気もするんですが、ぐぐってみてもよくわかりませんでした・・・orz
>>627 環境変数を渡すにはCreateProcessじゃないと無理。
SEE_MASK_DOENVSUBSTはプログラムのパスやコマンドライン引数の部分で"%WINDIR%"のように指定された環境変数を展開させるためのフラグだったはず。
エディットコントロールに文字を転送して表示してるのですが
なぜかアルファベットが2バイト文字のようにすこし大きくなります。
表示された文字を別のメモ帳にコピペするとふつうの1バイト文字になります。なぜでしょうか?
転送ってなあに?
SendMessageのことです
へえ
そういうフォントだからだろ
そういうフォントというのはエディットコントロールの仕様ということですか?
モーダルダイアログボックスにSendDlgItemMessageで転送するとふつうに表示されるのですが
MFCが難しいのでWin32APIでプログラム作成しているのですが
Win32APIの仕事って少ないでしょうか。MFCを使えたほうがよいのでしょうか?
とりあえず就職しろ
覚えるのはそれからでも遅くは無い
チャットソフトをつくりたいのですが どこか
解説しているようなサイトなどないでしょうか
>>636 就職しています。
ANSI Cはできるので、ステップアップと思い、Win32APIをやっているのですが
仕事ってあります?Win32APIでプログラムを作成すると無駄に時間だけが掛かってしまうのは私が馬鹿だからなのでしょうか。。。
639 :
デフォルトの名無しさん:04/10/16 02:44:46
>>635 新卒ならたいがいのところは大丈夫。
30過ぎてるときついかもしれないけど。
640 :
デフォルトの名無しさん:04/10/16 02:46:23
>>638 就職先で必要でなければ無理に覚えることは無いでしょう。
641 :
デフォルトの名無しさん:04/10/16 02:52:53
>>638 MFC使うより格段に仕事が早く高品質にできるのなら
多分あると思いますよ。
MFCで組むにしてもDelphi使うにしてもC/C++でベタ書きするにせよ、ネイティブアプリ作ってる限りはWin32API自体は把握できてないとだめ。
それを踏まえた上でどうやってアプリ作るかは好きにすればいい。って言っても仕事だとその辺なかなか自由にはならんだろうが。
特にMFCは必要な機能に限ってクラスになってなかったりするんで
APIの知識は無駄にならないと思う
>>638 もしWin32APIでCUIアプリケーションを作成しているとしたら、あなたが馬鹿だからです。
GUIアプリケーションを作成しているとしたらそもそも単純に時間を比較すること自体が間違ってます。
会社によっては Win32API と独自クラスで開発しているのでは?
質問です
グローバルフックで
エディットコントロールのデフォルトのポップアップメニューのハンドルを取得したいのですが
どうやればできるでしょうか?
WH_MOUSEでWM_CONTEXTMENUだとエディットコントロールのハンドルが帰ってきて駄目でした
コントロールとポップアップメニューは関係ないから
メニューハンドルを得るのは無理では?
開発効率悪そう・・・
651 :
デフォルトの名無しさん:04/10/16 13:03:23
だって MFC って 生産性<オーバーヘッド
ATL は COM 前提だし
そこでWTLですよ
bccでも使えるライブラリほしいな
hoge.h
#define ID_HOGE 1
#define ID_HAGE 2
///////////////////////////
hoge.rc
HOGE MENU {
POPUP "ほげ" {
MENUITEM "はげ", ID_HAGE
//////////////////////////
「POPUP "ほげ"」にID_HOGEを関連付ける方法はなかとですか?
#define MENUDEF(name) name MENU { POPUP #name { MENUITEM #name, ID_##name
ではだめか? リソーススクリプトの #define が C と同じプリプロセサ呼び出してるかどうか自信ないが・・・
バカか?
相手にしない方がいいかも
ディレクトリ(フォルダ)を指定して、それ配下のファイルとディレクトリの合計サイズを
取得するAPIってないでしょうか?
ない
662 :
デフォルトの名無しさん:04/10/16 21:08:14
WLX_NOTIFICATION_INFOって構造体はどこに定義してあるんでしょうか?
MSDNによればwinwlx.hに定義してあるらしいんだけど、ヘッダをインクルードしても
「定義されてません」って言われちゃう。で、ファイルの中を見たらそんな構造体ありゃしない。
ググっても外国のページしかヒットしないし、仕方なくそのページを開くと普通に使ってるし。
何か足りないのかな?
お前の脳味噌。
>>662 ヘッダ読んだ?
#if とかでハネてるケースよくあるよ
>>662 私も確認してみた。
VC98のwinwlx.hには、WLX_NOTIFICATION_INFO構造体がないね。
そんなわけで、
>>665の助言に従うべきでしょう。
[ファイルから検索] もしたほうがいい
↑それ便利だけど、実装するとなるとちょっと遠慮したいよね
>657
それはちょっと無理です。
>658-659
スレ汚し失礼しました、申し訳ないです。
>>663 足りないから補いたいのは山々なんだけどね〜
>>664,667
winwlx.hをエディタで開いて探したよ。
でも見つからなかったんで、「ファイルから検索」で探したよ。
残念ながら見つからなかったさ。
>>665 環境はVC6 SP6 なんだけど、これより新しいのって何だろ?.NET?
VC6には入ってなかった、SDKに入ってた。
>>671 いや〜お恥ずかしい。早速インストールしたさ。あったさ。WLX_NOTIFICATION_INFOが。
やっぱり脳が足りないようで…
助かりました。どもです。
HeapAlloc()で確保するメモリは、必ず物理メモリ上に確保されると考えていいですか?
なぜそう思うんだ?
なぜそれが気になるんだ?
もうひとつ。
VirtualLock()はVirtualAlloc()以外の方法で確保したメモリにも使えますか?
>>674 ページアウトされないってことなら、どんなメモリ確保も物理メモリ上にある保証はありません。
「物理メモリ」を誤解している悪寒
韓国から拾ってきたVC7ソースなんですが、
これはEUC-KRでかかれているらしく、リテラル文字列が以下のように終端の"が
なくなってしまいます。
InsertColumn(3,"コクウスセ・,LVCFMT_LEFT,65,3);
日本語環境でclコンパイラにEUC-KRを認識させる方法はないでしょうか?
濃く薄せ
>>681 ソースファイルを適当なエディタで読み込んで変換するんじゃいけないの?
ありがとうございます。
エンコードつき保存で、EUC-KR -> UNICODEでできました。
画面遷移を行いたいのですが、定石ありますでしょうか?
画面ごとにexeモジュールを作成しているので
画面の中のコマンドボタンを実行すると
別画面(exe)を呼び出し、元のexeは終了する方法を考えています。
>>685 なんでそんな面倒なことするんだ?
リソースで定義したダイアログを順々に表示するんではいかんのか?
>>686 レスありがとうございます。
リソースについて調べました。使ってみるつもりです。
リソースで定義したダイアログを呼んでも元ウィンドウは残ったままになってしまいそうなのですが・・・。
別に元のウィンドウが残っててもいい気がするが…
元を親ウィンドウとして処理するってのが普通だと思うけど…。
それが嫌なら、元ウィンドウ消してから
別のウィンドウ表示すれば良いのでは?
ウィンドウ毎に担当者を分けているとか?
それで別 exe の方がやりやすいとか。
別画面が終わったら元画面に戻したりしないの?
元画面終わらせたらかえって面倒だよ。
スレ違いかもしれませんが・・・質問させてください・・・
今、32APIでシューティングゲームを作ってるんですが、
パソコンが壊れてしまったので
新しく買い換えたのですが、
新しいPCの方でいきなり描画処理がおかしくなりました。
カクカクと動くし、
背景以外の透過画像やFPS表示もされない・・・
前のPCはビデオカードがオンボードだったんですが、
今回のPCはこれを期に一気に
RADEON X300 の 128Mを積んだマシンを購入したんですが、
PCI Expressがいけなかったんでしょうか・・・
どなたか解る方いらっしゃいますでしょうか?
よろしくお願いします・・・
>>690 もしかしてスレ違いかも? (その場合、ハード板が妥当と思われ)
「積んだ」っていうのがどういう形でかわからんが
特注でつけたパーツが新しすぎると
ドライバが「標準」になってたり
初期ロット系のトラブル抱えてたり
OS 側の処理がタコだったり
つーことは結構あるな
>>691 そういうのもあるけど質問の仕方からして、あんまり慣れてない人が
環境依存のコード書いちゃったっつうのもありうる。
>>690 自分で書いたコードならプロファイルとるなりトレースするなりで
どの処理に時間がかかってるのか調べてから相談しても遅くない。
DirectXつかってるならカードごとに対応してる機能に違いがある
んで〜CAPSみたいなのを調べてみる必用もあるかも。
>>688-689 レスありがとうございます。
リソースで新たな画面を呼び出すと
元のウィンドウが表示されたままになってしまい、
モニター上には元の画面と新しい画面の2画面になってしまわないでしょうか・・。
ってやってみってます。すみません。
exeを作っているのは私一人です。
>>693 だから前のウィンドウはそのつど消せっての
>>694=695レスありがとうございます。m(_ _)m
main.rcを作成しその中に以下の一行を追加
MAIN_RESORCE "NEXT_GAMEN.EXE"
VC6++のワークスペースのResorce Fileにmain.rcを追加。
ビルドをしたら以下のエラーが表示されました。
C:\Program Files\Microsoft Visual Studio\MyProjects\Main\main.rc (3): error RC2135 : file not found: "NEXT_GAMEN.EXE"
NEXT_GAMEN.exeは、今回編集しているソースと同じディレクトリおよびdebugフォルダにも格納しましたが
上記エラーが表示されます。
初歩的なことですみません。
なにかこんな頭の悪い人のためのお勧めのWin32APIの参考書はありますでしょうか。
どこから突っ込んでいいのかわからない。
>>691様
>>692様
スレ違いな質問に答えてくださいましてありがとうございました。
ところで、環境依存のコードとありますが、
現在表示されていないソースでは、
画像の透過処理のTransparentBltを使っているんですが、
ここの処理がうまくいってない様です・・・
これは、環境依存コードなのでしょうか?
よろしければ、ご教授ください。
699 :
デフォルトの名無しさん :04/10/18 14:18:53
GetAsyncStateを使ってキーの押下状態を取得しているのですが、
何個かのキーを同時に押すとBeep音がします。
これを鳴らないようにする方法はないでしょうか。
複数行あるファイルから一行ずつ読み取るにはどうしたらよいのでしょか。
ReadFile関数で読み込みましたら、すべての行を一回で読んでしまいました。。
ReadFile(hFile , strFile , GetFileSize(hFile , NULL) , &wReadSize ,NULL)!=0)
>>701 >702なので、改行文字まで一文字ずつ読む必要あり。
#いっそ、全部読んでからばらすのも手かも。
ちゅうか、わざわざ API 使って
テキストファイル読むこともなかろうにと思うが。
C/C++のライブラリ使えば済むじゃん。
はて?
遠回りを奨めるスレでもないと思うが。
>>704 >705なので、スレタイを冷静に読む必要あり。
#いっそPCの電源切って窓から投げ捨てるのも手かも。
>>704 APIでオープンしなければならない事情があったときはどうしたら?
さすがにC/C++ライブラリくらい知ってんじゃないの。
Win32APIにそれ相当のものがあるか?って質問だろう。
>>701この手の質問に答えられる奴がいないだけだろ?
毎回、この質問が出ても質問者を叩いて終るし。
誰かコードアップしたれよ。
お前がアップしたれよ。
713 :
デフォルトの名無しさん:04/10/18 17:24:49
>>712 fgetsじゃベタだろ。
@FileReadで1バイトづつ読んで、\nで読み込み終了
Aファイルポインタを\nの次に移す。
BEOFまで@を繰り返す
つうソースが欲しいんだと思うぞ。
>>701は
>>712 fgetsの中身なんて改行文字がくるまでfgetcで読み込むような感じだろ。
となりのメガネが
アピアピ連呼するんですが
なんとかなりませんか。
>>713 '\n'の手前にある'\r'は捨てる処理を入れたほうが良いんじゃないかい?
717 :
713:04/10/18 17:33:21
>>716 も、もちろん知ってるよ。
ウ、ウィンドウズの改行マークは"\r\n"だ、だろ?
718 :
デフォルトの名無しさん:04/10/18 17:33:57
timeGetTimeはNT系の場合精度が5ミリ以上になる場合があるとMSDNに書いてあるので,
関数の前後をtimeBeginPeriodとtimeEndPeriodで挟んで精度を上げているのですが,
これ(timeBeginPeriodとtimeEndPeriod)ってtimeGetTimeを呼ぶたびに
毎回呼ばないと精度を保てないんでしょうか?
>>713 いくら API スレだからって、
ReadFile で1バイトづつ読ませるなんて、
非効率的な事は勧められんだろう。
そんなことしたら、fgets 使うのに比べて
何十倍も処理時間掛かるじゃん。
>>719 fgetsをベタとか言ってる時点でネタだと思うが。
fgetsのソースを見る、でこの質問は終了のはず。
>>719 貴様!701が読み込みにMutex使ってたら、どう責任取るつもりだ?
なんつーか、質問者が出てこないのに仮定で話を進めるのはこのへんでやめにしないか。
続きは質問者が出てきてからってことで・・・
低レベルなファイル「読み込み」関数は使うメリットあるのか?
具体的にいうと_read()とかReadFile()とかなんだけど。
低レベルなファイル「書き込み」関数は使うメリットがそれなりにあると思う。
>724
非同期 I/O
>>708 _open_osfhandle + fdopen とか。
>>724 CreateFile()の引数でシーケンシャルスキャン・ランダムスキャンを指定したいとか、
キャッシュ効かせないようにしたりとか(確かFireFileCopyとかそういう事してた)、
SetEndOfFile()使いたいとか、2GB・4GB超えるようなファイルを扱うとか?
728 :
デフォルトの名無しさん:04/10/18 19:03:47
C++Builder 5 でユーザーモードから ZwQueryInformationFile() を呼び出すと
ハングアップすることがあるんですが、原因がわかる方いらっしゃいますか?
>>728 winternl.h のプロトタイプをそのまま使ってない?
プロトタイプがバグってる(WINAPIが付いてない)から使っちゃだめ
WINAPIじゃなくてNTAPIか
まあどっちも__stdcallに展開されるんだけど
>729
ありがとうございます。
ヘッダーは DDK に付属のものを使っています。
NTSYSAPI
NTSTATUS
NTAPI
ZwQueryInformationFile(
IN HANDLE FileHandle,
OUT PIO_STATUS_BLOCK IoStatusBlock,
OUT PVOID FileInformation,
IN ULONG FileInformationLength,
IN FILE_INFORMATION_CLASS FileInformationClass
);
どうも、特定のファイルをクエリーするときにだけ、ハングアップするようなのです。
ハングアップするというのは、この API から戻ってこないということです。
>>724 ReadFile()はCランタイムライブラリを全く使わないプログラムを作るときに使うんだろう。
733 :
デフォルトの名無しさん:04/10/18 23:12:33
IMEにユーザー辞書を追加したあと、
WM_IME_COMPOSITION
で変換候補が確定した時にその単語がどの辞書
(標準辞書なのかユーザー辞書なのか)に含まれるか調べたいのですが
どうやって調べればいいんでしょうか
734 :
デフォルトの名無しさん:04/10/18 23:32:46
よく年月日のテキストボックスの横に上、下に向いている三角形(▼▲)が
あるけど、これってwin32apiでは実装されてないのでしょうか?
▲▼をクリックすると、テキストボックスの日付が変わる機能です。
コモンコントロールのUp-Down
void TForm1::ShowContextMenu(TObject* Sender, LPITEMIDLIST pIDL)
{
HRESULT hRes;
LPCONTEXTMENU pContMenu;
HMENU hMenu;
POINT pCursor;
int iCommand;
CMINVOKECOMMANDINFO stInvokeInfo;
hRes = m_pDTFolder->GetUIObjectOf(this->Handle, 1, (LPCITEMIDLIST*)pIDL, IID_IContextMenu, 0, (LPVOID*)&pContMenu );
if (hRes != NOERROR) return;
hMenu = CreatePopupMenu();
hRes = pContMenu->QueryContextMenu(hMenu, 0, 1, 0x7FFF, CMF_NORMAL);
if (hRes == NULL) {DestroyMenu(hMenu); return;}
GetCursorPos(&pCursor);
iCommand = TrackPopupMenu(hMenu, TPM_LEFTALIGN | TPM_RETURNCMD | TPM_LEFTBUTTON, pCursor.x, Cursor.y, 0, this->Handle, NULL);
if (iCommand != 0) {
/* stInvokeInfo 処理 */
}
DestroyMenu(hMenu);
pContMenu->Release();
}
ちなみにBorland C++ Builder 5 です
pIDLは、「マイコンピュータ / C: (VOLUME) / HOGEHOGE」
のようになっています
この関数を実行すると、メニューは表示されるのですが
メニューの表示項目が必ずマイコンピュータのものになってしまいます
しかし、そこで強引に HOGEHOGE のメニューで
「ショートカットの作成」を行うと、
「ここには作れません、デスクトップに(r」となり
そのできあがったショートカットは HOGEHOGE のものになります
hRes = pContMenu->InvokeCommand( &stInvokeInfo );
を実行する、stInvokeInfo で構造体にpIDLを入れる必要が無い事から
pContMenu には正しくpIDLが入ってるように思うのですが
これは、必ずしもそういうことじゃないのでしょうか?
kab-studio の Codian という所を参考にしました
具体的に渡しているpIDLは
// ファイルのIDリスト
HRESULT hRes;
wchar_t lpszDisplayName[MAX_PATH];
m_strFullPath = "C:\\HOGE\\PUNI";
StringToWideChar(m_strFullPath, lpszDisplayName, MAX_PATH);
hRes = Form1->m_pDTFolder->ParseDisplayName( NULL, NULL, lpszDisplayName, NULL, &m_pIDL2, NULL);
// マイコンピュータのIDリスト
SHGetSpecialFolderLocation(NULL, CSIDL_DESKTOP, &m_pIDL1);
これに対し
ttp://www.kab-studio.biz/Programing/Codian/ShellExtension/06.html のConcatItemIDをそのまま使って
pIDL = ConcatItemID(m_pIDL1, m_pIDL2)
のような形になっております
GetUIObjectに渡すItemIDListは、基本的にSingle-Levelでないとだめ。
Desktopをつけるのが余計なんでしょうか?
それともファイルのIDリストのm_pIDL2から末尾を取るという事でしょうか?
Desktopをつけなくても、
マイコンピュータからのフルIDLISTが入手できるみたいで
挙動は変わりませんでした
末尾だけをGetUIObjectOfに渡したら
フォルダの場合メニューが出るけど、正しく実行されない
(どうやらデスクトップフォルダ+ファイル名になってるみたい)
ドライブの場合は妙に寂しいメニューしか出ない
って感じで、かなり困ってます。。。
ITEMIDLIST* pIDL = ::ILCreateFromPathW(L"C:\\HOGE\\PUNI");
const ITEMIDLIST* pIDLSingleLevel = ::ILClone(::ILFindLastID(pIDL));
::ILRemoveLastID(pIDL));
IShellFolder* pDesktop;
IShellFolder* pFolder;
IContextMenu* pContextMenu;
::CoCreateInstance(CLSID_ShellDesktop, NULL, CLSCTX_INPROC, IID_IShellFolder, (void**)&pDesktop);
pDesktop->BindToObject(pIDL, NULL, IID_IShellFolder, (void**)&pFolder);
pDesktop->Release();
pFolder->GetUIObjectOf(hwnd, 1, &pIDLSingleLevel, IID_IContextMenu, NULL, (void**)&pContextMenu);
pFolder->Release();
なんか();
pContextMenu->Release();
::ILFree(pIDLSingleLevel);
::ILFree(pIDL);
大体こんな感じ。
GetUIObjectOfはデスクトップを使えばいいってわけじゃなかったのね
本当にありがとう、なんとかうまく表示されるようになりました
・・・これからIContextMenu2 との戦いっす、ふみゅー
テキストボックスとそれの名前(項目名)で100個近くに
コントロールを画面に貼り付ける予定なのですが
座標指定でなにかいい案はありませんでしょうか。
ちょっとずれたらすべて修正なんて気が狂いそうです。
>>744 その実装を考え直すことを勧める
リストビューを使うとか、他に方法はあるだろ?
>>744 リソースエディタを使わずに、CreateWindow()でセコセコと生成するとか。
>>746 多分それが正解だろうな
描画位置とかサイズとかをdefineしておけば変更も簡単だし
745が正解だよ。
クライアント側から「テキストボックスで」という指定があるという可能性も否定できないかもしれない
そんな仕様を呑むのがどうかしている。
EDIT*100(/2か?)は止めたほうがいいな。
リソースに対して優しくない。UIとしても。
それはそれとして、表計算ソフトからジェネレートできるようにすりゃいいだけな気もするが
>>744 リソーススクリプトを手動で修正するとか。
DialogBoxIndirectとかCreateDialogIndirectを使うとか
リソースエディタを外部から操作するプログラムを作れ。
リソースを外部から操作するプログラムならいくらでもあるが……。
一枚のダイアログに載せられるコントロールの数って上限無かったか?
昔、VBで自滅してた奴がいたがw
128個位でダイアログが出なくなったような。
Win32 は関係ないのかな?
あと、100個もコントロール載せるとダイアログが出てくるまで時間が掛かる、
ウィンドウの再描画にも時間が掛かるよ。
自分で表を書いておいて、指定のセルを編集時にテキストボックスを
セルのサイズで作って出すのが、綺麗だと思う。
Excel とかがやってる方法だけど…
ちと工数が掛かりすぎるかな?
NT系でもリソースは無限じゃないしね。
DHTMLダイアログ使えよ、エディットの100個や200個屁でもない
またバカが一人
世界の真ん中に立つ塔は楽園へ続いているという
そして、またバカが一人
761 :
デフォルトの名無しさん:04/10/20 08:26:31
>>761 とりあえず引数の確認とGetLastError()
>>761 ついでにResourceHackerとかで実行ファイルのリソース確認しとき。
念のため。
>>761 ∀・)っMAKEINTRESOURCE( MYBMP );
767 :
デフォルトの名無しさん:04/10/20 14:20:56
CDドライヴに空の状態から CD が挿入されたことを検知するための
メッセージというのはないのですか?
文字の大きさを変更する関数ってありますでそうか。
すみません。初歩的な質問で。
色はSetTextColorで変更できたのですが・・・。
あります。
うそです。ありません。
CreateFont(Indirect)の時にしか文字の大きさは選べない。
>>768 メモリデバイスコンテキストに書いて、ストレッチブリットするのじゃだめ?
>>772 書いてからStretchしたらギザギザになんね?
大きく描いてから縮小すればいいんだYO
SetStretchBltModeも忘れるなよ
>>767 WM_DEVICECHANGE
CD-ROMドライブのプロパティで、
自動挿入をオンにしておく必要があるが。
>>762 GetLastError()で取得したエラーコードをFormatMessage()で変換してみたところ、
「指定したリソース名がイメージファイルに見つかりません。」
と出ました。
でも「猫でも〜」や他所で見かける例だと、この手順で問題なく読み込んでくれるはずなのですが…。
ResourceHackerは敷居が少し高そうですので、もう少し慣れたら触ってみることにします。
レスありがとうございました。
>>764 MAKEINTRESOURCE( MYBMP )としてみましたら呆気なく表示されました。
実際はただキャストしてるだけのようですが、なぜこれで上手く行くのでしょうか…。
ちょっと考えてみます。
レスありがとうございました。
779 :
デフォルトの名無しさん:04/10/20 20:35:03
IEのファイルダウンロードのダイアログを同等のものを
表示させたいのですが、どのAPIを使えばよいのでしょうか?
「開く」「保存」「キャンセル」のボタンがあるやつです。
また、上書き確認のダイアログの表示方法もありますか?
ハードウェアの安全な取り外し を行うのはAPIでできますか?
できるとしたらどうすれば。
>>779 GetOpenFileNameとかGetSaveFileNameとかかな。
しかるべきフラグを渡せば、上書き確認とかもできる。
>>778 リソースの識別子は "" で囲った文字列形式と
数値形式の2通りがあるんです。
>>778さんは数値形式でリソースを作成したのでは?
LoadImage 等の関数は文字列形式を必要とするので、
MAKEINTRESOURCEマクロでキャストする必要があります。
OSはたぶん、渡された文字列ポインタの値をみて、
もし上位ワードが0x0000ならば、
それは文字列ではなく数値をキャストしたものである、
と判断しているのでしょう。
>>780 APIを徹底的に調べればわかるんでないの?
>>780 やったことないので知らないけど
SetupDi〜のAPI調べるといいかも
SetupDiRemoveDeviceとかなんか怪しげ
コモンコントロールのアップダウンで
下限の次を上限に、上限まで行ったら下限に行くように
ループさせたいのですが、特別なオプションってありませんでしょうか
>>785 MSDNのUp-Down Control Stylesをよく見ろ。
ドロップダウン型のコンボボックスで
リスト部分のウィンドウハンドルを取得する方法はないでしょうか。
GetComboBoxInfo とかだとNULLが返って来ちゃうんですよね。
お昼過ぎからずーっと探してるのですが……。
どなたかご存じでしたらご教授ください。
COMBOBOXINFOを初期化してないんじゃないの?
特にcbSize
>>788 cbSizeを設定しておく必要があったのですか!
わぁ、動いた。動きましたorz
……うわー、俺の午後ってー!
ありがとうございました(深々礼
DLLの関数の呼び出し規約がcdeclかstdcallか、を、
ヘッダファイルや、ソースファイルが、無くても知る方法ありますか?
たとえばdumpbin.exeなどでDLLをダンプしたらわかりますでしょうか??
>>791 見当がつくこともある。
#と答えておこう。
>>790 プラットフォームSDK GetComboBoxInfo関数 のページは見たのですが……
後は、COMBOBOXINFO構造体のページとかは。
まだ始めたばかりでセオリーとか分かってなくて、申し訳なかったです。
俺のうぐいすが化け化けなのはなぜですか?(;_;)
>>793 >Pointer to a COMBOBOXINFO structure that receives the information.
>Note that you must set COMBOBOXINFO.cbSize to sizeof(COMBOBOXINFO) before calling this function.
こう書いてなかった?
>>792 791です、dumpbin /exports したけど、さっぱり見当がつきません。
どのあたりが見分けるポイントなんでしょうか。
(なかばアキラメモードです....)
スタックを覗いてみるとか
>>798 791です。
あ、なるほどね。スタックの積み順を調べたらいいんだぁ。
800 :
779:04/10/21 23:05:14
ファイル保存のダイアログを出さずに、
ファイルの上書き確認ダイアログを表示させたいのです。
あとダウンロードの確認ダイアログはどうするのでしょうか?
次の場所からファイルのダウンロードするように選択しました。
「このファイルを上記の場所から開く」
「このファイルをディスクに保存する」というダイアログのことです。
簡易ブラウザを作っていてなにかダウンロードするときに
このダイアログを出そうと思っています。
>>796 > hwndCombo コンボボックスのハンドルを渡します。
> pcbi 情報を受け取るCOMBOBOXINFO構造体へのポインタを指定します。
なるほど、MSDN Japanの方だけじゃ情報不足なんですか。
わかりました、今度からはそっちも見に行くようにします。
どうもありがとうございましたです(礼
>>800 前者は MessageBox( hWnd, "上書きするよ?", "確認", MB_OKCANCEL | MB_ICONWARNING ); でええやろ。
修飾された関数名の前に"_"、後ろに"@"がつくとstdcallなのだと思うけれど
これはextern "C"限定の命名規則なのかしらん
そこでハンド逆アセンブルですよ。
>>802 UIが統一されていないのであまり気が進まないけど。
用意されててもいいような気がするんだけどないのかなー?
>>800 OPENFILENAME
OFN_OVERWRITEPROMPT
↑質問文をよく読まないせっかち君
808 :
デフォルトの名無しさん:04/10/22 16:07:17
CGIの出力をプログラムで取得したいと思い、InternetReadFileを
使用したのですが、出力ではなくCGIのソースそのものが取得されてしまいました。
CGIの出力を取得するのは無理なんでしょうか?
CGI側のサーバ設定がおかしい。
もしくは何か勘違いしている。
>>808 ブラウザで開いてみそ。
あと、ココとかのURLを入れてみそ。
それでもCGIのソースが出るようだったら、大発明。
脆弱性発見でつか?
>>803 extern "C"をつけていなくても、stdcall関数なら当然、stdcallの修飾(前に"_"、後ろに"@"そしてプッシュするサイズ)は付く。
ただし、C++の修飾を先にしたものにstdcallの修飾がなされる。
誰か回答をくれー!
ビットマップのパスだけが分かっているとき、画像を表示させるにはどうすればいいですか?
>>817 LoadImage()では表示は出来ません。
ShellExecuteEx
>>819 ありがとうございます。確かに表示出来ました。
WritePrivateProfileStringW で設定を保存してもUNICODEで保存されないのって仕様ですか?
何のためのワイド文字版APIなの??
>>821 UNICODEにしかない文字を書き込んだらどうなる?
A2Wを呼び出す手間を軽減するためのW版だろ
>799
積み順じゃなくて、クリアの方法を見ること。
積み順は cdecl も stdcall の同じ。
>>822 「????」とかに変換される。
唯一のメリットといえば、UNICODE使ったファイル名でもアクセス可能だということだけ…。
でも、*.regファイルなんかは、iniファイルと同じフォーマットでUTF16LEなのに、regedit.exeはAPI使わずに
アクセスしてんのかな?
>>825 Unicode版のAPIで.iniファイルに書きこんだら
Unicodeで保存されるべき…。
なるほど、そういう発想はなかったな。
まあ、いろんなアプリがひとつの.iniファイルに
アクセスする可能性があるし、過去との互換性も考えると
ANSIで保存されるのは仕様なんでしょう。
.regファイルの件は何が疑問なのかよく分からない。
>>825 Dependency Walkerで調べたところ、GetPrivateProfileStringW()を直接呼び出すことはしてなさそうだ。
オーナードローボタンを複数画面に表示し、
それぞれ別のビットマップを貼り付ける方法を教えてください。
>>826 .regを読むのに*Profile* APIを使ってるはずだと思ってるんでしょ。
830 :
デフォルトの名無しさん:04/10/23 23:48:52
みんなやってそう、かつ簡単そうで難しい、(完璧ではない)
文字処理
>>821 なに? WritePrivateProfileStringW 使って
引数にUNICODEの文字列を指定して
書き込んだらSJISに変換されて書き込まれるの?
まさか、引数にSJISの文字列を指定して書き込んでも
UNICODEに変換されないとか言っているわけじゃないよね?
( ゚д゚)ポカーン
16ビット時代の遺物なんだからUnicode対応なんかしてないよ。
レジストリ使うか自前でやれ
同じファイルに読み書きするのにAPIのインターフェイスがAかWかで文字コードが変わったら使い物にならんやん
WM_ACTIVE site:microsoft.comでググっても何も見つからないのですがこれはWM_ACTIVEは使うなという事ですか?
>>833 レジストリも結局は一緒じゃないか?
REG_SZ型は全てUnicodeで保存されてるはず。
ユーザが意識しなくてもいいことじゃないの?
WM_ACTIVATE
噛み合ってません
要するに
*Private*
AでもWでもファイルはSJIS
レジストリ
AでもWでもファイルはUnicode
結論
AでもWでも同じファイルを使えるように設定された仕様
ということでFA?
プロパティページについてなんですが、CreatePropertySheetPageが失敗したとき
PROPSHEETPAGE::pfnCallbackで指定したコールバックは呼ばれるのでしょうか?
lParamにページで使うメモリを持たせ、コールバックのPSPCB_RELEASEで解放するようにしています。
>>841 呼び出し元で確保したら呼び出し元で開放するのが基本じゃないか?
>>842 DLLからアプリ側にHPROPSHEETPAGEを渡すので
解放するタイミングがコールバックしかないのです。
GetCharWidth32でU+10000以降の文字幅を取得できないのは仕様ですか?
846 :
デフォルトの名無しさん:04/10/24 22:53:25
FindFirstFile とかで、ディレクトリツリーを辿るプログラムで、ディレクトリのシンボリックリンクを
辿らせないようにするにはどうすればいいのか教えてください偉い人。
CreateWindowでEDIT(テキストエディタ)を作成し
入力を整数又は小数点にしたいのですが
整数はES_NUMBERで実現できました。
しかしながら整数だけの入力にしてしまいますと
当然ながら少数点の入力ができません。
整数と少数に入力を制限できる方法ってありますでしょうか。
>>846 興味本位で訊くんだけど、NTFSはディレクトリのシンボリックリンクを作れるの?
849 :
デフォルトの名無しさん:04/10/25 00:34:36
>>848 呼称は違うけど、ほぼ同等なものが作れる。
\\相手のPC\共有フォルダ名
みたいなパスをFindFirstFileで検索掛けると
"ファイルが見つかりません"というエラーが返却されるんですけど、
本当にファイルがないか、それとも、ネットワーク共有名かを判断するAPI
ってないですかね?
851 :
デフォルトの名無しさん:04/10/25 01:03:00
>>850 少なくとも、
\\127.0.0.1\SharedFolder\*
とかだと検索できるけど。
>>852 PathIsUNCですかね?
なんかいけそうです。有難う御座います。
うんこネタ禁止
スピンコントロールの内容を変数にゲットしたいのですが
GetWindowTextやGetDlgItemTextでは取得できませんでした。
スピンコントロールをゲットできる関数ってありますでしょうか・・・。m(_ _)m
MFCのCSpinButtonCtrl::GetPos()のソースを見てみるとか。
859 :
デフォルトの名無しさん:04/10/25 10:59:32
MACアドレスを取りたくてGetAdaptersInfoを使ったのですが、
IEEE1394のアドレスだけ取れませんでした。
そういうものなのでしょうか。
getmac.exeとipconfig.exeの出力結果も違うし、ググっても
情報が全然ないしで困りました。
>856
ちなみにスピンコントロールは、アップダウンコントロールと
エディットコントロールの組の事。
856 が GetWindowText で得ようとしたのは
アップダウンコントロールの方のテキストだろうな。
862 :
デフォルトの名無しさん:04/10/25 15:39:42
Windowsコントロールの標準のポップアップメニューにメニュー追加はどうやりますか?
863 :
デフォルトの名無しさん:04/10/25 16:13:50
GetSystemTime()で世界協定時刻(UTC)を取得しているのですが
このAPIで取得出来る時刻はどの程度信頼性のあるものなのでしょうか?
ユーザが簡単に調整など出来ないようになっているものなのでしょうか?
>>863 コントロールパネルの「日付と時刻」を開いてごらん。
865 :
デフォルトの名無しさん:04/10/25 16:30:37
>>864 日付と時刻のプロパティが出ました。
これに何かあるのでしょうか?
>>863 GetSystemTimeは世界協定時刻(UTC)を取得する関数ではありません。
システム日時をUTCに換算して取得する関数です。
信頼性は、PCの時刻に依存します。
ユーザが、PCの時刻を操作できる権限を持っていれば、変更される可能性があります。
867 :
863:04/10/25 16:42:00
>>866 という事は殆ど当てにならないという事ですね…
厳密に取得するには、(UTC)が取得できる
信頼性のあるサーバから取ってくるしかないという事ですか。
>>867 Windows NT 系だったら、タイムサーバーにアクセスして
時刻を正確に調整してくれるように設定できるよ。
まあ、それもユーザー(あるいは管理者)に任されているわけだけど。
企業内の大きなLAN であれば、タイムサーバー置いてるでしょう普通。
869 :
デフォルトの名無しさん:04/10/25 19:48:28
>>869 #defineIDB_BUTTON1100;
このセミコロンを削除しましょう。
windowsプログラミングでスクロールバーを扱う関数にSetScrollRange(hwnd,iBar,iMin,iMax,bredraw)という説明があったのですが
第2引数のiBarにはSB_VERTかSB_HORZを指定するとだけ書いてあり、これらがどういう意味を持つのかさっぱりわかりません。
この二つは何が違うのでしょうか?
>>871 SDK のドキュメント読めばわかるから。
MFCのデータしか出ないのですが。。
ms-help://MS.PSDK.1033/shellcc/platform/commctls/scrollbars/scrollbarreference/scrollbarfunctions/setscrollrange.htm
877 :
デフォルトの名無しさん:04/10/25 20:50:35
>>877 違う。
あと日本語版のヘルプは肝心な記述が抜けてたりするんで、雰囲気だけ掴むだけにしとけ。
880 :
871:04/10/25 21:04:12
英語版でようやくたどりつけました。。
MSDNは英語版のほうがよろしいんですかね〜?
なかなかAPIを検索しようにもMFCばっかりで。。
つーか、縦か横かって話だけだろ?
MFCも結局はAPI呼んでるから見て損はないと思う。
それに
>>871は引数から言ってMFCじゃないのか?
あとAPIのSetScrollRangeは使うなっていうことだぞ
883 :
デフォルトの名無しさん:04/10/25 21:55:51
>>882 プログラミングwindowsという本に載っていた関数なのでAPIだと思うのですが。。MFCなのですかね。。??
MFCで引数がhwndってあまり無いわけだが。
SB_VERT SB_HORZでイメージわかないようだと英語は厳しいだろ。
自分のウインドウがアクティブになっていなくても、
あるキー(たとえばF1等)が押されたときにそれを感知するにはどうしたらいいですか?
キーロガーでも作りたいのか?
ほっときー
監視員をつける
グローバルフックを使う。DLLを作成しる
>>888 Hot keyってコモンコントロールだったんですか……。
これを使ってみます。
コモンコントロールのホットキーは違うと思う。
力業でGetAsyncKeyStateとか
フックだと監視できても変更できないしなぁ・・・。見てるだけ。orz
デスクトップのショートカットキーと同じようなもので良いのなら、
WM_HOTKEYを使う。
フックなら変更も可能。
>>896 WH_GETMESSAGE の場合だけ?
Cygwinのフォルダが消せず、フルコントロールできるのがシステムになっていたので
与えられたフォルダのパス以下を全て削除するようなプログラム書きたいんですが
システム権限で動くようにするにはどうしたらいいんでしょ?
以下のキーに実行ファイル名を入れてマシンを再起動。SYSTEM権限で実行されるので注意。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
もしくは、
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce
>>899 ありがとうございます、さっそくコード書いて試してみます。
901 :
でき:04/10/26 08:51:30
すいませんが、どなたか、VB.netにてwin2000、winXPの端末がコンピュータロック中か取得する方法をご存知でしょうか?
(APIを利用してできるのではと思いこちらに質問しました。)
902 :
デフォルトの名無しさん:04/10/26 09:50:31
いま動いてるプロセスを管理するような関数ってある?
いくらリファレンスとか WWW の検索かましても
これといったのがないんだけど
とくに各プロセスのファイルアクセスの情報を見たいんだけど
ない
904 :
902:04/10/26 10:40:42
例えばタスクマネージャに使ってる関数てどんなの?
タスクマネージャにファイルアクセスのログなんてあったっけ
906 :
デフォルトの名無しさん:04/10/26 10:46:09
>>905 いやファイルアクセスのことはとりあえず置いといて
最終的に本当にしたいのはファイルとプロセスの関係なんだけどね
>>902 NT系ならAPIでファイルハンドルの保持状況を見れないことはないが、フックしたほうが簡単。
API フックのこと?
メッセージフックじゃファイルアクセスを監視できないと思うけど。
漏れも linux の fuser みたいなの欲しいけど、簡単な方法はないんじゃない?
かの sysinternals の FileMon でも VxD 使ってフックかけてるし。
910 :
902:04/10/26 11:02:40
あそうそう
まさに filemon みたいなことがしたいわけよ
あれ,どうやってんの?
詳しく詳細きぼん
912 :
デフォルトの名無しさん:04/10/26 11:04:49
>>911 つーかその動作原理を知りたいのさ
そのサイトに何か書いてあるん?
>>901 「コンピュータロック中」ってどういう状態?
>>912 見に行きゃいいじゃん。そもそも>909にVxD使ってるって書いてあるし。
”How FileMon Works”以下に必要な情報へのリンク等があるみたいです。
Windows "handle table" あたりでググルと別方向からの情報も見つかると思います。
簡単だけれども酷いやり方としては、先方のプロセスにコードをinjectして、
0x0000〜0xFFFFあたりを NtQueryObject で調べてみるとか。
>そのサイトに何か書いてあるん?
書いてはあるけど、IFSMGR は SDK が高いので簡単には使えないですね。
しかし酷い態度。相手にするんじゃなかった・・・
ちょっとでも礼が言えないヤツなんだな
918 :
でき:04/10/26 11:57:34
>>913 「コンピュータロック中」とは「Alt」+「Ctrl」+「Del」をおしてするコンピュータロックのことです。
OpenInputDesktopでwinlogonデスクトップがアクティブかどうか調べる
丁寧な文体でない質問には答えない。これが後悔しないコツ。
>>920 文体が丁寧なだけで中身が無いよりも、
必要な内容が全て含まれている崩れた文体の方が好ましい。
そもそもこっちが勝手にレスしてるんだから
相手の態度がどうであれ関係ないか、
と考え直しますた。
理解しようとする気がない奴には答えない。これが後悔しないコツ。
皆さん、教えてもらったら「ありがとう」といいましょう。
善意で答えてくださっているのですから、横柄な質問はやめましょう。
>>921 ここに居るだけで傷ついてる人はいるけど
そりゃ問題外
>>896 RegisterHotKey()で登録したホットキーを無効にするにはどうすればいいんですか?
ん?
ヘルプ見たらRegisterHotKey()のすぐ横にあるだろ
初心者にまず教えるべきことはMSDNの見方だと思うんだよね。
礼儀だろ
カラテカを100回クリアできるまでは初心者
……見落としていましたOrz
タブを使ったチャットソフト作ろうとしているんですけど、タブ
を切り替えるときに表示内容を変更する場合、表示内容をロード
して(文字位置や、フォントサイズなど)表示を切り替えるのと、
タブごとに異なるビューが存在し、タブを押すことによって表示
が切り替わるのが思いつくんですが、後者のほうは簡単にできる
でしょうか?前者はあまりにも保持しておく情報が多そうなんで
なんかスマートじゃない感じがします。
すいません。教えてください。
CreateWindowで作ったウインドウを親ウインドウとして、CreateDialogで
ウインドウにダイアログを貼り付けています。
このダイアログ内のボタンに”標準のボタン”を設定し、見た目は外枠?の
ついた標準のボタンになっているのですが、エンターを押しても実行されません。
マウスでクリックすれば実行できます。
フォーカスとかそういう問題なのでしょうか?
>>937 私ならダイアログをはっつけるね。
>>938 そういう問題でしょう。恐らくは、はっついたダイアログにフォーカスが来てないのかと。
>>938 エンターの押し下げはモーダルダイアログ用のダイアログプロシージャによって実行されます。
モードレスダイアログでは機能しません。
>>940 つまり、ウインドウにモードレスダイアログを貼る方法の場合は、
通常のエンターでのボタン押下はつかえないということでしょうか?
もしどうしても実行したいのであれば、自分でキーイベントを拾う??
IsDialogMessageをメッセージループに組み込む
>>942 ありがとうございます。
今は環境がないので後日試してみます。
SHQueryValueExとRegQueryValueExの違いはなんでしょうか?
MSDN見たところどちらも違いがないように思えるのですが。
Photoshopのレイヤー情報表示部分のような、ペイントソフトに良くある
下記のコントロールはどの様に作るのでしょうか
_______________________
|★ ◎ レイヤー1. |
|★ ○ .////////. | ←フォーカス時の反転は文字の部分(=レイヤーxx)のみ
|☆ ◎ レイヤー3. |
| | ★や◎はアイコンで、クリックすると状態が☆や○に変わる
| |
 ̄ ̄ ̄ ̄ ̄ ̄ ̄
オーナードローかカスタムドローのリストビューかなとは思うのですが、
反転部分が文字部分だけというのが引っかかります。
VCLに似たような物があるとも聞いたので、もしかしたら何か
既成のコモンコントロールがあるのでしょうか?
spy等で調べてみたいのですが、自分ではPhotoshopを持って無く、
また学校のPCにexeを入れると非道く怒られるもので…ひとつよろしくお願いします
Photoshopは確かすべて自前描画のコントロールだったと思うのですが。
Macと共通のインターフェイスですし。
>>945 >spy等で調べてみたいのですが、自分ではPhotoshopを持って無く、
>また学校のPCにexeを入れると非道く怒られるもので…ひとつよろしくお願いします
何の学校かにもよるだろうけど、勝手にインストールするんじゃなくて、
目的を伝えて必要性を説明すれば怒られることはないと思われます。
もちろん断られるかも知れませんが。
もしプログラミング技術等を教える学校でありながらそれを断られるようなら、
選んだ学校を間違ったと思ってあきらめよう。
>>946 ぜ、全部自前ですかぁ…。なるほどマルチプラットフォーム。
あれと同じ物を作るのは…気が遠くなりそうですが覚悟を決めることにします。
>>947 あはは、Photoshop入りのPCが他学部の端末な事もあって、
怖じ気づいていました。確かに勉強事に奥手になっちゃ駄目ですね。
お二人ともレスありがとうございました。
>>916 > >そのサイトに何か書いてあるん?
大阪っぽい
チェックボックスの背景色を灰色から変更したいのですが、無理でしょうか。
SetBkColorでは無理でした。。
出来ます。
WM_GETCTLCOLOR*かな?
最近、興味のある質問がめっきり減った。
ちと古いホトショップだけど
PSFloatCとかPSViewCとか独自コントロールかな?
WM_USER+αが飛び交っておりました
>>952 WM_GETCTLCOLOR*は存在しませんでしたが、ここら辺調べ見ます。
ありがとうございまいました。
スマソ ちょっと質問でつ
VB6で長時間稼動(多分100日とか連続でうごきっぱ)するシステムに
時間を計る部分があって、そこでTimegetTimeのAPIを使用しています。
しかし、ここで、TimegetTimeは連続である一定以上動かないのは周知の事実なのですが、このAPIが返す値が32Bit(VBのLong)を超えた場合、どのような動きになるのでしょうか?
テストするのが一番かとも思うのですが、そこまで時間に余裕がありません。
よろしくお願いいたします。
0
おぉ、ありがとうございます〜
まさかLongの最小値から始まる事は無いと思ってたんですが
これで対策が取れそうです
ありがとうございました〜