Win32API【2】
レス数が950を超えています。1000を超えると書き込みができなくなります。
0001デフォルトの名無しさん
NGNGやさしいお兄さんたちが答えてくれるかも。
ただし、質問する前にまずMSDN読め。
MSDN Online
http://www.asia.microsoft.com/japan/developer/
前スレ
http://pc.2ch.net/test/read.cgi/tech/991576947/
0002デフォルトの名無しさん
NGNG0003デフォルトの名無しさん
NGNG0004デフォルトの名無しさん
NGNG0005デフォルトの名無しさん
NGNG0006デフォルトの名無しさん
NGNG0007デフォルトの名無しさん
NGNG0008デフォルトの名無しさん
NGNG0009デフォルトの名無しさん
NGNG0010デフォルトの名無しさん
NGNG( ∧_∧
⊂ ´⌒つ゚ー゚)つ
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
ノビノビ〜
( ∧_∧
⊂ ´⌒⌒⌒⌒⌒つ゚ー゚)つ
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
ノビノビ〜ン
( ∧_∧
⊂ ´⌒⌒⌒⌒⌒⌒⌒⌒⌒⌒⌒# ゚ー゚)
 ̄ ̄ ̄ ̄ ̄∪ ̄∪ ̄ ̄ ̄ ̄ ̄ ̄∪ ̄∪ ̄ ̄
( ∧_∧ ポッ ( ∧_∧ ポッ
⊂ ´⌒⌒づ゚◇゚)づ ⊂ ´⌒⌒づ゚◇゚)づ
 ̄ ̄ ̄ ̄ ̄彡 ̄~彡 ̄ ̄ ̄ ̄ ̄ ̄ ̄彡 ̄~彡 ̄
0011デフォルトの名無しさん
NGNG0012デフォルトの名無しさん
NGNG0013デフォルトの名無しさん
NGNG0014デフォルトの名無しさん
NGNG0015デフォルトの名無しさん
NGNG0016デフォルトの名無しさん
NGNG0017デフォルトの名無しさん
NGNG中身の文字列の配列なんて宣言とか設定とかできない、よな?
0018デフォルトの名無しさん
NGNG0019デフォルトの名無しさん
NGNGできるよ。
0020デフォルトの名無しさん
NGNGやっぱりメニュー以外にフォームとか、メッセージ受け取るウインドウって必要ですか。
0021デフォルトの名無しさん
NGNG0022デフォルトの名無しさん
NGNG>オーナードローでポップアップメニューだけを表示させたいんだけど、
この文章の意味が分からんが。オーナードローって、すでにウィンドウが
あるんでは?
0023デフォルトの名無しさん
NGNG0024デフォルトの名無しさん
NGNGモーダルウィンドウにするにはどうすれば良いのでしょう?
0025デフォルトの名無しさん
NGNGこれといった方法がないです。
自分で、
親ウィンドウを無効化して、メッセージループを走らせて、
Tabキーとかを処理します。Tabキーとかの処理は
IsDialogMessage に渡せばやってくれたような気がします。
0026デフォルトの名無しさん
NGNG0027デフォルトの名無しさん
NGNGSetClassLong
0028デフォルトの名無しさん
NGNGどもです
0029デフォルトの名無しさん
NGNGとした場合、すでにブラウザが立ち上がってるとき、そのブラウザが再利用
されますが、それを常に新しいウインドウで表示するにはどうすればいいんでしょうか?
0030デフォルトの名無しさん
NGNG0032デフォルトの名無しさん
NGNG>>30
確かにiexplore.exeのパラメータとしてURLを渡した場合ちゃんと表示されますが、
IEのプロセスが複数になってしまってシステムにやさしくありません。
今考えているのは、IEのウインドウがすでにある場合WM_COMMANDを送って
ウインドウを作成してからShellExecute()なんですけど、なんだか泥臭いです。
0033デフォルトの名無しさん
NGNG0034デフォルトの名無しさん
NGNGその田舎の珍走団みたいな当て字やめろ厨房。
0035デフォルトの名無しさん
NGNG変換したときの第一候補なんですけど。。。
ちゃんとおなすのが面倒だったもんんで。
0036デフォルトの名無しさん
NGNGieのウィンドウの新規作成ロジックがいまいちわからないんだけど。
0037デフォルトの名無しさん
NGNGただし
ttp://nt.sakura.ne.jp/~miwaki/progtips/shell/openwww.shtml
本当にそういう機能が必要なのかをじっくり考えないといけません。
システムに,ユーザーの意図に反した挙動をさせるような作品は
私はちょっと遠慮したいです。。。
0039デフォルトの名無しさん
NGNGDestroyWindow(hWnd);
break;
とかいうミスは誰しも通る道だよな?
0040デフォルトの名無しさん
NGNG誤解するオレはどきゅそですか?
0041デフォルトの名無しさん
NGNGIEの設定で、
「ショートカットを起動するたびにウィンドウを再利用する」
のチェックをはずすと、ShellExecute()で新規窓が開くようになるハズ。
ここに関連するレジストリを探していじってみるというのはどうだろう。
専用のAPIがあるかどうかは、寡聞にして聞かない。
0042デフォルトの名無しさん
NGNG0043デフォルトの名無しさん
NGNG0044デフォルトの名無しさん
NGNG気づかなかったよ。アブナイアブナイ
0045デフォルトの名無しさん
NGNGまじかョ、まぢでよぉー!
バグってると思ってたんだよ!
描画とかやばくてまじやばかと思ったよ
いろいろ調べたんだコラ
でよぉ、デバッガのフックも調子おかしくて一回デバッグ
試すとフックで固まっちまうからよ、しょうがねーから
自作のツールが役に立った
調べたらよ、どーやら同じボタンやら貼り付けたウィンドウが
2重に重なってるらしかったんだYO
でよ、WM_CREATEの前後みたらYO
case WM_SIZE:
....くそっ
//break;
case WM_CREATE:
........
あとはしらね)
だとYO、2回クリエイトされてるっつーの!
うぅーーー至上まれなくらいの死にたい瞬間だったっつーの!
てめーら、、聞いてるんですか?
0046デフォルトの名無しさん
NGNG4〜5時間は費やしたっつーの!
なめんなっつーの!
0047デフォルトの名無しさん
NGNG愚痴と電波はマ板で垂れ流せ。
0048デフォルトの名無しさん
NGNG0049デフォルトの名無しさん
NGNGHKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\BrowseNewProcess
0050デフォルトの名無しさん
NGNGまだ使ってないはずのペンとか
フォントが起動時に確保されたりするのは
どう考えればいいの?
0051デフォルトの名無しさん
NGNG0052デフォルトの名無しさん
NGNGいろいろと複雑だった。
デバッグは終わりました。
さっきは、つまりは、ペンとかを使っている関数が
呼ばれていないのに、確保だけされていることが気になってたました
プロセス見てると、起動時にはまだ関数が呼ばれてないのになぜか確保されている
つー表示があった。
0053デフォルトの名無しさん
NGNG宣言だけしてあって実際には作られてないhDlgとかに
大して、(安全のためだったのに)
if(IsWindow(hDlg))DestroyWindow(hDlg);
if(IsWin...
if(is
こーやってたのがまずかった。でもなんで、こーすると、
起動時のときさえも次々といろんなエラーが出るのかわかんないYO
素直には、起動時には関係ないじゃん、といいたい。
いっぱいエラーでて参ったよ
0054デフォルトの名無しさん
NGNGメモリーデバッガーのエラーのところに、
これ系のエラーが表示されます。コンパイラが親切に
やってくれたとは思えないし、内部で呼んでるんでしょうか。
createfont使ってフォントを変更するときとか
hFontとfFontOldに分けてやるじゃないですか、あそこらへん
に使えそうですよね?常套手段ですか?
0055デフォルトの名無しさん
NGNG0056デフォルトの名無しさん
NGNG檄しく同意。
関数の頭にMyつけちゃうとか。。(ださ)
0057デフォルトの名無しさん
NGNG0058デフォルトの名無しさん
NGNG0059デフォルトの名無しさん
NGNGMyつけるとか悩むのはだいたいCのプログラムじゃないかね?
0060デフォルトの名無しさん
NGNG単に C++ 使えば良いだけだと思うが。設計を OO でやるとか MFC 使うとか
いう話ではなく、単に namespace が使える better C として C++ を使う。
0061デフォルトの名無しさん
NGNG勝手に GetObjectA とかに変えられて鬱。
0062デフォルトの名無しさん
NGNGAPI の命名規則に合わせるのやめちまえ。
create_font とかいう名前にすれば絶対 API とダブらんぞ。
0063デフォルトの名無しさん
NGNGwhile (GetMessage(&msg, NULL, 0, 0)){
if( (&msg)->hwnd==hEditEntry &&
(&msg)->message==WM_KEYDOWN &&
(int)((&msg)->wParam)==VK_RETURN)
(&msg)->wParam=0L;
TranslateMessage(&msg);
DispatchMessage(&msg);
}
これがホントのプレ・トランスレート・メッセージだ
・・・MFC買ってください。
0064デフォルトの名無しさん
NGNGからいいはずなんだけど、PathFindFileNameなどの
shlwapi.lib(.h)関数軍が使えません。
関数が未解決だそうです。対策きぼんぬ
0065デフォルトの名無しさん
NGNGリターンキー入力で音が出るのを
自己流PreTranslateでごりおししました。
僕のヘルプにはpretranslateなんてのはなかったYO
0066デフォルトの名無しさん
NGNGヘッダはパス通すっていうかインクルードしてます
0067デフォルトの名無しさん
NGNG0068デフォルトの名無しさん
NGNG0069デフォルトの名無しさん
NGNGlibは隣家にちゃんと渡してる?
0070デフォルトの名無しさん
NGNGプロセスが持ってるハンドル数は
どのAPIでどうやって取得すればいいですか?
0071デフォルトの名無しさん
NGNGどっちだ?
0072デフォルトの名無しさん
NGNG0073デフォルトの名無しさん
NGNGパフォーマンスカウンタのどれかに入ってる。
とりあえず、パフォーマンスモニタをいじって、感覚をつかめ。
0074デフォルトの名無しさん
NGNG標準のコンフィグにまかせてる
からどーなってるのかな、
bcc32 -imyinclude (-tWとかはこの際略すけど)
しか指定しなくて、あとはbcc32.cfgの
に、
-Lxxxbcc55/lib
-Lxxxbcc55/lib/PSDK
なんだけどなぁ>>69
0075デフォルトの名無しさん
NGNGその、どれをつかったらいいのかが、さっぱりわかりません
0076デフォルトの名無しさん
NGNG0077デフォルトの名無しさん
NGNGわかればいいのですが、列挙しないとだめですか?
0078デフォルトの名無しさん
NGNG自プロセスならGetPerformanceInfoでとれるだろ。
0079デフォルトの名無しさん
NGNGありがとうございました。
英語のMSDNみたらありました。
0080sage
NGNGサブクラス化を利用すればいいのでしょうか?
0081デフォルトの名無しさん
NGNGどうしてもお手上げなので意見なり対処を教えていただきたい
のですが、ヘッダファイルcommctrl.hをgrepすると
ちゃんとINITCOMMONCONTROLSEXや、関数InitCommonControlsEx
が宣言されているのですが、プログラムに用いると未定義のシンボル
や、宣言のない関数、と言われます。もちろんcommctrl.hはインクルード
ぢています。
フリーのbcc++でコンパイルしていて、Win98を使用しています。
定石の、
#define _WIN32_WINNT 0x400
#define WINVER 0x400
#define _WIN32_IE 0
#define STRICT
も加えてあります。お心あたりのあるかた、教えていただけないでしょうか。
0082デフォルトの名無しさん
NGNG#if (_WIN32_IE >= 0x0300)
typedef struct tagINITCOMMONCONTROLSEX {
DWORD dwSize; // size of this structure
DWORD dwICC; // flags indicating which classes to be initialized
} INITCOMMONCONTROLSEX, *LPINITCOMMONCONTROLSEX;
(中略)
WINCOMMCTRLAPI BOOL WINAPI InitCommonControlsEx(LPINITCOMMONCONTROLSEX);
#endif // _WIN32_IE >= 0x0300
0083デフォルトの名無しさん
NGNG関係しているようで、#define _WIN32_IE 0を、
0x0501に変更したらコンパイルだけは通りました。
不慣れなころにどこかで見てそのまま使っていたのが
悪かったみたいです。0じゃだめですよね(笑)
ありがとうございました。
0084デフォルトの名無しさん
NGNGcase WM_SIZE:
MoveWindow(hEdit, x, y, height, width,TRUE);
SendMessage(hTool, WM_SIZE, wP, lP);
と書いてウィンドウサイズを諸々変えてみると
エディットコントロール、ツールバーがチカチカしてしまうんですが、
もっと良い処理の仕方がありましたら教えて頂きたいですのだ。
0085デフォルトの名無しさん
NGNG0086デフォルトの名無しさん
NGNGすでにスタンバイ状態ではない気がするが。
ハード的な仕掛けを用意すべし。
0087デフォルトの名無しさん
NGNGスタンバイ中はプログラムが停止してますから、APIを呼ぶことは出来ません。
0088デフォルトの名無しさん
NGNG起動中にタイマーをセットできますよね。タイマーセットのAPIはないのかしら?
0089デフォルトの名無しさん
NGNGだから、タイマーで起きあがってくるならそれはスタンバイ状態じゃない
っつーの。
0090デフォルトの名無しさん
NGNGどーやってつくりんだ?
LIBCリンクしなきゃいいのか?
あと、memcpyとかつかいたいぞゴルァ
0091デフォルトの名無しさん
NGNGスタートアップルーチンがあるから、それだけじゃlibc完全除外には
ならないけどね。リンカオプションでスタートアップシンボルに
自分のmainを指定すれば行ける。
が、もちろんスタートアップルーチンが無くなるのでlibc関係ほぼ
全滅。memcpy()が使いたいなら自作関数作れ。もしくはntdll.dll
辺りにあるRtlMemoryCopy(だったかな)使うとか。
0092デフォルトの名無しさん
NGNG#pragma intrinsic( memcpy )
vc限定で。
#まぁ、ソースから引っ張って俺様LIBC構築、
#という手もあるが。
009391
NGNG「ほぼ」じゃないや。全滅だね。
RtlMemoryCopy()なんちゅうのも無かった、というかmemcpy()系は
kernel32.dllにもntdll.dllにも無いのか。
0094デフォルトの名無しさん
NGNGタスクスケジューラーはどうやってんだ?
0095親切な人
NGNGヤフーオークションで、幻の人気商品、発見!!!
今は無き「コピーガードキャンセラー」↓
http://page2.auctions.yahoo.co.jp/jp/auction/b18505597
ヤフーオークション内では、現在、このオークション
の話題で、持ちきりです。
0096デフォルトの名無しさん
NGNG0097デフォルトの名無しさん
NGNGRtlMoveMemory()
0098デフォルトの名無しさん
NGNG調べてみたらこんなのが見つかったけど、これがそーなのかな?
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/hardware/power_8j1w.asp
009998
NGNGhttp://msdn.microsoft.com/library/en-us/hardware/power_0bg3.asp
0100 ̄
NGNGおお。ありがとうございます。OnNow
waitable timer objectのCreateWaitableTimer というAPIを使えばいいのかな。
サンプルがあれば助かるんだが。
あとは、調べてみる。また、わかんなくなったらよろしくね。
0101デフォルトの名無しさん
NGNG朝の目覚ましに、かってに電源Onしてmp3でも聞かせてくれたら最高。
タイマーソフトって、OFF機能はあるけど、ON機能付ってないでしょ。
それともあるのかな?
0102デフォルトの名無しさん
NGNG0103デフォルトの名無しさん
NGNG0104デフォルトの名無しさん
NGNG0105デフォルトの名無しさん
NGNG0106K.N
NGNGCreateWindowでコンボボックスを作成して
SendMessageで項目を追加していってるんですが、
ドロップダウンしてリストが表示されません。
項目は追加されていると思うんですが。
項目を追加した後、SendMessageのCB_SETCURSELで番号
を指定してやると、表示はされるのですが、ドロップダウンリストが
現れません。
なぜなんでしょうか?
0107さんばー
NGNGすれ違いとのことなのでこちらにかきます
ソケットを作って、send(Socket,buf,strlen(buf),0);
でデータを送信するプログラムをC+winsockでを書いているのですが、
closesocketするか、プログラムを終了させないとデータが届きません。
おそらくどこかにバッファされてしまっているのでは、
と思っているのですが、どのようにするとすぐにsendした内容が
届くように出来るのでしょうか。
perlだと $|=1;してストリームをフラッシュしますよね。
このような動作が必要なのではと思っているのですが・・・
0108デフォルトの名無しさん
NGNGCreateWindowでコンボボックスを作る場合、nHeightは
ドロップダウンするリストの高さになるが、小さすぎるとか?
0109デフォルトの名無しさん
NGNGそんなんじゃ、bufの中身全部送れないよ〜
送れるまでループしなくちゃ!
0110K.N
NGNGそうでした。
簡単に解決してしまいました。ありがとうございます。
0111デフォルトの名無しさん
NGNGブロッキングかノンブロッキングかどっちかね?
ノンブロックなら戻り値をCHECK
0112デフォルトの名無しさん
NGNGタスクマネージャやパフォーマンスモニタで
表示させたハンドルの値と
GetPerformanceInfoで取得したハンドルの値とが
あまりにもかけはなれているのですが
どうしてなのかさっぱりわかりません.
使用方がまちがっているのでしょうか?
PERFORMANCE_INFORMATION ps;
ps.cb = sizeof(PERFORMANCE_INFORMATION);
GetPerformanceInfo(&ps, ps.cb);
cout << ps.HandleCount << endl;
よろしくおねがいします
0113さんばー
NGNGレスありがとうございます
rc = send(TcpSocket,(const)buf,strlen(buf)+1,0);
if (rc == SOCKET_ERROR)
{
printf("sendに失敗しました\n");
closesocket(TcpSocket);
return;
}else {
printf("%dバイトデータを送信しました\n",rc);
}
こんな感じで戻り値をチェックしてるのですが、
ちゃんとXバイトデータが送信されました
って出るんですよね。
サーバのほうでは、これを受けて標準出力に出力し、
ソケットにまた返す(echoサーバ)だけの動作をしているのですが、
クライアントでclosesocketするか、プログラミングを終了させるかしないと
出力しないんです。
0114デフォルトの名無しさん
NGNGサーバのrecvはちゃんと全部読み込むまでやってるか?
0115デフォルトの名無しさん
NGNG0116デフォルトの名無しさん
NGNGパフォーマンスモニタをもうちょっといじってみなさい。
つか、あれってカウンタごとにスケールが設定されてるけど、
気付いてる?
0117さんばー
NGNGperlで同様にクライアントを書くと出来るんですよね・・・。
serverの方はperlで書いていて
select(CLIENT); $|=1; select(STDOUT);
while (<CLIENT>){
print "受信メッセージ: $_\n";
# クライアントにメッセージを返す
print CLIENT $_;
}
このようにやっているので全部受信できると思うのですが・・・
>115
そのようなバッファリングはどのようにしてオフにする、
もしくはバッファの内容を全部出力するようにする事が出来るのでしょうか。
0118デフォルトの名無しさん
NGNGhttp://www.kt.rim.or.jp/~ksk/sock-faq/unix-socket-faq-ja.html
はみた上で言ってるんだろうな
0119デフォルトの名無しさん
NGNGWM_PARENTNOTIFYのidchild=HIWORD(wParam)は
WM_CREATEおよびWM_DESTROYのときはチャイルドIDで
それ以外ではundefinedとあります。僕はこれをむしして
プログラム書いてたら、どーやらundefinedのくせにチャイルドID
よりも1大きい数をなぜか送ってくるのだ。(2進法的にはビットが
ずれてるのかもしれないけどな)
だから致命的なエラーにならずなんとなく動きはしたのだけれど、
ずれているのでなんでずれてるのかが分かりづらかったです。
なまじっか動くからたちわりーよなぁ!おかげで配列って[1]からだっけ?
とかとんでもないところまで考え直すはめになったYO。ハメハメ!
0120デフォルトの名無しさん
NGNGシリアル通信で、DCB構造体のfAbortOnErrorをTRUEにしても
通信エラーが起こったときに処理を中断しないんです(FALSEと変わらない)。
普通、エラーをクリアするまで次の処理ができないはずなのに・・・
Win2000だと設定通り動くんだけどWin98/Meでやったらこうなってしまいました。
何がいけないんでしょうか?
0121デフォルトの名無しさん
NGNGSetCaptureしたら、WM_MOUSEMOVEの位置はマイナスになることもあるよね
で、POINT pt = { HIWORD(lParam) , LOWORD(lParam) }とかやってたら、
pt.xが(マイナス幾ら、のかわりに)64000とかになってしまった。
ああ、そういやHIWORDはWORD(unsigned short)だった事に、とようやく気づく
0122デフォルトの名無しさん
NGNGしたhFontをDeleteObjectしなくちゃいけないのは
hFont一個分のフォントオブジェクト用のメモリを確保したから
使い終わったら開放しろっていうことなのかな
hFontって複数のフォントに使いまわして最後に
一回だけdeleteobjectすればいいの?メモリマップみたいな感じ?
フォントかなり面倒くさい。
0123デフォルトの名無しさん
NGNG0124デフォルトの名無しさん
NGNGいじってみたのですが、どーしてもわかりません.
ヘッダを見てもそれらしい事は書いてないし・・・
0125デフォルトの名無しさん
NGNGということを検知できるAPIってありますか?
0126デフォルトの名無しさん
NGNGそんな感じ。面倒くさいのはフォントに限った話じゃなかろう・・・
0127デフォルトの名無しさん
NGNGと・・・お次は・・・
エディットコントロールにファイルをオープンするだけの
プログラムなんだけど、はじめchar szbuf[1024*256]で
確保してたんだけど、これをグローバル変数のポインタにして
..........
hFile=CreateFile....
dwSize=GetFileSize()
szbuf=(char *)malloc(dwSize+1);
ReadFile.(.....szbuf,)
SendMessage(hEdit,WM_SETTEXT,nlen
....
free(szbuf);
CloseHandle(hFile);
とやると、テキストがエディットに表示された直後ページ違反みたい
なのが出るんだけど、どー考えても、WM_SETTEXTが処理されるよりも
速い速度でfreeされるからとしか思えないんだけど、正しいかな
freeの前にZeroMemoryいれるとページ違反のダイアログボックスが
3つ(はじめはひとつ)に増えるし、小さいファイルだと開けることも
あるし、小さいファイルを開いたあとだと違反のでちゃったファイルも
開けたりするし、あとは、CloseHandle(hFile)のタイミングずらすと
ファイルサイズ(dwSize)もなんだかおかしな数を返してきたり。
0128デフォルトの名無しさん
NGNG無いと思うが…自関数で作るとすると
これは…プロセス一覧を取得して「.scr」を探すべきなのか…?
#.exeなスクリーンセーバーは困るが…(汗)
0129デフォルトの名無しさん
NGNGszbufがNULLで終わってないってオチはないよな?
0130デフォルトの名無しさん
NGNG一応ここに書いてないけどszbuf[dwAccbytes]='\0'
やってるし、やっぱり、char szbuf[1024*256]
とかやるとエラーはでないし、ReadFileも、念のため
中途半端だがdwSize+1バイト(mallocはdwSize+2バイト)
やってたし、やっぱりSendMessageはメッセージ送ってるだけ
だから同期とか考えなきゃいけないときもあるっていう結論
に達しました。WM_SETTEXTのすぐあとでコントロールのテキスト
になんかしようとすると、テキストが大きいとまだテキストを
置き終わってなさそうなときもあるし、Sleepやってもこの場合
使いどころが違うみたいだしなぁ・・・・
0131デフォルトの名無しさん
NGNG>WM_SETTEXTが処理されるよりも速い速度でfreeされるからとしか思えないんだけど
それはおそらくない。
SendMessageはウィンドウプロシージャから抜けるまで待ってくれるはず。
0132デフォルトの名無しさん
NGNG的確なコメントが欲しいなら
0133デフォルトの名無しさん
NGNG0134横から悪いがちと疑問なのさ。
NGNGん? freeした後でWM_SETTEXTの処理が行われてる?
#その省略した SendMessageから freeまで、どーなってるのか不明だが…
#ちゃんとWM_SETTEXTの後になってるんだろうな?
#というか、freeすると、メモリデータ崩壊したっけ?
0135デフォルトの名無しさん
NGNG別にたいしたことになってないけどね、
要は読み込みは関数つくってそこでやってるんだけど、
どーやら、やっぱり、SendMessageっていうのはSendすること
って考えた方がいいんじゃないのかな、で、内部で勝手にスレッド
が起動するって考えたほうが。Sendしたからってその瞬間に
szbufに内容が入ってるってことじゃないってことでしょ、
だから、SendMessageの一行うしろでfreeとかやると、
freeのがタイミングが早いんじゃないかな、ほかにもそれを
思わせるふしはいっぱいあるよ、フォントの設定の関数も
作ったんだけど、それもSendMessage(,WM_GETTEXT,,)
のすぐあとだとちゃんとフォントセットできてないし。
俺は正しいと思うよ?スレッドとか同期とかよく、わかってる人ですか?
(お願いします)
0136デフォルトの名無しさん
NGNG変な思い込み、格好悪い。
あんたの逝ってるような動作をするのは、
PostMessage()だろ。
> 内部で勝手にスレッドが起動するって考えたほうが
勝手にスレッドが起動!?すげーな。
メッセージ受けた側のメッセージハンドラは、
スレッド起動してすぐreturnしてるんだ。
ふーん。
> ほかにもそれを思わせるふしはいっぱいあるよ
> 俺は正しいと思うよ
正しいあんたが作ったプログラムが、何故エラーを吐く?
ビルゲの陰謀だとでも(w
0137デフォルトの名無しさん
NGNG低脳の猿はなにも言わなくていいよ
0138デフォルトの名無しさん
NGNG不十分な説明でなんだかきちゃっている君の出番はないよ
0139デフォルトの名無しさん
NGNGSetFont(hEdit);
だいたいこれは別の例だけど、この順序でフォントがきちんと
設定できていないことをどう説明するの?
順序関係とか変えてちょっと工夫するときちんとフォント
設定できるんだけどねw
0140デフォルトの名無しさん
NGNG0141デフォルトの名無しさん
NGNGSendMessage はどうやって戻り値を返すんだ?
WM_GETTEXT とか WM_GETFONT とか。
0142低脳の猿
NGNG> returnしてくるって誰がいったの?
すげー読みづらい日本語だけど(日本語だよね?)
> どーやら、やっぱり、SendMessageっていうのはSendすること
> って考えた方がいいんじゃないのかな、で、内部で勝手にスレッド
> が起動するって考えたほうが。Sendしたからってその瞬間に
> szbufに内容が入ってるってことじゃないってことでしょ、
> だから、SendMessageの一行うしろでfreeとかやると、
> freeのがタイミングが早いんじゃないかな、
ここに書いてあることって、SendMessage()が
すぐreturnしてる=制御を戻してくる、という意味違うのか。
0143デフォルトの名無しさん
NGNGWM_SETTEXT におけるWPARAM は0にすべき(現在未使用)だと
MSDNにあるぞ。
0144デフォルトの名無しさん
NGNG単純にスタック(自動変数)を破壊しているだけだったり...(w
0145デフォルトの名無しさん
NGNGHANDLE hFile;
DWORD dwSize;
void* szbuf;
DWORD dwSizeRead;
hFile = CreateFile("a.txt", GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);
if(hFile == INVALID_HANDLE_VALUE) return;
dwSize = GetFileSize(hFile, NULL);
if(dwSize == 0xFFFFFFFF) return;
szbuf = malloc(dwSize + 1);
if(szbuf == NULL) return;
ReadFile(hFile, szbuf, dwSize, &dwSizeRead, NULL);
((char*)szbuf)[dwSizeRead] = '\0';
SendMessage(hwnd, WM_SETTEXT, 0, (LPARAM)szbuf);
free(szbuf);
CloseHandle(hFile);
0146134
NGNGとするとエディットコントロールの方はちゃんと制御帰ってきてから free なるからいいのか。
# >>134の時、SendとPostを捕らえ違えてたか。 混乱させてすまぬ。>ALL
<蛇足>
>>139 は SendMessageでWM_SETTEXTが行われた後でSetFontされてるのがマズイのかな?
(SendとPostを間違えて、自信無くなったらしい)
0147145
NGNG誤:if(dwSize == 0xFFFFFFFF) return
正:if(dwSize == 0xFFFFFFFF){ CloseHandle(hFile); return; }
誤:if(szbuf == NULL) return;
正:if(szbuf == NULL){ CloseHandle(hFile); return; }
0149145
NGNGSendMessage(hwnd, WM_SETTEXT, dwSizeRead+1, (LPARAM)szbuf);
にしてみたけど、特にエラーることもなく。
もっと全然関係ない別の原因と思われ。
0150デフォルトの名無しさん
NGNG虐めないから結果報告してくれ。
0151デフォルトの名無しさん
NGNG俺のコードも実際、小さいファイルなら問題なく開けるんだよね、
サイズが64kを大幅に上回るとことが顕著科するんだよね。
そりゃーファイルが大きくなればSendMessage(,WM_SETTEXT,,)送っても
全部展開するまで時間かかりそうじゃんか、だから思った(<間違いと
指摘された点?)
小さいファイルだとエラーでない。
まぁ、GetFIleSizeかもなぁ、けどmalloc freeでなく
配列で確保すると大丈夫だからなぁ、なにかあるよなぁと思う。
ちなみにmallocだってdwSizeより1大きく(2とかもやったけどさ)
とって、やってたしなぁ。
0152デフォルトの名無しさん
NGNGあれにはあくまでも表示するもののみを送るんだ。
0153デフォルトの名無しさん
NGNGデータが入らない制限の話なのか?
それと、>139だが、MSDNでsetfontを調べたが、
HWNDを単独でとる引数の::SendFont APIなるものは存在していない。
CWnd::SetFont( HFONT, BOOL = TRUE)など、MFC,ATLのみだったぞ。
(それでも、hEditなんかはとらない)
俺は、もっと他にも隠された問題が山ほどあると想像する。
あと、127は名無しのまま応答を続けるな。
(>127 >130 >135 >139 >151 ?)
0154デフォルトの名無しさん
NGNG0155デフォルトの名無しさん
NGNGJPEGファイルへの出力方法がわかりませんOleSavePictureFileという
それらしいAPIを見つけたのですが引数等の使用方法が不明なため使用できません。
JPEGへの出力方法を御存知のかたがいましたら教えてください。
自力でJPEGへエンコしろというのは無しでお願いします。
0156デフォルトの名無しさん
NGNGうん、落ちはもっととんでもなくすごかたYO
64k問題はだいじゅぶなんだ
0157デフォルトの名無しさん
NGNGリンク中...
017.obj : error LNK2001: 外部シンボル ""int __cdecl ShowText(struct HWND__ *)" (?ShowText@@YAHPAUHWND__@@@Z)" は未解決です
017.obj : error LNK2001: 外部シンボル ""long __stdcall DlgProc(struct HWND__ *,unsigned int,unsigned int,long)" (?DlgProc@@YGJPAUHWND__@@IIJ@Z)" は未解決です
017.obj : error LNK2001: 外部シンボル ""int __cdecl SetWinCenter(struct HWND__ *)" (?SetWinCenter@@YAHPAUHWND__@@@Z)" は未解決です
Debug/sdk017.exe : fatal error LNK1120: 外部参照 3 が未解決です。
link.exe の実行エラー
sdk017.exe - エラー 4、警告 0
というエラーなんですけどどう対処したら良いのでしょうか?
0158デフォルトの名無しさん
NGNG#define WIN_IE 400
とかが書かれてないときもそーいうえらーでる
0159157
NGNGhttp://www.kumei.ne.jp/c_lang/sdk/sdk_18.htm
のプログラムをビルドしました。
0160デフォルトの名無しさん
NGNGタスクマネージャのCPU使用率、というものがあります。
で、あるプログラムで不用意に無限ループとか作ると、
使用率が100%になりますけど、他の動いているアプリにも
CPUが割り当てられているはずなのに、なぜ100%に
なるんでしょうか。
0161デフォルトの名無しさん
NGNG0162デフォルトの名無しさん
NGNGその章は、説明が完結していません。次の章に続きます。
0163デフォルトの名無しさん
NGNGありますか?
0164デフォルトの名無しさん
NGNG逆に、何も動かしていない場合には、System Idle Process
が99〜100%になってるません? >160
他のアプリが、起動はしていても作業していなければ、
余っているCPU時間を占有できる、と。
0165デフォルトの名無しさん
NGNG貴方のプログラムをAとして、他のアプリをB、Cとしよう。
貴方のプログラムだけが動いてるときは
A:100% B:0% C:0% 合計100%
他のプログラムも動いてるときは
A:50% B:25% C:25% 合計100%
ってな感じで、つまり合計は常に100%です。わかった?
0166デフォルトの名無しさん
NGNG0167デフォルトの名無しさん
NGNG>159のページに全ソースが載っていない。
他の章から探せ。
0168165
NGNG> 他の動いているアプリにもCPUが割り当てられているはず
他の動いてるアプリとやらは、1%未満で充分ってことだろう。
0169160
NGNGアプリケーション、プロセス、パフォーマンス、という
ように3つのタブがありますが、「パフォーマンス」の
タブに出ているCPU使用率です。確かにプロセスの
タブはSystem Idle Processを含めて全て足すと100%に
なります。ということはIdleを除いたものを足したものが
パフォーマンスタブのCPU使用率になりそうだ・・・
0170157
NGNGかなり早とちりでしたすみません。
0171デフォルトの名無しさん
NGNGプロセスがRunnableじゃ無ければ、OSのマネージャはCPU時間を
割り当てたりしないよ。無駄だから。だから、起動はしているけど
CPU使用率0%(全く使用しない)プロセスというのはあるんだよん。
なにかのイベント(マウスクリックだったり、キー入力だったり、
入出力バッファへの読み書きだったり、その他いろいろ)があって、
そのプロセスを動かす必要が出てきたら初めてプロセスの状態が変更
されて、マネージャはそれを感知してCPU時間を割り当てに行くん
でしょ。違ったっけ?Windowsは知らないけど、シングルCPUマルチ
タスクOSのプロセス管理って、大体そんなもんでしょ?
0172デフォルトの名無しさん
NGNGEllipseやRectangleを使ってオセロっぽいもの作ってるんですけど
なにか途中で色が抜けたり円の背景だけ白かったり黒かったりに
なってしまいます…どうすればいいでしょうか?
0173デフォルトの名無しさん
NGNGレジストリの.htmlとかを書き換えてみても全然反映されません。
どうすればいいでしょうか?
0174デフォルトの名無しさん
NGNG書き方おしえてくれや、四足エッタチョンコども
0175デフォルトの名無しさん
NGNG意味不明。書き込んだあとに消せばいいではないか。
0176172
NGNG0177デフォルトの名無しさん
NGNG夕日を思う
スダチかな
0178デフォルトの名無しさん
NGNGhttp: とか .url とかその辺もいろいろ変えれ。
0179デフォルトの名無しさん
NGNGまた書き直せば良いよ。
必要なときに WM_PAINT が送られてくるから、そんときに。
・・・って、フォームってなんぞ。
0180デフォルトの名無しさん
NGNGいつのまにか説明ごと葬り去られてなかったことになってるんだけど
どうなってるの?
0181デフォルトの名無しさん
NGNGSPI_GETSCREENSAVERRUNNING
ただしWin98/2000以降
0182ナナシ
NGNGなぜかウインドウの形に亀裂が入ってしまうんだけど、これって
XPのバグなんですか?2000じゃならないし。
0183デフォルトの名無しさん
NGNGなんか凄いアホな質問だとおもうんですが、だれかズバッと教えてください。
0184デフォルトの名無しさん
NGNG0185デフォルトの名無しさん
NGNGListView_GetColumnあるじゃん?
0186デフォルトの名無しさん
NGNGint nCount = Header_GetItemCount(ListView_GetHeader(hwndLV));
つう感じでどうか。
0187183
NGNGおお、でけました。恥ずかしながら、そういう風にやるなんてまったくしらなかったっす。
185さんのを見て、何番目までGetColumn出来るか、で数えてみる方法でもちゃんと分かりましたが、
そっちの方がスマートでありがたいです。とにかく助かりました。
0188180
NGNG昔はLoadResourceの説明にこんなことが書かれてたんだけど
> Windows 95: The system does not automatically free resources
> loaded using the LoadResource function. Applications must use
> the FreeResource function function to explicitly discard a resource
> that is no longer needed.
0189ヒッキー@プログラミング
NGNGFreeResource
16 ビット Windows ベースのアプリケーションの移植を容易にするために提供されているもので、
今後廃止されます。Win32 アプリケーションでは、LoadResource 関数でロードしたリソースを
解放する必要がありません。LoadResource 関数で取得したリソースは、それをロードした
モジュールがアンロードされると自動的に解放されます。
0190デフォルトの名無しさん
NGNG理由は、ペアになっていないと気持ち悪いから(w
0192デフォルトの名無しさん
NGNGMSDN Library の文章は信用できないが、2ちゃんねらーの言明は信用できるのか?
0193デフォルトの名無しさん
NGNGh=loadlibrary('test.dll')
rsr=findresource(h,test,...)
LoadResource(h,rsr);
freelibrary( hl );
}
みたいに回して試せば〜?
0194180
NGNG188もVC++ 4.0のBooks Onlineからの引用なんですけど。
いつのまにか記述がコロコロ変わるようなものとどっちが
信用できるんでしょうねえ。マジで。
ちなみに
http://msdn.microsoft.com/library/en-us/win32/chilimit_70vn.asp
に相当するドキュメントにも、昔は
> In Windows 95, a call to the FreeResource function must be
> included for every call to the LoadResource function. The call
> to FreeResource allows the system to discard a resource that
> an application no longer needs. Windows NT automatically frees
> resources, so a call to FreeResource is not required.
とか書かれてたんですけどこれも葬られてますね。
0195デフォルトの名無しさん
NGNGVC4 のドキュメントは、古すぎだって。とりあえず最新の MSDN Library 参照して、それを信用しておく
のが賢明と思われ。
本当に困りそうなら、
1. 実験して試す (Win95 も OSR のバージョンによって挙動が違ったりしそうだが)
2. インシデント消費して MS に問い合わせる
しかないんじゃないかなぁ。
0196180
NGNGそれを言うなら95だって古すぎだと思うんですけど。
ドキュメントが新しくなったからって95についての記述が変わるなんて
95には自己進化能力でもあるんでしょうか、とか思ったり。
消されたもっともらしい理由があれば納得するんですけど
Microsoftに聞くしかないか。
0197デフォルトの名無しさん
NGNGFreeResource:
bff915fc 33c0 xor eax,eax
bff915fe c20400 ret 0004
結論: 当時のドキュメントのバグ
0198デフォルトの名無しさん
NGNG特別にドライバ入れたりしてるわけではないので、
APIだけで実現してるのだとは思うのですが・・・。
0199デフォルトの名無しさん
NGNG0200デフォルトの名無しさん
NGNGhttp://www.microsoft.com/japan/windows/lifecycleconsumer.asp
そろそろ非サポート対象フェーズに移行するらしいので、古いOSに関する
記述をサクッと削除しようという方針ではないかと推測。
なぜ当時のドキュメントに"In Windows 95,〜"と書いてあったかはわからない
けど。
0201デフォルトの名無しさん
NGNGLoadLibraryで作成されたファイルマップに対するビューだから、
FreeLibrary時に自動的に無効になるはず。
だからFreeResourceが要らないというのは正しいが、
たぶんFreeResourceするとアンマップされるので
した方がメモリ消費が減るかと思われる。
巨大リソースを埋め込んだexeで試してみるといいよ。
ロード時にはexeのファイルサイズ分はメモリ使ってないけど、
LoadResourceの時点でメモリが喰われる。
FreeResourceでメモリが解放されるかどうかはOSのバージョンに依る。
0202デフォルトの名無しさん
NGNGとりあえず、>>197のは見えるか?
0203デフォルトの名無しさん
NGNG0204デフォルトの名無しさん
NGNG他の部分は95の記述もいっぱい残ってるしVC++6付属のMSDNで
すでに削除されてたので深読みしすぎだと思われ
0205悩んでます
NGNGとある事情からWin32APIの「SystemParametersInfo」という
関数を使う必要が出てきました。具体的にはその関数の1番目の
引数を「SPI_GETSHOWIMEUI」に設定するのですが、いざビルドした所
エラーになりました。(エラーはSPI_GETSHOWIMEUIは定義されていない)
しかしMSDN Online Japanのサイトでもしっかりと記述してあるし
定義されていないわけがないのですが、なぜかそう出ます。
includeしているのはWindows.hのみです。
Visual C++6.0とDirectX7.0を使用してます。
他に何かファイルをincludeする必要でもあるのでしょうか?
一応他の関連スレでも聞く予定ですが、もし分かる方がいらっしゃれば
どなたかご教授よろしくお願いします。
0206デフォルトの名無しさん
NGNG>しかしMSDN Online Japanのサイトでもしっかりと記述してあるし
制限付きなモノは、デフォルトでは使えませんよ…バージョン指定しないと。
>他に何かファイルをincludeする必要でもあるのでしょうか?
MSDN見たなら最後の方に、どのヘッダで定義されてるか書いてるでしょ。
0207悩んでます
NGNGレスどうもです。
バージョン指定・・・とはどこをどう変える必要があるのでしょうか?
他スレで指摘されたのですがWINVERの値のことですか?
0208悩んでます
NGNG解決しました。なるほど、おっしゃる意味が解決したことで
分かりました。どうもです。
0210デフォルトの名無しさん
NGNGまたそのスクリーンの左上・右下の座標を得るにはどう調べたら
宜しいのでしょうか…
0211デフォルトの名無しさん
NGNGマルチスクリーンってマルチモニタのこと?
だったらMonitorFromPointでハンドルを取得しておいてGetMonitorInfoとか。
0213デフォルトの名無しさん
NGNG教えてください
0214デフォルトの名無しさん
NGNGなにか?
0215デフォルトの名無しさん
NGNGここにhWnd1とhWnd2は別アプリ。
こーいうのってやらないほうがいいのかな?
hWnd2をDestroyしてもちゃんとフォント残ってるよ
フォントってどうなってるの?
0216デフォルトの名無しさん
NGNG0217デフォルトの名無しさん
NGNG0218デフォルトの名無しさん
NGNGマクロー
WINDOWSX.Hにあるー
0219デフォルトの名無しさん
NGNGSetWindowFont(hWnd1,GetWindowFont(hWnd2),TRUE);
オブジェクト的にどーなってるの?
0220デフォルトの名無しさん
NGNG0221デフォルトの名無しさん
NGNGプリンタ、コントロールパネル、ダイアルアップネットワーク、お気に入り、
など各仮想フォルダごとにカラムの内容が違いますよね。
自作の仮想フォルダが要求された時にエクスプローラーのカラムの内容を変更
し、ファイルに相当するものの一覧を表示したいのですが。
0222デフォルトの名無しさん
NGNGIShellFolder を実装しなきゃならんと思います。
んで、クラスファクトリ作ったり、ちゃんとしたCOMのインプロセスサーバーに仕立てて、クラスIDをレジストリに登録します。
んで、ファイルシステム内に置くなら desktop.ini をスーパー隠しファイルにしてクラスIDを書けば良かったかな?
マイコンピュータ内に置きたいなら HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\MyComputer\NameSpace
デスクトップ上なら HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Desktop\NameSpace が怪しそうです。
いずれも実際に自分がやったことはないので、信頼度の低い情報です。参考程度にして頂ければ。
0223デフォルトの名無しさん
NGNGSetThreadPriority() に渡すスレッドハンドルは、どうやって求めるのでしょう?
0224デフォルトの名無しさん
NGNG他のプロセスのスレッドの優先度を変更したい
ということですか?
0225223
NGNG無理ですか?
0226デフォルトの名無しさん
NGNGOpenThread() かな。
0227デフォルトの名無しさん
NGNG他のユーザーが開いていないかをラベルにはどうしたらいいですか?
0228デフォルトの名無しさん
NGNG0229デフォルトの名無しさん
NGNGWin95/98/NT 4.0では無理?
0230223
NGNG少なくとも taskman.exe では呼ばれてないですね
0231デフォルトの名無しさん
NGNGどこで聞いた話か知りませんがデマを振りまかないでください。
廃止などされていません。
Win9xのtaskman.exeにはそもそも優先度変更の機能なんて
ありませんから呼んでるわけがありませんね。あなた本当に223?
0232デフォルトの名無しさん
NGNGNT のタスクマネージャには機能がある以上、方法はあると思う。とりあえず Dependency Walker でタスク
マネージャが使っている API をリストアップしてみたら? (ただ NTDLL.DLL にある非公開 API を使われ
てるとお手上げだけど)。
0233デフォルトの名無しさん
NGNG優先度クラス変更のAPI(SetPriorityClass)に渡すのは
スレッドハンドルではなくてプロセスハンドルだから、
そもそもスレッドハンドルを求める必要はない。
0234デフォルトの名無しさん
NGNGWindows NT/2000ネイティブAPIリファレンスみたいな本も出てるから
お手上げってほどでもない。
NT 4.0でOpenThreadをシミュレートするとこんな感じ。
HANDLE OpenThread(DWORD dwDesiredAccess, BOOL bInheritHandle, DWORD dwThreadId)
{
OBJECT_ATTRIBUTES ObjectAttributes;
CLIENT_ID ClientId;
NTSTATUS status;
HANDLE ThreadHandle;
InitializeObjectAttributes(&ObjectAttributes, NULL, bInheritHandle ? OBJ_INHERIT : 0, NULL, NULL);
ClientId.UniqueProcess = 0;
ClientId.UniqueThread = dwThreadId;
status = NtOpenThread(&ThreadHandle, dwDesiredAccess, &ObjectAttributes, &ClientId);
if (!NT_SUCCESS(status)) {
SetLastError(RtlNtStatusToDosError(status));
return NULL;
}
return ThreadHandle;
}
0235デフォルトの名無しさん
NGNGtypedef HANDLE (WINAPI *OPENTHREADPROC)(DWORD, BOOL, DWORD);
pOpenThread = (OPENTHREADPROC)((LPBYTE)GetProcAddress(GetModuleHandle("KERNEL32"), "OpenProcess") + 0x24);
__asm mov eax,dwThreadId
__asm xor eax,Obsfucator
return pOpenThread(dwDesiredAccess, bInheritHandle, dwThreadId);
0236デフォルトの名無しさん
NGNGhttp://support.microsoft.com/default.aspx?scid=kb;EN-US;q121093
0237デフォルトの名無しさん
NGNG(゚д゚)午-
0238デフォルトの名無しさん
NGNG0239デフォルトの名無しさん
NGNG0240デフォルトの名無しさん
NGNGセーブしたいんですが、どうやればいいのでしょうか?
BITMAP作ってDCにSelectObjectしたりしたんですが駄目でした。
あと本当はBMPじゃなくてピクセル情報が取りたいのですが。
0241デフォルトの名無しさん
NGNGピクセル拾うなら GetPixel()
ビットマップにコピーしたければ BitBlt()
0242240
NGNG(上のウィンドウもピクセルとして拾ってしまう)
BitBltを使ってどうやってピクセル情報を得るんでしょうか?
ヘルプを見るとDCからDCへのコピーみたいな感じなんですが。
0243デフォルトの名無しさん
NGNGSetForegroundWindow で明示的に前に出せば?
直後に sleep を入れて少し待てば確実にいけると思うが。
0244240
NGNGhdc = GetDC(hwnd);
hdc2 = CreateCompatibleDC(hdc);
bitmap = CreateDIBSection(hdc2...
SelectObject(hdc2, bitmap);
BitBlt(hdc2, 0, 0, w, h, hdc, 0, 0);
単純にSetDIBitsToDevice関数の逆をやりたいだけなんですけど、Winって難しいっすね。
0245デフォルトの名無しさん
NGNG表示されてないクライアント領域まで拾いたいのか? それは無理だろう。自分で書いてるアプリなら
- WM_PAINT に対して直接書かずに、いったんバックバッファに書くようにする
- クライアント領域のデータがほしければ、バックバッファから拾ってくる
とするところだが、他のアプリだと汎用的な方法はないと思うなぁ。
>>243
Win98/2000 以降だと、自分がアクティブでない場合には SetForegroundWindow() しても対象のウィンドウが
前面に出てこないから、ちと厳しいと思う。
0246240
NGNGみなさま、ありがとうございました。
・・実はDCってバックバッファみたいな機能を持ってると思い込んでました。
0248デフォルトの名無しさん
NGNG0249デフォルトの名無しさん
NGNG上のURLに書かれている「Windows2000でのWM_MOVING」について
分かる方いますか?自分もまったく同じ現象で悩んでいます。
0250デフォルトの名無しさん
NGNGhttp://www.microsoft.com/JAPAN/developer/library/jpwinpf/_win32_callwndproc.htm
解説
CallWndProc フックプロシージャはメッセージを調べることはできますが、変更することはできません。フックプロシージャがシステムに制御を返した後、このメッセージはウィンドウプロシージャへ渡されます。
誤動作でもなければ、バグでもなければ、使い方が悪いわけでもないです。仕様です。
0251デフォルトの名無しさん
NGNG0252デフォルトの名無しさん
NGNGWin3.1+MMEの頃からミキサはmmsystem
0253デフォルトの名無しさん
NGNGWH_CBTでもできるかもしれない。
0255デフォルトの名無しさん
NGNG0256デフォルトの名無しさん
NGNGもっと解るように質問してよ。
0257255
NGNGWindows95ですが、環境変数をプログラムから設定する
APIを教えてください。
0258デフォルトの名無しさん
NGNG0259デフォルトの名無しさん
NGNG自分のプロセスのなら SetEnvironmentVariable だけど、
すべてのプロセスのなら RegSetValueEx だな。 (藁
ただしすべてのプロセスの環境変数は、次回再起動時から有効。(当然)
0261デフォルトの名無しさん
NGNG環境がWin95ならautoexec.batに書くんじゃないの?
0262 デフォルトの名無しさん
NGNGそのプロンプトに文字を出力する方法ってどうするのでしょうか?
AllocConsoleだと別のコンソールウィンドウ作成するし、
何かいい方法はないモノでしょうか
0263デフォルトの名無しさん
NGNG0264262
NGNGそれだけだと、どこにも文字が表示されなかったんですよ。
で、AllocConsoleを使ったら、別のコンソールウィンドウが
作成されてそちらに文字表示されてしまいますし。
起動元のDos画面のstdoutを取得する方法がわかれば
いいんですが・・・
0265デフォルトの名無しさん
NGNGsubsystem:windowsで、コマンドプロンプトから起動した場合のみ、
そのコマンドプロンプトを利用してWriteConsoleする、ショートカット等
から、起動した場合、コマンドプロンプトは表示も利用もしない、という
事なら、やり方はわからないなー。
0266デフォルトの名無しさん
NGNG0267266
NGNG0268262
NGNGコマンドプロンプトに文字を出力し、ショートカットなど
から起動した場合はウィンドウを作成して処理をする
方法です。
素直に処理する方法ってなさそうですね。
あきらめてウィンドウで処理するようにするか・・・
0269デフォルトの名無しさん
NGNG0270デフォルトの名無しさん
NGNG0271デフォルトの名無しさん
NGNG何か長さの目安ってある?
0272デフォルトの名無しさん
NGNGそれ以上の長さのファイル名が扱えても意味ないでしょ?
0273271
NGNG0274デフォルトの名無しさん
NGNG0275271
NGNGネットワークパスがらみか
0276デフォルトの名無しさん
NGNG漏れも最近やったばっかり。
NTでは各フォルダ毎にMAX_PATH文字使えるから、
フルパスにするとMAX_PATHは軽く超える。
NT系なら、FAT32でも使えるとか言う話も聞いた。
9xでは、フルパスでMAX_PATHまでしかファイルが作れない。
#拡張子分は別みたいで、実際には260文字までOKみたい
CreateFile()で、
ローカルパスなら"\\?\"
ネットワークパスなら"\\?\UNC"
をつけることでMAX_PATH以上のファイルを扱える。
Win9xでは使えないので、OSによって切り替えないとダメ。
0277デフォルトの名無しさん
NGNGその "\\?\" ていうの、Unicode版のAPIじゃないとダメとか書いてなかった?そんな気がする
0278デフォルトの名無しさん
NGNGの制限と思われ(DDK参照)。
http://msdn.microsoft.com/library/en-us/fileio/filesio_7wmd.asp
> Windows NT/2000/XP: In the ANSI version of this function,
> the name is limited to MAX_PATH characters. To extend this
> limit to nearly 32,000 wide characters, call the Unicode version
> of the function and prepend "\\?\" to the path. For more
> information, see File Name Conventions.
ところでコモンダイアログとかはMAX_PATHを超えるファイル名に
ちゃんと対応してるの?
0279デフォルトの名無しさん
NGNGどうすればいいですか。
例えばファイル選択のダイアログに文字コードなどの
選択を出来るようにしたいのです。
0280デフォルトの名無しさん
NGNG例えばGetOpenFileName()なら、
OFN_ENABLETEMPLATEを使えばよいかと。
0281279
NGNGヒントをどうも。
lpTemplateNameで追加するダイアログを指定
してやればいいのですね。
0282デフォルトの名無しさん
NGNGその言葉だと微妙に違う気もするが、
まぁヘルプ読みつつサンプル漁りつつ色々試しつつやってみれ。
0283デフォルトの名無しさん
NGNGディスプレイの解像度を低くした後、それを元の解像度に戻すと、
デスクトップのアイコンがタスクバーの下まで突き抜けてしまうんだけど、
これを正しく整列させたい場合はどうすれば良い?
# デスクトップにUpdateWindowをかけたけどうまくイカナカターヨ
0284デフォルトの名無しさん
NGNGArrangeIconicWindows(GetDesktopWindow())とか。
0285283
NGNG0286キャット
NGNGVBじゃなく、SDKなのにVBで質問してしまってたからここで改めて。
よくあるソース
LRESULT CALLBACK WndProc(HWND 省略){
HDC hDC;
PAINTSTRUCT ps;
char *str = "abc";
switch (msg){
case WM_PAINT:
hDC = BeginPaint(hWnd, &ps);
TextOut(hDC,0,0,str,3);
EndPaint(hWnd, &ps);
break;
0287キャット
NGNGHDC hDC;
PAINTSTRUCT ps;
char *str = "abc";
が何度も実行されるから無駄がある。
LRESULT CALLBACK WndProc(HWND 省略){
switch (msg){
case WM_CREATE:
HDC hDC;
PAINTSTRUCT ps;
char *str = "abc";
break;
case WM_PAINT:
hDC = BeginPaint(hWnd, &ps);
TextOut(hDC,0,0,"abc",3);
EndPaint(hWnd, &ps);
break;
とした方がいいと思ったけど、こういうソースを
見かけないのはどうして?
元ネタは
http://pc.2ch.net/test/read.cgi/tech/1010624646/-100
の87。
0288デフォルトの名無しさん
NGNG(つまり、"左ボタン押下"を"ホイール回転"とするとき)
wParam ← MakeWParam(0, ±WHEEL_DELTA)
lParam ← lParam # 座標は変わらず
で、問題ありますか? マウスホイールのエミュレート的に
0289デフォルトの名無しさん
NGNG> HDC hDC;
> PAINTSTRUCT ps;
これはただ変数を「宣言」するだけであって、何か実行するような文じゃない。そういう無駄は生じない。
> char *str = "abc";
まぁこれについては言いたいことがわからないでもないが、でも普通は最適化で消えて無くなる。
> case WM_CREATE:
> HDC hDC;
> PAINTSTRUCT ps;
> char *str = "abc";
> break;
> case WM_PAINT:
> hDC = BeginPaint(hWnd, &ps);
> TextOut(hDC,0,0,"abc",3);
> EndPaint(hWnd, &ps);
> break;
str には何の意味が?
0290デフォルトの名無しさん
NGNGその書き方でもウィンドプロシージャが呼ばれるたびに
> HDC hDC;
> PAINTSTRUCT ps;
が実行(というか変数領域がスタックに確保)されると思うが?
なんか根本的に勘違いしてないかな。
0291キャット
NGNGcase WM_CREATE
が実行されるということ?
0292デフォルトの名無しさん
NGNG>>291
それ以前にそのソースコード、コンパイル通るのかよ!?
switch 内で変数宣言するなら、
switch(n) {
case 0:
{
int i;
}
break;
}
ってブロック化しないと駄目違うか?
当然この場合、他の case からは見えなくなる。
API以前のレベルなんで、Cの初歩質問スレ逝け。
0293デフォルトの名無しさん
NGNGなんでやねん!
つーか、どの返答に対する質問なんだ?
0294キャット
NGNG無駄は生じないというのは、1回しか実行されない
ではなく、
case WM_CREATE: が実行されるたびに HDC hDC; とかも
実行されるけど、HDC hDC; は「宣言」するだけだから
何度実行されても処理が重くなることはない
ということですか?
どっちの理由で無駄がないんですか?
最適化で消えて無くなる
とは、BBC32 でのコンパイル時に、
case WM_CREATE:
HDC hDC;
PAINTSTRUCT ps;
char *str = "abc";
break;
を
char *str = "abc";
case WM_CREATE:
HDC hDC;
PAINTSTRUCT ps;
break;
してくれるってこと?
str は TextOut(hDC,0,0,str,3); でした。
書き間違えてました。
0295292
NGNGでもAPI以前というのは変わらないと思うんでそれ系のスレ逝くか、
優しい方に教わってください。
0296キャット
NGNGまー、それにしても、
case WM_CREATE:
HDC hDC;
PAINTSTRUCT ps;
char *str = "abc";
break;
なソースは見たことないから、
HDC hDC;
PAINTSTRUCT ps;
は、よくあるソースのように WinProc( ) の直下に
書いた方がいいみたいだけど、何度も実行されるようで
ちょっと気になるんだよなー。
0297デフォルトの名無しさん
NGNGどこへ持っていこうと、関数突入時に確保される自動変数の
サイズが変わるだけだろうが。
Win32で、 sub esp,10とsub esp,100の違いがあるか、っちゅうねんな。
0298デフォルトの名無しさん
NGNG> 無駄は生じないというのは・・・
変数宣言に対して「実行する」とか「何回実行する」という考え方を捨てて下さい。宣言は、ただ宣言するだけであって、何も実行しません。
制御がその部分を通過するかどうか、まったく関係ありません。
> 最適化で消えて無くなる
つまり
const char* str = "abc";
TextOut(hDC,0,0,str,3);
これは
TextOut(hDC, 0, 0, "abc", 3);
になるだろう、ということです。まぁこれに関しては最適化の度合いにも依るんで、一概には言えませんが。
んで、ですね。本題(なのか?)に入ると、
> case WM_CREATE:
> HDC hDC;
> PAINTSTRUCT ps;
> char *str = "abc";
> break;
> case WM_PAINT:
> hDC = BeginPaint(hWnd, &ps);
> TextOut(hDC,0,0,str,3);
> EndPaint(hWnd, &ps);
> break;
これですが、ダメです。
str は WM_CREATE を最初に通ったときに "abc" で初期化されますが、関数 WndProc を抜けたときに消え去ります。
次に WndProc に来たときには、str は前の値を覚えていません。
WM_PAINT を受け取ると、switch-caseのジャンプで飛び越されるため str は初期化されずゴミ値になります。
0299デフォルトの名無しさん
NGNG変数というのはふつう、関数内で使う変数の同時最大使用サイズを計算して、関数に突入するときにそのサイズを一括確保するものです。
理解の助けになれば。
0300キャット
NGNG>>299
ありがとう。
もう少しで納得できそう。
なぜかコンパイルができなくなってしまった。
ゴミ箱あさってコンパイルが成功した時のソースを
探してみます。
case でローカル変数の初期化がとばされた
0301キャット
NGNG納得しました。ありがとう。
0302デフォルトの名無しさん
NGNG0303デフォルトの名無しさん
NGNG0304デフォルトの名無しさん
NGNGスカートめくりたい人ハケーソ。
とりあえずどういう方法で置き換えやろうとしてる?
0305デフォルトの名無しさん
NGNGC++では初期化を飛ばすことは出来ません(コンストラクタの問題があるゆえ)が、
C では出来たんじゃないっけ? 間違ってたらゴメソ。
0306デフォルトの名無しさん
NGNG0307デフォルトの名無しさん
NGNGあれってどういう仕組みなんでしょう?やっぱり行儀悪いのかな…
0308デフォルトの名無しさん
NGNGXPでしか使えないけどAttachConsoleというのがある。
http://msdn.microsoft.com/library/en-us/dllproc/conchar_9b6t.asp
0309デフォルトの名無しさん
NGNG0310デフォルトの名無しさん
NGNG.NETが出たから取りあえずSDK無料配布はおしまいとかそんなんだったらやだな
0311デフォルトの名無しさん
NGNGhttp://www.microsoft.com/msdownload/platformsdk/sdkupdate/
0312デフォルトの名無しさん
NGNG>We apologize for the inconvenience.
>Platform SDK CDs are available from
0313デフォルトの名無しさん
NGNGキャッシュ見てるのか? < 漏れ
0314312
NGNG0315デフォルトの名無しさん
NGNG0316デフォルトの名無しさん
NGNG組み込み型にもコンストラクタはあるけど、明示的に呼ばないと実行されないよ。
typedef void *T;
T p = T();
元の話題とは全然関係ないけど。
0317デフォルトの名無しさん
NGNG> C++では初期化を飛ばすことは出来ません(コンストラクタの問題があるゆえ)が、
> C では出来たんじゃないっけ? 間違ってたらゴメソ。
“初期化”をどう捉えるかで微妙ですが。
C++ではswitch内で宣言する変数が単純型ならコンパイル通ります。
(構築子が定義された型では駄目)
switch (msg){
case WM_CREATE:
HDC hDC;
PAINTSTRUCT ps;
char *str;
str = "abc";
break;
case WM_PAINT:
hDC = BeginPaint(hWnd, &ps);
TextOut(hDC,0,0,str,3);
EndPaint(hWnd, &ps);
break;
}
Cではだめぽ。
Cでは変数の宣言はブロックの先頭でのみ可能なので。
敢えて書き換えるなら、
switch (msg){
HDC hDC;
PAINTSTRUCT ps;
char *str;
case WM_CREATE:
str = "abc";
…キモイコード
キャットさんの勘違いを指摘するなら以下の二点。
・WM_CREATEを処理する際にstrへ"abc"を代入しても、
WM_PAINTを処理する際にはstrの値は初期化されない不定値となる。
(どなたかが逝っていたようにstatic変数にすれば別だけど)
・上記コードでWM_PAINTを処理する際にもローカル変数hDC、ps、strの領域確保は行われる。
どちらも初歩的というのも恥ずかしいCの構文の話なので、
APIどうこう以前にCの初歩から復習する方が良いと思われ。
0318キャット
NGNGコンパイルできたのは間違いないけど、それ以降は
コンパイルができていなかった。
そうそう、301で、できましたーって書いた時は
char *str;str = "abc";
としてコンパイルしました。
char *str = "abc";
ではコンパイルできなかったから。
でも、一番最初にコンパイルが成功した時は
char *str = "abc";
と書いていたはずだったけど、気のせいだったのかなー?
0319デフォルトの名無しさん
NGNGどうしたらいいんですか?
例えば、
SetWindowText(hWndEDIT, "ああ");
これでエディットボックスに文字を送ると
エディトボックスの背景色が灰色でも、
エディットボックス内の文字の色は白になります。
オーナードローとか使わなくて、スマートに色を指定する
方法があれば知りたいです。
0320デフォルトの名無しさん
NGNGWebのイメージを縮小して取り込む目的で考えています。
VBでWebコンテンツを表示させるには「webBrowser」というオブジェクト命令があり
ますが、これをForm上に複数個配置して動作させると、1つ1つのBrowser領域が狭いため、
Webの左上のみ表示され、残りはバーでスライドという形になっちゃいます。
設定で全体が表示させられるようになるのかといろいろ調べましたが、うまく表示さ
せられませんでした。
フォルダはその多くの機能を「リストビュー」というオブジェクトで作られている事
がわかりました。
しかし、リストビューにはどうやら「縮小表示」させる機能はないらしく、これもう
まくいきませんでした。
この「縮小表示」どうすれば実現できるのでしょうか?
0321デフォルトの名無しさん
NGNGhta(≠html) ファイルとかその周辺を探ること。
0322デフォルトの名無しさん
NGNGリッチエディットコントロールはつかってる?
0323デフォルトの名無しさん
NGNGリッチエディットコントロールっていう言葉は初めて聞きました。
まだまだ初心者です。
0324ほたる
NGNGグローバルスコープで中カッコ ({) が見つかりましたが、
対応する関数ヘッダーがありません。」
LRESULT StaGrpDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
if ( message == UWM_DRAWFITNESS )
{
DrawState();
}
return CDialog::WindowProc(message, wParam, lParam);
}
BOOL StaGrpDlg::OnInitDialog();
{
CDialog::OnInitDialog();
m_State.GetClientRect( &rectState );
m_OKBtn.GetClientRect( &rectOKBtn );
return TRUE;
}
void StaGrpDlg::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy);
RECT rc;
if ( cx != 0 )
{ rectState.right = cx - 2;
rectState.bottom = cy - 62;
}
m_State.MoveWindow( &rectState,FALSE );
OrgX = 0; OrgY = 0;
cWidth = rectState.right - rectState.left;
cHeight = rectState.bottom - rectState.top;
int dw = rectOKBtn.right - rectOKBtn.left;
int dh = rectOKBtn.bottom - rectOKBtn.top;
rc.left = rectState.right - dw; rc.top = rectState.bottom + 5;
rc.right = rc.left + dw; rc.bottom = rc.top + dh;
m_OKBtn.MoveWindow( &rc,FALSE );
Invalidate();
}
0325ほたる
NGNG関数ヘッダー??
こんなん一週間でできるようになれっていうの・・・。
0326ほたる
NGNGらしいです??
0327デフォルトの名無しさん
NGNGその前の行の最後を見てみ。余計なものがくっついてないかい。
0328ほたる
NGNGいらないの→;
気づきませんでしたー(涙)
ほんとにありがとうございます。
0329デフォルトの名無しさん
NGNGディスク上の連続した領域を予約する機能はありますか?
0330デフォルトの名無しさん
NGNGおいお前!
マルチポスト先にも報告しといてください。
つーかスレ違いなマルチポストするな子ね。
0331デフォルトの名無しさん
NGNG0332デフォルトの名無しさん
NGNGリッチエディットという言葉の意味が分かってから来い。
さもなくば氏ね
0333デフォルトの名無しさん
NGNG0334デフォルトの名無しさん
NGNGそんなに言うなら>>2に書け!
0335デフォルトの名無しさん
NGNG0336デフォルトの名無しさん
NGNG>>331
リッチエディットという言葉の意味が分かってから来い。
さもなくば氏ね
333 :デフォルトの名無しさん :02/01/17 13:06
質問する前に最低限Petzolt本読め
334 :デフォルトの名無しさん :02/01/17 21:23
>>333
そんなに言うなら>>2に書け!
335 :デフォルトの名無しさん :02/01/18 00:01
> ただし、質問する前にまずMSDN読め。
↑おまえも知らんのか。
分からんなら書くなよ。
お前も俺と同じでエディットボックスの文字に対する背景色は
オーナードローとか使わないと白のままで変色できないなんだろー。
無能な初心者は黙っててね。
リッチエディットでできるならソース書いて見やがれ。
できないから書けないんだろー。
知ったかぶりの初心者にはあきれるよ。
俺もここで、リッチエディットとという言葉を知った。
お前と同じレベルになれたよ。
0337デフォルトの名無しさん
NGNG(((( ;゚Д゚)))ガクガクブルブル
(゚∀゚)アヒャヒャヒャヒャ
0338(゚∀゚)アヒャ!
NGNG正直、すごい。
0339デフォルトの名無しさん
NGNG0340デフォルトの名無しさん
NGNGDQNを晒し上げ
0341デフォルトの名無しさん
NGNG0342デフォルトの名無しさん
NGNGWindowsMediaPlayerって
例えば HKEY_CLASSES_ROOT\.wav にないですよね
で、エクスクローラのファイルタイプタブ関連付で見ると
「拡張子がWAVのファイルはカスタマイズされました」 って出る
これってどうやってるの?
WAVへの関連付をアプリから弄りたいんだけど なんかM$って勝手スギ!
0343333
NGNGその言葉の前に「背景色を変更するのみの目的で」と付くのなら同意。
場合によるっしょ。
>336
っていうか早くpetzold本読め。それに答えが書いてあるんだよ。
0344342
NGNG0345デフォルトの名無しさん
NGNG0346342
NGNGでもそれじゃない方法で関連付けされてるから困ってるんです
たぶん他のプレイヤーインストールされた時に関連付けを
上書きされたくないからこんな事してるんだと思うんだけど
ああ、せめて キーワードだけれでも判ればなんとか探すんだけど
0347デフォルトの名無しさん
NGNG0348342
NGNG今は .wav に WinAMPが入ってる
なのに、WindowsMediaPlayer7は そいつを無効にして居座ってるわけ
で、それはどうやってるのかなと
実は右ボタンメニューにチョコッと入れたいだけなんだけど WMPが入ってるとダメなんだ
せめて、WMPが無効にしてるかどうかのフラグだけでも欲しいなと
0349デフォルトの名無しさん
NGNGWMPがコンテキストメニューハンドラを用意しているとか?
環境が違うのでなんとも言えないけど。
.wavのクラス(SoundRecか?) -> shellex-> ContextMenuHandlers
以下に何かあるかも。
0350322
NGNG>リッチエディットでできるならソース書いて見やがれ。
http://www.edu.ics.saitama-u.ac.jp/~j769jb/c_lang/sdk2/sdk_139.htm
それとも純粋に文字の部分の背景だけの色変えたいのか?
0351デフォルトの名無しさん
NGNG0352342
NGNGWindows2000では
エクスクローラのファイルタイプタブに [変更]というボタンがあり
また、xx.wavをマウス右ボタンで出すプロパティにも アプリケーションxx[変更] と
いうボタンがあります。
これを押して アプリケーションを選ぶと
>>342 の状態になり
HKEY_CLASSES_ROOT\.wav とは関係なく
関連付け状態になるようです
これって何っていう機構?
とりあえずレジストリを全部保存して変更前後で比較するしかないか・・
0353デフォルトの名無しさん
NGNGSpy++で観察してみれ。
0354デフォルトの名無しさん
NGNGコマンドプロンプト実行型のプロジェクトをデバッグする
方法教えてください
0355デフォルトの名無しさん
NGNGやればいいと思いますよ。
0356デフォルトの名無しさん
NGNGWin32コンソールアプリケーションのプロジェクトを作って、
WNetGetNetworkInformation()
WNetGetResourceInformation()
とかのネットワークAPIを使おうとするとコンパイルエラー
「C2065: 'WNetGetResourceInformation' : 定義されていない識別子です。」
やら、リンクエラーが出るのですが、なぜでしょう?
「error LNK2001: 外部シンボル "_WNetGetNetworkInformationA@8" は未解決です」
0357デフォルトの名無しさん
NGNG適切なヘッダをインクルードして適切なライブラリとリンク。
0358デフォルトの名無しさん
NGNG駄目ですね、引数も指定してるのですが、瞬時に終了しちゃいます。
(一瞬コマンドプロンプトが立ち上がってすぐ閉じる)
0359デフォルトの名無しさん
NGNGWNetGetResourceInformationは、winnetwk.hをインクルードしても駄目、なぜでしょ?
0360デフォルトの名無しさん
NGNG0361デフォルトの名無しさん
NGNG親切な方だ・・・しかも教え方がやさしい
ありがとうございました。ステップインで解決です
0362デフォルトの名無しさん
NGNGhttp://www.google.co.jp/search?q=cache:zNcplg7Z-fUC:mfc.acty-net.ne.jp/ml/mfc/00036560.shtml+WNetGetResourceInformation&hl=ja&lr=lang_ja
0363デフォルトの名無しさん
NGNGがっ!文字が化けて読めないのですが・・・
0364デフォルトの名無しさん
NGNGブラウザの使い方から勉強すれ。
0365デフォルトの名無しさん
NGNGあまり早く検索できません。メモ帳などはどのようなやり方で
検索しているんでしょうか。
0366デフォルトの名無しさん
NGNGBOOL ReadProcessMemory(
HANDLE hProcess, // プロセスのハンドル
LPCVOID lpBaseAddress, // 読み取り開始アドレス
LPVOID lpBuffer, // データを格納するバッファ
DWORD nSize, // 読み取りたいバイト数
LPDWORD lpNumberOfBytesRead // 読み取ったバイト数
);
このAPIを使うって所までは進めたんですが、第二引数と第四引数の
「読み取り開始アドレス」と「読み取りたいバイト数」を、
プロセスのハンドルあたりから調べるのって、どうやったらいいのでしょうか?
0367デフォルトの名無しさん
NGNGVirtualQueryEx
0368366
NGNGありがとうございます。
MSDNライブラリの解説読んでも、いまいちよくわからないという情けない状態ですが
気合で試行錯誤してみようと思います。ありがとうございました。
0369デフォルトの名無しさん
NGNGCreateCompatibleBitmap() で作ったビットマップと
CreateCompatibleDC() で作った(直後の)デバイスコンテクストを
SelectObject() で関連付け?ました。
この SelectObject() の戻り値も保存しておいて、DeleteDC する前に
元に戻してあげなければいけないんでしょうか?
というか、この時の戻り値は何を指してるんでしょう?
0370デフォルトの名無しさん
NGNGhttp://www.microsoft.com/japan/developer/library/jpgdipf/_win32_selectobject.htm
0371369
NGNGありがとうございます。でもこの「既定オブジェクト」っていうのが
イマイチなんなのかわからないんです。
CompatibleDC を作った直後に選択されている既定のビットマップとは?
一体何者でしょう?
0372デフォルトの名無しさん
NGNG0373デフォルトの名無しさん
NGNGSelectObjectで新しいオブジェクトを選択すると、それまでDCに選択されていたオブジェクトが戻り値として返されます。
元のオブジェクトを復元しなきゃならないのは、
・同じオブジェクトを複数のDCに選択することは出来ない
・DCに選択されているオブジェクトは削除出来ない
という事情で、オブジェクトはDCから選択解除しておかないと後々困るものでして、
しかしSelectObjectでNULLを指定して選択解除することは出来ないので、
自分のオブジェクトを選択解除するために元のオブジェクトを選択するわけです。
・・・わかりにくい日本語だけど、わかり?
0374デフォルトの名無しさん
NGNGSelectObject()を実行したときの返り値はこのビットマップハンドル。
0375374
NGNG復元しなくていい具体的な理由とか、その情報のソース教えてもらえないでしょうか?
372さんの言われるとおりシルト本なんかだとビットマップのハンドルは復元をしてないんですが、前から理由がわからず気になっていたので。
0376デフォルトの名無しさん
NGNG>>375
んー。MSのサンプルもそうしてるしなぁ。
0377デフォルトの名無しさん
NGNG戻さないコードを書いて、ループでまわして、
win95あたりで実行する。リソース・メモリが
漏れているようなら、正しくない、というのはどう?
0378374
NGNGそうですか・・・
私もMSのサンプルを漁ってみます。
ありがとうございました。
0379376
NGNG選択解除しないとDeleteObject出来ないからで、
DeleteDCしたら必然的に選択解除されるわけだから、
わざわざ選択解除しなくて良い・・・と認識してる。
確固たる証拠は無い。
0380デフォルトの名無しさん
NGNG(ペンまたはブラシ) を削除すると、DeleteObject 関数は失敗します。
ttp://www.microsoft.com/JAPAN/developer/windows2000/technologies/ac-platform/ac-objectdeletion.asp
0381デフォルトの名無しさん
NGNGhttp://www02.so-net.ne.jp/~bkenro/publish/vbapi/errata.html#gen-1
0382デフォルトの名無しさん
NGNGプログラマに向いてないと思うよ。
0384デフォルトの名無しさん
NGNGAPIなんて無いですよね?
0x0411(LANDID) を与えると "日本語" が得られる、みたいな。
0385デフォルトの名無しさん
NGNGGetLocaleInfo(MAKELCID(langID, SORT_DEFAULT), LOCALE_SLANGUAGE, buf, sizeof(buf));
0386384
NGNG0387デフォルトの名無しさん
NGNGGetModuleFileName() の HMODULE 項目に代入する値が分からないのですが…
0388デフォルトの名無しさん
NGNG俺がそうゆーことするときはたぶんToolhelpAPIを使っていまあるプロセス
全部を調べてGetWindowsThreadProcessIdで得たIdと比較させるっす。
0389デフォルトの名無しさん
NGNGNT系ならEnumProcessModulesでもってこれる。
9x系はGetModuleFileNameじゃなくてProcess32Firstとか使うんだっけ?
とにかく、かなりめんどくさかったことしか覚えてねーや。
自分のファイル名なら素直にNULL突っ込んどくのが吉。
0390デフォルトの名無しさん
NGNGこんなのあったけどどうだろ?
95だと使えないみたいだけど
0391デフォルトの名無しさん
NGNGNT系では他プロセスのウィンドウのモジュールハンドルを取れない。
http://www.microsoft.com/japan/support/kb/articles/J048/2/24.asp
MSAAを使えるようにするためにでっち上げただけだと思われ。
http://www.microsoft.com/japan/support/kb/articles/JP241/5/35.asp
0392デフォルトの名無しさん
NGNG重箱の隅をつつくようだけど、
「ウィンドウを作ったモジュール」なんて、あとから調べることは不可能だよ。
それがたとえ Win9x/ME であったとしても、だ。
せいぜいわかるのは
「ウィンドウを作ったプロセスの(EXE の)モジュール」
だよ。
多分、わかってると思うが念のため...。
0393デフォルトの名無しさん
NGNG0394デフォルトの名無しさん
NGNG見て欲しいぜ。(です)
あーぁ!なんつったらいいのかなぁ、頼む、よろしく。
http://members.tripod.co.jp/navi_/0.jpg
〜1.jpg,,,,,15.jpg
この画像では半分も説明できてないんだけどさぁ、
今ちょっと頭てんぱってっからまたコメントする。
コメントは誰がなんっつっても絶対今度またするからな。よろしく。
金、ねーんだYO。
0395デフォルトの名無しさん
NGNG0396デフォルトの名無しさん
NGNG0397デフォルトの名無しさん
NGNGuser interfaceかな、もう少し具体的に。
0398デフォルトの名無しさん
NGNGボタンの配置とかは、クリックだけで追加削除変更できるように
なってるしなぁ、とにかく、きちんと説明するには今は点パリ
過ぎている。。。
0399デフォルトの名無しさん
NGNG要するに、「要らないものが多すぎる」って事さ。
ウインドウクラスなんて、てきとーに自動作成しときゃいいのに、
あんなに設定項目を出されたら、「ウッ」とくるわな。
0400デフォルトの名無しさん
NGNGえー、
0:色づけ(おまけ)
1:概観
2:検索
3:リソーススクリプト生成
4:生成されてスクリプト、ヘッダつき
5:32ビットスケルトン生成と生成されてソースの一部
(一切手を加えず即コンパイル化)
6:メニューリソーススクリプト(おまけ)
7:表示中ファイルの簡易コンパイル
8:関数一覧(飛べる)
9:クリップボード代わりのキャプチャ
10:コンパイラ設定(初心者には超面倒だから)
11:ドスコマンド(単一行)
12:11の実行例
13:同じく
14:ドスコマンド(マクロっぽい方)
15:実行例。
ほかにもあるしなぁ、複数ファイルは使えるし、
使い勝手も悪くない、ようにつくったつもりだしなぁ
あぁ、まだコメントがたりねー!
0401デフォルトの名無しさん
NGNG確かにね。一応初心者仕様でつくったから、
説明に、「わからないところはそのままでOK」の
ようなことを書くつもり。確かに。うん。
現に、わからなければ全部放っておいて大丈夫なように作ってある。
さんくす。
0402デフォルトの名無しさん
NGNGジャンプ、挿入、DOS実行、DOS実行拡張版、
その他、が登録できる。それはクリックですぐできるのさ!
0403デフォルトの名無しさん
NGNGモニターの人には完成版をただであげます。
モニター版には変なデバッグ板とかついてて少し邪魔
だけど我慢してください。
気合のある人は書きこしてみてください。
初心者には便利(フリーコンパイラ仕様)
0404デフォルトの名無しさん
NGNGこれでこれを作ったしな!一から。
最初はポインタもわかんなかったんだぞ!
だから俺は初心者の見方だ!(です)
0405デフォルトの名無しさん
NGNGボタンがベタベタひっついてるのは、
普通のWindowsアプリとはかけ離れてるなぁ。
激しく違和感を感じる。
0406デフォルトの名無しさん
NGNG思ったんだけど、レバーコントロール覚えたて
だったからレバーにした。これはレバーだよ。。。
0407デフォルトの名無しさん
NGNGうざくて悪いけど、デフォルトではボタン2つ
(top)へジャンプ、(End)へジャンプ、だけなんだ。
レバーのとこで右クリックすると作れるんだ。
あとコンボボックスにはデフォルトでは
explorer.exeとか、mspaint.exeとかが入ってて選択すると
実行できるんだ。もちろんコンボボックスに書き入れても
えー、なんていえばいいのかな、Dosプロセスを実行できる。
でそれは記録される。(「設定」で削除もできる。)
ということなんだ。
0408デフォルトの名無しさん
NGNG追加
http://members.tripod.co.jp/navi_16.jpg
17.jpg,..19.jpg
初心者の人は0からみろ!つーか見てちょ
あぁ、、
17:(色ついてるけど)簡易インデント
あぁ、色は全文か、選択範囲があればそこだけ。({}と、””と()と、
/* */と//
18:プロセスも表示する。
19:バイナリビューア
叩いてくれ!是非!
0409デフォルトの名無しさん
NGNGhttp://members.tripod.co.jp/navi_/16.jpg
なにしろ久々なのでがんがんです。
0410デフォルトの名無しさん
NGNG0411デフォルトの名無しさん
NGNG金は、取る。
確かになぁ、ボタンいっぱいついてるとちゃちくみえるよなぁ、
どうすっかなぁ、ボタン、あったほうが絶対便利なのは確か
だからさ。どーしたらいい?
0412デフォルトの名無しさん
NGNG自分でページ立ち上げるか、せめて別スレ立ててやってくれ。
0413デフォルトの名無しさん
NGNG関係ありありだね!
大体ポインタもわからなかった俺がAPIとC言語込みで
フリーコンパイラからすべてを始めたときの
情報源としてのここは大きかったんだぜ!
俺の書きこいっぱいあるからここは俺にとって
ホームグラウンドなのさ!
うーん、だから、関係あるのさ!(強引)
0414デフォルトの名無しさん
NGNGレバーコントロールCCS_rightとかで
REBARCLASSNAMEした方がいいかな?
0415デフォルトの名無しさん
NGNGやっぱりスタティックコントロールにしようかな。
売り物にするんだったらそれくらは、やらないとだめかな?
機能は変わらないんだけどな!
0416デフォルトの名無しさん
NGNGhttp://members.tripod.co.jp/navi_/21.jpg
http://members.tripod.co.jp/navi_/20.jpg
だってこれならまだ金払う気になるべ?
だべ?フォント変えただけだけどさ。
宣伝するときはそーしよぉっと!ナイスサンキュー
もっとくれ、もっとくれ!
0417デフォルトの名無しさん
NGNG0418デフォルトの名無しさん
NGNGどれが394の発言でどれがそれに対する意見なのかさっぱりわからん。
0419デフォルトの名無しさん
NGNG今後しばらくそうするよう勤ます。
0420デフォルトの名無しさん
NGNG(即効忘れる俺に乾杯)
0421デフォルトの名無しさん
NGNGしかも、教えて貰っていた側となると、事実上特定
できるのはないか。
0422デフォルトの名無しさん
NGNGどーでもいいもんさ。
そう、うん、去年の10月くらいに現れた
ポインタも知らぬ僕チンでした。
まぁ、作品の話がしたいし、もっと人あつまってこねーかなぁ。
0423デフォルトの名無しさん
NGNG明らかにテンションが変わっているが、しょうがないだろぉ!
悲しいリリースなんてしたくないからな!
テンション上げていこー!
0424デフォルトの名無しさん
NGNG0425デフォルトの名無しさん
NGNGWM_QUITとかPostThreadMessageしてないんですけど・・・・
0426デフォルトの名無しさん
NGNG0427デフォルトの名無しさん
NGNGヘルプの方も着手してんだ。
どうせ高度な機能しか興味ないんだろ?わかったよ、高度な方も
さっき書いてみたから覗いてみたくなっちゃったら言っちゃってくれ。
(ください)役に立てることがあったら俺もお役にたっちゃうからさ。
0428デフォルトの名無しさん
NGNG0429デフォルトの名無しさん
NGNG0430デフォルトの名無しさん
NGNGぜんぜんねーよな
comだって使える優れものなのにな
フリーコンパイラだけでなんでもできんじゃんか、よかったほっとした、
感動した。
0431デフォルトの名無しさん
NGNGやりかたをざっと教えてくれませんか?
0432デフォルトの名無しさん
NGNG0433デフォルトの名無しさん
NGNG今とりあえずHTMLで作ってるけどさぁ。
とりあえず今はあんまり出回ってなくて入手
しづらかったけど、hcw403.exeはあるんだ。
そこからなんだよねぇ(笑)
0434デフォルトの名無しさん
NGNGベクターあたりでエディタ拾ってくる。
0435デフォルトの名無しさん
NGNG0436デフォルトの名無しさん
NGNGWord で RTF を作って、Help Workshop にかける。MS Press から一冊だけ WinHelp
の解説本が出てたと思う。
リンクとかポップアップで表示される情報なんかは脚注記号使って埋めることが要求
されるんで Word で直接作業してたらはっきり言って「やってられん」よ。昔、俺が仕
事でヘルプを書いたときは、簡単な
マークアップ言語 -> RTF トランスレータ
を作って作業してたけど。
でも今なら HTML Help にした方が良いと思うけどな。利用者の立場から考えても、
WinHelp はユーザインターフェースがイマイチで使いづらい気がする。重いのは確
かだけど、
簡単なヘルプはコンテキストヘルプ(ウィンドウ右上の [?] で表示させるヤツね)
本格的なドキュメントは HTML Help
としとけば、それほど気にならないと思う。
0437デフォルトの名無しさん
NGNG0438デフォルトの名無しさん
NGNGコメント・表題・作成者・カテゴリ・キーワードなどの
情報を付加することができますが
この情報にアクセスするAPIは何ですか?
0439デフォルトの名無しさん
NGNG点滅そのものは、
.dwFlags = FLASHW_ALL Or FLASHW_TIMER
でフォームの起動時からずっと点滅させっぱなしにしてるんですが、問題は
その点滅をとめるときです。
フォームをクリックしたときなど、何らかのイベントが発生したときに、
.dwFlags = FLASHW_STOP
で点滅をとめることができるというところまではMSDNで調べました。
問題は、そのフォームがSDIフォームか、MDI子フォームかで動作に差が
出るということなんです。
SDIフォームでは点滅をとめたときにそのフォームがアクティブの状態に
なって点滅がとまるんですが、MDI子フォームでは非アクティブの状態に
なって点滅がとまってしまいます。(プログラム上ではアクティブであることは
確認済み)
これはなぜなんでしょうか?皆様のお知恵を拝借させてください。
開発環境はWindows2000、Visual Basic6.0(SP5)です。
0440デフォルトの名無しさん
NGNGこれかな?
http://msdn.microsoft.com/library/en-us/com/stgrintf_8wq6.asp
0441デフォルトの名無しさん
NGNG0442デフォルトの名無しさん
NGNGこれってWin2000やXPでも通用するモノなんですか?
0443デフォルトの名無しさん
NGNG0444デフォルトの名無しさん
NGNGそれは古本か? 持っていた人間が不要だから手放す物の典型のような...
0445442
NGNGいや。新品買おうと思ってた・・・
古本でもいいな・・
んで、Win2000とかXPでもイケルの?
実はTAPIの情報だけが欲しいのだが、それ関係の情報が載ってんの
この本しか見つからなくて・・・
他にいいのあったら教えてクサイ。もち日本で・・・
0446442
NGNG×もち日本で・・・
○もち日本語で・・・
0447デフォルトの名無しさん
NGNG0448デフォルトの名無しさん
NGNGでもAPIって全部基本的に英語じゃんかぁ、
LCCの無料版ヘルプ落としとけば?一応だけど。
2000、XP<<どうかなぁ、APIはだいたい
全部のぷラットフォームで共通してるから、大丈夫
なんじゃないの?OKっしょ。俺も欲しい、それ。
一冊おいて置けばかなり安心だよなぁ。TAPIってなんだっけ、
わすれちった。PSAPIのやつはWin2000専用のAPIとかもあるけどなぁ。
OKおっけー。買っとけよ。
0449デフォルトの名無しさん
NGNG我流の方法で知識を深めているのでラップの意味がわかりません。
0450デフォルトの名無しさん
NGNGまぁねぇ、、プログラムする人の癖にもよるんだよなぁ、
でも俺はいまだに検索ばりばりつかうし、ボタンもばりばりつかうんだよな、
このボタンはさ、ジャンプボタンだから。ちょっとしたとき、
右くりで簡単に位置記憶して、すぐ戻ってこれるためだからなぁ、俺自身
多用するんだよなぁ、でもなぁ、見た人はちょっと考えちゃうよなぁ、
結局絶対使うはずなんだけどなぁ、宣伝するときだけSW_HIDEしようかな。
0451442
NGNGさんきゅ。ちょっと安心したよ。
TAPIは照れフォニィAPI。
CTIなアプリを自作しようと思って・・・
でもMSにTAPIをラップしたOCX落っこちてたから
こっち使うかも・・・
ttp://www.microsoft.com/japan/business/ct/act/acthome.asp
0452デフォルトの名無しさん
NGNGそのハンドルを取得し、終了までWaitForSingleObjectで待つ」
といった、ありがちなプログラムなのですが、プロセスBからさらに
さらにShellExecute()で別のプロセスCを起動しようとすると、
ロック状態に陥ってしまい、プロセスCが正しく起動されません。
・WaitForSingleObjectで待つ処理を抜けば正常動作します。
・完全にロックかと思いきや、なぜか30秒後ぐらいにプロセスCが
正常に実行されます。(タイムアウト?)
・プロセスAを経由せずに直接プロセスBから起動すれば問題なし。
・ShellExecuteでなくてCreateProcessを使用すれば問題なし。
このような場合の回避策は存在するのでしょうか?
0453デフォルトの名無しさん
NGNG起動するプログラムと監視するプログラムは分けたほうが無難じゃないですか?
もっともおんなじ様なプログラムでWin2KでもWin98でも特に問題はないので
変数とかなにかメモリ処理とかあるいはなんか基本的なミスを起こしているように思うのでけど
0454デフォルトの名無しさん
NGNGなにその現象、わかんねー!!!
0455デフォルトの名無しさん
NGNG>>454
わかりにくくて、すいません(^_^;)
やろうとしていることを整理?しますと、
1.ボタンを押したらShellExecute()でURLを開くアプリを作成
2.このアプリを別のアプリからCreateProcessで起動すると
ShellExecuteの実行に時間がかかる(30秒)
というものです。
WaitForSingleObjectでプロセスの終了を待っている訳ですが、
何故かShellExcuteの実行にまで影響を及ぼしているようです。
0456デフォルトの名無しさん
NGNG試してみたけど再現不能だった。
何か別の原因があったりしない?
0457デフォルトの名無しさん
NGNG・すでに標準ブラウザが起動しているかどうかチェックするために
ShellExecuteがDDEメッセージをブロードキャスト
・WaitForSingleObjectで終了を待っているためメッセージに
応答できない
・タイムアウトまでロック
という筋書きかと。
対策としては
1. 終了待ち専用のスレッドを作る。
2. MsgWaitForMultipleObjectsを使う。
お好きなほうをどうぞ。
0458デフォルトの名無しさん
NGNGありがとうございます。
ご教授いただいた筋書きが濃厚のようです。
試しに、URL指定でなく、通常の単なるEXEの起動であれば
>>452
の問題は一切発生しません。
(ShellExecuteを単なるプロセスの起動と思い込んでいました・・・)
対策の方、試してみます。
0459デフォルトの名無しさん
NGNGexeの起動ならDDEは使わないからね。
0460デフォルトの名無しさん
NGNGしかし コンソールアプリじゃつまんない!
ということで APIをやりたいとおもったのですが
そもそも書籍自体少ない・・・しかも いいのか悪いのか見抜ける目はもってません
本といわず、APIをはじめるにはいったいなにから手をつけたらいいのでしょうか・・・
0461デフォルトの名無しさん
NGNG0462デフォルトの名無しさん
NGNG”重たい”って欠点しか見付かりません。
0463デフォルトの名無しさん
NGNGまぁ真面目に考えてみると
「RTFよりHTMLの方が馴染みがあって書きやすい」
「左に常に目次が出てて便利」
ってことくらいかなぁ。自分もあまり好きじゃないですHTMLヘルプ。
0464デフォルトの名無しさん
NGNG個別に右クリックして画像表示することもできないのは大きなマイナス。
いちいちインターネットオプションで画像表示を有効にしないといけない。
利点じゃなくてスマソ。
0465デフォルトの名無しさん
NGNGMsgWaitForMultipleObjects を使用してDDEメッセージを受け取り、
空読みさせることで解決しました。
MSDNな内容だったようで、
[SDK32] ブロードキャストプロセスでデッドロックが発生
文書番号: J041073
にも詳細な解説がありました。
どうもありがとうございました。
0466デフォルトの名無しさん
NGNG逆に HFONT から LOGFONT を取得する API はありますか?
0467デフォルトの名無しさん
NGNG0468デフォルトの名無しさん
NGNGMFC(CFont) -> GetLogFont
0469デフォルトの名無しさん
NGNG猫でもはとってもいいよね。っていか
始めるにはあれしかないっしょ。
APIはすげーいいと思うよ。あれ、簡単だよ。
C++のクラスとかオブジェクトとかはぜんぜん難しい
っつーか面倒くさいけど、APIは、楽。確かに最初は
なんでも抵抗あるけどさ。でも思えば、ダイアログボックス
出すにしてもなんにしても、最初は面倒だったよなぁ、
だから俺は・・・・エディタを作ったんだぴょん
APIの本は、関数の一覧とか、ライブラリの表とか
が載ってればそれだけでいいと思うよ。
使えるコントロール、つーか、エディットボックスとか
リストボックスとかのことだけど、種類は24?だったし、
あとはやりたいこと次第で関数探せばいいだけだから。
APIやってて結構つまづくところってあるけど、そんな
ことが載った都合のいい本なんてないし、俺もそのうち
つくるけどそーいうのはインターネットの方が遥かに
情報力あるしなぁ。今でもAPI関数表載った本欲しいよ。
買ってくれ。
0470デフォルトの名無しさん
NGNG起動してるんですけど、言ってみればマニュアルどーり
のことやってるんですけど、起動時にフロッピーディスク
のアクセス音とかが鳴るんですけど無駄なんでどうにかしたいんです。
SECURITY_ATTRIBUTESとかもいろいろやってみたんですけど
アクセス音は止まりません。どーにかならないでしょうか。
0471デフォルトの名無しさん
NGNG%TEMP%があらぬところを指してたりしないか?
0472デフォルトの名無しさん
NGNGこんなことありえないのかな?
それとも、常識すぎるのか…
0473デフォルトの名無しさん
NGNGでもこれがNULLなんだけど、
その時はcalling processの環境変数を使うって書いて
ある。し、そういえば、特にパイプ使わないときは
アクセス音かりかりいわないんだよなぁ。
FlashWindowわかんないけどさ、
クリックしたからクリックしたところのWindowが
アクティブになってるとかしか思い浮かばない。すまないねぇ。
0474デフォルトの名無しさん
NGNG現在CreateProcess()でFtp.exeを子プロセスとし、
パイプ処理を行い、ファイルからスクリプトを読み込むようなプログラムを
組んでいるのですが、「open ServerName」と書いたスクリプトファイルを
ReadFile()で読み込みパイプにWriteFile()で書き込むと、
子プロセスからの出力が
”User (server:(none)): Passward:”
と一気にパスワードの入力まで返ってきます。
”Connected to server.
220 ServerName.*.* FTP Server 〜
User (server:(none)): ”
というように本来はユーザー名の入力待ちにして、ユーザー名・パスワードを
スクリプトファイルから順に読み込んでいくようにしたいのですが、
初めからうまく表示できない(”220〜”も表示できてない)
状況が続いてます。
スクリプトファイルに、
「open ServerName
username
passward」
と書いていても結果は同じなんですけど、
原因がわかる方いませんか?
0475デフォルトの名無しさん
NGNG0476デフォルトの名無しさん
NGNG本来、アクティブ/非アクティブになることができるのはトップレベルの
ウィンドウだけだから。
MDIの場合は、MDIクライアントウィンドウがアクティブ状態を管理して
あたかも子ウィンドウが個別にアクティブになっているかのように
見せているだけだから、MDIクライアントを通さずに勝手にアクティブに
しようとしても失敗する。
とりあえず WM_MDIACTIVATE を送りなおしてみてはどうか。
0477デフォルトの名無しさん
NGNG>>476
サンクス。いわれてみたら確かにそのとおりだと思う。
とりあえずいただいたヒントを元にもう一回試してみます。
本当にありがとうございます。
0478デフォルトの名無しさん
NGNG0479デフォルトの名無しさん
NGNGメッセージが来ていても来ていなくても一定時間毎に処理したい
(ちょっと事情があってタイマーじゃ役不足)ので GetMessage から PeekMessage に変えてみたのですが、
処理時間を食いすぎて余計にレスポンスが悪くなってしまいました。
そこで Sleep を使いたいのですが、これで待つと メッセージまで処理できなくなるので…。
メッセージがきたら再開する Sleep があるとすごく助かるのですが
こういう事ってできないでしょうか?よろしくお願いします。
0480デフォルトの名無しさん
NGNG0481479
NGNG何故か Pascal のコードばかり出てきます。これってVCLのメソッドですか?
0482デフォルトの名無しさん
NGNGMSDNライブラリ/PlatformSDK Documentationで引かないか?
MsgWaitForMultipleObjectsと全部書かねば理解できないか?
0483デフォルトの名無しさん
NGNGMsgWaitForMultipleObjectsにタイムアウト指定できたような。
>タイマーじゃ役不足
タイマーじゃ高精度すぎてもったいない?
0484デフォルトの名無しさん
NGNGつまりメッセージID(uMsg) から WM_ACTIVATE とか文字列が出る
0485デフォルトの名無しさん
NGNGどのみち出ません。
0486デフォルトの名無しさん
NGNGダイアログボックスをモーダルで立ち上げて、
立ち上げた時、自動的に「OK」ボタンを押すようにするには
どうしたらいいのでしょう?
WM_CREATEの中でSendMessage()を使ってOKを送ると、
ダイアログが表示されてくれません。(シングルスレッドで)
WM_TIMERで無理やりSendMessage()を送るのも考えましたが
正攻法ではないような気がして躊躇してます。
よろしくご教授お願いします。
0488486
NGNGWebにアクセスする時間がかかる部分でプログレスバーで進行状況を
出してるのですが、ある条件の場合は、無条件でダウンロードを実行したいのです。
普通はOKを押す仕様なのですが、特殊な場合はこの関数を流用したいのですが・・・。
0489デフォルトの名無しさん
NGNGPostMessage
0490デフォルトの名無しさん
NGNG一応聞くけど、それってやばいプログラムなんじゃないの?ありり?
0492デフォルトの名無しさん
NGNGえーと、そのダイアログはOKボタン押すと閉じる仕様デスか?
だとしたら、画面に表示されるやいなや目にも止まらぬ早さで
消え去るのはまったく当然のことと思われ。
一定時間表示されてから消えるようにしたいということだったら
タイマー使うしかないでしょう。
0493デフォルトの名無しさん
NGNGいや、OKを押すと10秒ぐらいかかるダウンロード処理に入るですが、
下のようにPostを使うと、ダウンロード処理は正常に行われるのですが
ダイアログ(プログレスバーがついている)は表示されないのです。
で、処理が終わってダイアログは一度も出てきません。
LRESULT CALLBACK DownloadProc( HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam )
{
switch( msg ) {
case WM_INITDIALOG:
SendDlgItemMessage(hDlg, IDC_HOGE, CB_INSERTSTRING, 0, (LPARAM)"HOGE");
・・・ダイアログの設定など
PostMessage( hDlg, WM_COMMAND,IDOK,0);
return TRUE;
case WM_COMMAND:
switch ( LOWORD(wParam) ){
case IDOK:
ダウンロード処理(プログレスバー書き換えなど)
0494デフォルトの名無しさん
NGNGそれはあれだ、ダウンロードの間メッセージを処理してないから。
(a) ダウンロード処理の中でメッセージループを回す
(b) 別スレッドでダウンロードする
お好きな方をどうぞ。「ダイアログで時間のかかる処理をするには」とかで
検索すればサンプルが見つかるでしょう。
0495デフォルトの名無しさん
NGNGうーん一応、途中でダウンロードの中止ボタンが押せるように
(a)のループはこんな感じで回しているのですが・・・。
for (i=0;i<100;i++) { // 1回だけだと再描画やキャンセルが鈍い
if ( PeekMessage(&msg, NULL, 0, 0, PM_REMOVE) ) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
もう少し(b)の別スレッド方式も含めて検索してみます。
0496デフォルトの名無しさん
NGNG素直に while( PeekMessage() ) { ... } で回した方がいいんでないのか?
メッセージが無くなりゃちゃんと帰ってくるし。
0497デフォルトの名無しさん
NGNGfor() でタイミング調整かよ!
BASIC 時代を思い出したよ
0498デフォルトの名無しさん
NGNGPeekMessage を PM_NOREMOVE にしてメッセージがある場合は
GetMessage, ない場合には指定の処理(関数ポインタとかでうまく処理する)
っていうのはどうでしょう。
0500デフォルトの名無しさん
NGNGttp://www.kumei.ne.jp/c_lang/
0502デフォルトの名無しさん
NGNG0504デフォルトの名無しさん
NGNG0505デフォルトの名無しさん
NGNGPlatform SDK についてくるドキュメント
HTML Help 形式だが、HTML にばらせると思われ
0506499
NGNGAPI バイブルに載ってない API の詳しいリスト。(しかも、コード例なども)
>> 504
0507デフォルトの名無しさん
NGNG0508デフォルトの名無しさん
NGNGhttp://msdn.microsoft.com/library/en-us/win32/append_4cs3.asp
http://msdn.microsoft.com/library/en-us/win32/funcrel_5f6t.asp
0509499
NGNGAPI バイブルは本当に出来がいい。これと同じくらいの Web 版ない。
無ければ、本とかでも紹介してくれ。 >> 507,508
0510デフォルトの名無しさん
NGNGMSDN以外は俺も知らんな。
いい本があればこっちが教えて欲しい。
0511デフォルトの名無しさん
NGNGCreateThread()で作ったスレッドからCランタイムライブラリの関数呼ぶと
メモリリークが起こるんですよね?(と、MSDNライブラリに書いてある)
ではnewも出来ないのでしょうか? なんとなく中でmalloc()してそうだし。。。
# だめなら _beginthread() 使います
0512デフォルトの名無しさん
NGNG理由が聞きたい
0513デフォルトの名無しさん
NGNGまー気分の問題だから、まずければ_beginthread*()使うんだけど
あの…どの辺りに書いてありましたか?
プラットフォームSDKのCreateThreadの中に、Cランタイムライブラリの
関数を使うスレッドは〜を使う様にしてください。 と記述されてましたが、
リークに関する記述は見つからず…
0515511
NGNG0516511
NGNGhttp://www.microsoft.com/japan/developer/library/default.asp?URL=/japan/developer/library/jpwinpf/_win32_createthread.htm
から、引用
「C のランタイムライブラリに記録されている関数を使うスレッドは、CreateThread 関数と ExitThread 関数ではなく、C のランタイム関数である beginthread 関数と endthread 関数を使うべきです。
この方法に従わないと、ExitThread 関数を呼び出したときにわずかなメモリリークが発生します。」
0517デフォルトの名無しさん
NGNGプロジェクトの設定の中のC/C++の
使用するランタイムライブラリはマルチスレッドの設定にしてる?
0518514
NGNG0519デフォルトの名無しさん
NGNG0520511
NGNGどうも納得がいかないんです。
だって、スレッドなんてめちゃOS依存なんだから、APIでやるべき。
セマフォとかミューテックスはAPIなのに、なんでスレッドだけ
Cランタイムライブラリ(CRT)の関数使うの? なんだかなー・・
というわけでCRT抜きでやろうとしてたんだけど、よく考えたら
C++のnewがmalloc()使ってるんじゃないかと。じゃあnewも出来ないのだろうか?
誰か同じようなこと考えた人いるなら教えてアロエリーナ
0521デフォルトの名無しさん
NGNG> なんでスレッドだけ Cランタイムライブラリ(CRT)の関数使うの?
C Runtime Library 関数が、事前に内部データが初期化されていることを前提としてる
から。シングルスレッドの場合には (w)WinMain を呼ぶ前に初期化コードが実行される
んだが、マルチスレッドだと
スレッド単位で初期化が必要なデータ
が存在するため、CreateThread と同時に初期化処理を実行する必要がある。
> C++のnewがmalloc()使ってるんじゃないかと。
たしか malloc() はスレッド毎の初期化は不要だった気がするんだが、もし必要な場合
でも
自前で HeapAlloc, HeapFree なんかの API を使って operator new() を実装する
で問題ないでしょ。
0522デフォルトの名無しさん
NGNGCランタイムが何やってるかなんてOSが知るわけないんだから
初期化や後始末はCランタイムじゃなきゃできるわけないだろ。
_beginthreadex()だってCreateThread()を最終的に呼び出すに
決まってるだろ。
意味不明なたわごとでスレを汚すなボケ。
0523511
NGNGありがとうございます。非常によく分かった。
http://support.microsoft.com/support/kb/articles/Q104/6/41.ASP
ここにも同じ事書いてあるね。
つまり静的な領域が必要な関数用に確保した70〜80バイトがリークするらしい。
例えばerrnoをセットする関数、静的バッファを返す関数(ctimeとか)などがまずいようだ。
これをみるとmalloc()は大丈夫っぽい。
動的にスレッド起動終了をしないような設計にすることでごまかすことにします。
> もし必要な場合でも
> 自前で HeapAlloc, HeapFree なんかの API を使って operator new() を実装する
> で問題ないでしょ。
やっぱ最後はそれですか。。。
0525デフォルトの名無しさん
NGNG分かってるくせに意味不明な質問をする荒らしということですね。
とっとと消えろ。
0526デフォルトの名無しさん
NGNGマルチスレッドライブラリのほとんどの関数は再入を防ぐために
使うクリティカルセクションの初期化が必要だと思うが。
正直>>522を当たり前の前提だとほざいておきながら
_beginthreadex()の何をそこまで嫌がるのかさっぱりだね。
勝手にメモリリークでも競合条件によるデータ破壊にでも悩んでろ。
0527デフォルトの名無しさん
NGNGクリティカルセクションはスレッド間で共有するから、CRT のスタートアップルーチンで
初期化してると思う。
> _beginthreadex()の何をそこまで嫌がるのかさっぱりだね。
まったくもって謎ですな。
0528デフォルトの名無しさん
NGNGで何してるかくらいわかるだろ。
それ見て自分で判断しろよ。こんなところまでわざわざ聞きに
来てるのは何か問題が起きたときの責任転嫁でもしたいからか?
0529511
NGNG524は確かにこっちが悪かった。調べていくうちに分かったことなのに
煽り口調で書かれたので(522)、ついやっちゃった。すいません
> マルチスレッドライブラリのほとんどの関数は再入を防ぐために
> 使うクリティカルセクションの初期化が必要だと思うが。
何故クリティカルセクションが必要なのか分からない。
ここでいうマルチスレッドライブラリが何指してるのかわからんのだけど、
文脈から言ってCRTだよね?
> 競合条件によるデータ破壊
これはどういう場合に起こるのか考えつかない。
複雑な場合を考えれば2次的なものとしては考えつくけど、直接的には?
まさかロックし忘れの話じゃないよね?
_beginthreadex()が嫌な理由はもうすでに書いた。
http://www.microsoft.com/msj/0799/win32/win32textfigs.htm
0531デフォルトの名無しさん
NGNG> 何故クリティカルセクションが必要なのか分からない。
……マジ?
0533デフォルトの名無しさん
NGNG>>529
マルチスレッド版って、中でそれなりに排他処理してるからマルチスレッド版なのだが。
MutexかCriticalSectionだかは内部で必要に決まっておろう。
MT対応のランタイムライブラリ呼ぶときも全部自前でロックする気なのかキミは?
0536デフォルトの名無しさん
NGNGたとえば malloc() あたりの関数を考えて欲しいんだが、Win32 だと大抵
1. 大きなメモリサイズを要求されたら HeapAlloc() API に投げる
2. 小さなメモリサイズの場合には、一定サイズを HelpAlloc() で確保しておいて、
それを細分して malloc() してきた関数に渡す
という実装になってる(全部 HeapAlloc() 丸投げだとパフォーマンスも、メモリ利用
効率も落ちるから)。
これを実現するためには malloc() はどこかに
HeapAlloc() でとってきたメモリの塊
そのうち、クライアントに渡してあるもの
なんかを記録しておく必要があるわけだが、このデータを複数のスレッドが同時に
触ったら、滅茶苦茶になってしまうでしょ?
0537511
NGNGよく分かりました、ありがとう。僕が間違ってました。
例として出したものに対して聞くのは悪い気がするんだけど、
HeapCreate()が重い処理をやっているだけで、
HeapAlloc()の方は大したことやってない気がする。
malloc()の実装と同じじゃないんだろうか?
カーネル呼び出しのオーバーヘッドより処理の無駄の方が。。。
つまり何が言いたいかというと、malloc()はHeapAlloc()をラップするだけで
いいのでは?
# お門違いなら無視してくださっても結構です。
0538デフォルトの名無しさん
NGNG実際に HeapAlloc/HeapFree と malloc/free を100万回ずつ呼んで
試してみると分かると思う。全然速度が違うよ。
0539デフォルトの名無しさん
NGNG関数呼び出しと、カーネル呼び出しを比較すると、一桁ぐらいは実行時間に差が出る
のが一般的(詳細はプロセッサアーキテクチャや OS の実装によるけど)。単にカー
ネルモードに切り替えるだけでも
特権モードへの遷移+割り込みレベルを上げる
割り込み/トラップフレームの作成
ユーザモードのレジスタの退避、カーネルモードレジスタの読み込み
割り込み内容のディスパッチ
割り込みレベルを下げる
などなど準備がいろいろ必要になる上、セキュリティ上の要請から、カーネルモード
ではユーザの渡してきたデータを細かく検証する必要があるから、どうしても処理は
複雑になる。
想像であれこれ言う前に、少し勉強した方が効率がいいと思うぞ。Tanenbaum 先生
の OS 本とかヘネシー&パターソン本、Lion's Commentary on UNIX あたりを読ん
でみ。(質問してることを見る限り、おそらく、楽しんで読めると思うし)
0540デフォルトの名無しさん
NGNGまあ実際に効率悪いのなら其の通りなんだろうけど。
0541539
NGNGWin32 API は、UNIX でいうところのシステムコール(カーネルモードへのエントリ
ポイント)では *ない* んだよね。実際のシステムコール相当のコードは、Win NT
系列なら大半は ntdll.dll に入ってる。
kernel32.dll は ntdll.dll を使う、高次のライブラリって感じ。
0542511
NGNG#include <windows.h>
#include <stdio.h>
const int COUNT = 1000;
int main()
{
HANDLE hHeap = GetProcessHeap();
char* buff;
unsigned int start, heap1 = 0, heap2 = 0, crt = 0;
int i, j;
for (j = 0; j < 100000; j++) {
start = timeGetTime();
for (i = 0; i < COUNT; i++) {
buff = HeapAlloc(hHeap, 0, 100);
HeapFree(hHeap, 0, buff);
}
heap1 += timeGetTime() - start;
start = timeGetTime();
for (i = 0; i < COUNT; i++) {
buff = HeapAlloc(hHeap, HEAP_NO_SERIALIZE, 100);
HeapFree(hHeap, HEAP_NO_SERIALIZE, buff);
}
heap2 += timeGetTime() - start;
start = timeGetTime();
for (i = 0; i < COUNT; i++) {
buff = malloc(100);
free(buff);
}
crt += timeGetTime() - start;
}
printf(" heap1: %d\n heap2: %d\n crt: %d\n", heap1, heap2, crt);
return 0;
}
結果:
heap1: 27816
heap2: 29181
crt: 14736
結局malloc()よりHeapAlloc()の方が約1.9倍遅かったです。
謎なのはHEAP_NO_SERIALIZEをつけた方が遅いって事なんですが。。。ううむ
0543デフォルトの名無しさん
NGNG分かりやすい!サンクス
0544511
NGNGコンパイラ: Borland C++ Compiler 5.5.1
0545511
NGNGhttp://www.yfcbookshelf.com/operatingsystem's%20books1.htm
この本よね。著者の名前だけ憶えてました。
実は専門はこっちなんで、買って読んでみます。ありがとう
# 表紙がなんだかちょっとアレだ
0546デフォルトの名無しさん
NGNGプライオリティを下げても、cpu使用率が100%になってしまいます。
どうすればcpu使用率を下げたまま、そのようなスレッドを動作させることが
できるのでしょうか。
0547デフォルトの名無しさん
NGNGSleep(0) 入れるか、
フラグをイベントかミューテックに変えて
WaitoForSingleObject() で待つようにしろ。
0548547
NGNG0549デフォルトの名無しさん
NGNG0551デフォルトの名無しさん
NGNGm_Button = ::CreateWindow("BUTTON", ...);
でボタンとかを作ったときに、そのボタンからのメッセージを受け取りたいときは
どうすればよいのでしょうか。(ちなみに、リソースファイルを使わないということで考えています。)
0552デフォルトの名無しさん
NGNGとして送られるよ。
0553デフォルトの名無しさん
NGNG存在するとして、そのリザルトセットの
内容をそのまま、コレクションオブジェクトに再格納します。
その場合、元となったリザルトセットと1000レコードが格納されたコレクションは
どちらが、メモリを多く消費しているのでしょうか?
リザルトセットは、内部にヴァリアントを多く抱えているので、
メモリ消費量が大きいような気がしますが。
このような、メモリ使用量を測定するようなAPIもしくは方法を探しています。
DBから取得したレコードはやはりコレクションに格納したほうがいいのでしょうか?
リザルトセットのままでもいいような気がするのですが。
1000レコード中か目標の1レコードを取得するのにかかる
時間は、やっぱりコレクションのほうが早いのでしょうか?
また、コレクションは、JAVAのようにインデックスに
ハッシュテーブルを作成しているのですか?
色々聞いてしまって申し訳ありません。
0554デフォルトの名無しさん
NGNGありがとうございます。やってみます。何かあったらまた質問させてください。
0555511
NGNG32ビットマルチスレッドターゲットのオプション忘れてた。。。鬱
●マルチスレッドのオプション(-tWM)無し
・HeapAlloc(シリアライズ版)……27661
・HeapAlloc(シリアライズ無し版)……28458
・malloc……15343
# 断然mallocが速い
●オプションあり
・HeapAlloc(シリアライズ版)……27574
・HeapAlloc(シリアライズ無し版)……27698
・malloc……26175
# mallocが少し速い
>>536氏の言うとおり、
1, mallocのヒープ管理はプロセス単位
2, マルチスレッドの場合、クリティカルセクションが必要になるので
その分オーバーヘッド
BorlandとMicrosoftのCランタイムライブラリはやっぱ違うのかな
Visual C++だとどうなんでしょう?
他にもmemcpyとCopyMemoryも速度差がありました
# 100バイト以下ならforループでコピーした方が高速でした
CRTのソースは公開されてないんだろうか…
0556デフォルトの名無しさん
NGNGネタですか? だからもう消えろ。
0558デフォルトの名無しさん
NGNGインストールCDでも検索しろ
とっとと回線切って首吊って氏ね
0560デフォルトの名無しさん
NGNG公開されてるって言ってるだろうが
お前が入手できるかどうかなど知ったことではない
0561デフォルトの名無しさん
NGNGオマエ、つまんねーヤツだな(藁
0562デフォルトの名無しさん
NGNG0563デフォルトの名無しさん
NGNGどうやって実現してるのでしょうか?
Microsoftお得意の非公開APIですか?
0564デフォルトの名無しさん
NGNG> # 100バイト以下ならforループでコピーした方が高速でした
キャッシュに入ってる場合は repeat prefix を使って stosd で回すのが最速だと
思うけど。
それはともかく
> CRTのソースは公開されてないんだろうか…
VC6 あたりなら、製品を買うと大半はついてくる。
0565511
NGNGmovsdでは?
ちなみにglibcの方はアーキテクチャごとにアセンブリ言語で
実装されてました。
MSDNライブラリにも無いみたいなんで、VC++買うしか無いみたいですね。
どうもありがとうございました
0566デフォルトの名無しさん
NGNGFPU 使えば 8bytes 単位だかでコピーできたはず…
速いかは知らないけど
0567デフォルトの名無しさん
NGNG漏れも Borland C++ 5 で頑張ってる。お互い頑張ろうな。
0568デフォルトの名無しさん
NGNG>APIならButtonからのメッセージは親のWindowProcにWM_NOTIFY
WM_COMMAND
0569デフォルトの名無しさん
NGNGDLL化して動的に呼び出すとします。
描画は、psetやline、色設定などを連続的にコマンドを与えて実行する
タイプです。
そのときに、複数のプレーン(DCなど)で同時にこの描画ルーチンを
「独立して」呼び出したいばあいどうすればよいですか?
問題はグローバル変数を用いているので、変数がごっちゃになるということです。
別にライブラリはDLLでなくてもよいのですが、なにかよい
解決方法があれば教えてください。
0570デフォルトの名無しさん
NGNGグローバル変数を全部ひとつの構造体に入れて psetとかの関数の第一引数に構造体ポインタを渡す
のが一番簡単かと
0571デフォルトの名無しさん
NGNG0572電波じゃが?
NGNGスレ違いだと怒らんでくれ。
ネタだと罵らんでくれ。
頭は多少�dどるが。
0573デフォルトの名無しさん
NGNG0574569
NGNG必要なDC分だけDLLをコピーして使うようなソフトなんて逝ってよしですよね。
0575デフォルトの名無しさん
NGNGこれを日本語非対応のWindows 上で実行したときの挙動について
教えてください。
0576デフォルトの名無しさん
NGNG0577デフォルトの名無しさん
NGNGUNICODEが定義してあるという罠
0578デフォルトの名無しさん
NGNG#ifndef __MT__ で囲われてたんですけど、この __MT__ は勝手に define しちゃっていいんでしょうか?
「定義する時は **.h の前でしなければいけない」とか
「__MT__ は **.h で定義されてるので、それを include せよ」
とかいうのはあるのでしょうか?
0579578
NGNG正: #ifdef __MT__
0580デフォルトの名無しさん
NGNGなら、/MT /MTd /MD /MDdあたりのコンパイルオプションを
指定すれば自動的に定義されるはず。
0582デフォルトの名無しさん
NGNG0583578
NGNG-WM でうまくいきました。ありがとうございます。
ところで、コマンドラインから bcc32 って打ってもそんなコンパイルオプション
出てこなかったのですが、どこかにそういう情報ってあるんでしょうか?
0584デフォルトの名無しさん
NGNGヘルプファイルに書いてある。
0585デフォルトの名無しさん
NGNGUnicodeでない場合・・・文字化け
Unicodeの場合・・・日本語フォントがあれば出る、なければ出ない
0586デフォルトの名無しさん
NGNGUnicodeの場合もシステムフォントが日本語文字を持ってないから文字化け
0587585
NGNG0588デフォルトの名無しさん
NGNGシステムに日本語がインストールされてないと表示されないはず。
地域のオプションとかで指定する奴ね。
日本語環境でも韓国語とか表示できないのと一緒かと。
0589585
NGNGだからきっと英語Windowsでも日本語出るに違いない。
0590デフォルトの名無しさん
NGNG0591デフォルトの名無しさん
NGNG0592デフォルトの名無しさん
NGNG他のタイプのSETCURSELの様な…
ListView_*のそれらしき物かたっぱしから試してみましたが、
全く選択状態になってくれません。
0593デフォルトの名無しさん
NGNGListView_SetItemState で LVIS_SELECTED ビットを立てる。
0594デフォルトの名無しさん
NGNG0595デフォルトの名無しさん
NGNGそれはビルゲイツの陰謀ですね :)
マイクロソフトにジェット機で突っ込めば、解決します。
0596デフォルトの名無しさん
NGNG0598デフォルトの名無しさん
NGNG惜しい。LVIS_SELECTED, LVIS_SELECTED が正解。
なんでそうなるのかはサンプルとか見ながら考えてみてくれ。
0599592
NGNG立てなければ有効にならないんですね。
0600デフォルトの名無しさん
NGNGどうしたら良いんでしょうか?
CheckBoxに対して
SendMessage(WHND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
で
uMsgにBM_SETCHECKを、wParamにBST_CHECKED/BST_UNCHECKEDで
チェック状態の変更が出来ることまではわかったのですが
肝心のWindowハンドルを得る方法がわかりません。
0601デフォルトの名無しさん
NGNG0602デフォルトの名無しさん
NGNGダブルクォーテーションの対処がしんど過ぎます。
0603デフォルトの名無しさん
NGNGCommandLineToArgvW() というのはあるが、Unicode版専用。
0604デフォルトの名無しさん
NGNGNTでしか使えないみたいだし。
0605デフォルトの名無しさん
NGNG0606602
NGNGしかしワイド文字専用なんですね(;´Д`)
想定してるコマンドラインは、ファイルのD&D、手動での-n等の
オプションなのですが、一般的に、 "があったら何も考えずに
次の"迄飛ばして宜しいのでしょうか?
0607デフォルトの名無しさん
NGNGCheckRadioButton()
もあるYO
0608デフォルトの名無しさん
NGNGなぜCRTのソースコードから取ってこないんだろう?
0609デフォルトの名無しさん
NGNG「hoge.exe "c:\windows\" /a」
とかした場合、
argv[1] → c:\windows" /a
となって鬱になったことがある。
0610デフォルトの名無しさん
NGNG基本的な再生・停止はできたのですが、
MIDIの演奏位置を指定して途中から演奏したり、現在の演奏位置を取得したり、
ということはこのAPIは出来ないのでしょうか?
( Webでも調べてみたのですが、
どこもループ処理の仕方までしか載ってませんでした。)
・・・または、そもそも使うAPIが違うのでしょうか?
0611( _ 。。) _ バタ。
NGNG時間単位を予め set time format <FORMAT> で設定しておき
seek コマンドを発行してやれば途中から再生できます。
現在位置は status position で取得できますよ。
詳細はやはり、MAGURO-ONLINE で(^^;
(VCですがコマンド部分は共通のハズです…たぶん)
http://www2s.biglobe.ne.jp/~maekawa/dev/vc/mci/
0612610
NGNG教えてもらった通りやってみたら、
演奏位置の取得と、途中からの再生できました!
にしても、戻り値のバッファサイズとかも気にしないと
取得もちゃんとできないんですね。き、きびしい・・・
詳しいページまで紹介して頂いて、ありがとうございます。
0613デフォルトの名無しさん
NGNGCreateWindow()とDrawFrameControl()のどちらでも
ボタンやチェックボックスが作成できるようなんですが、
これらの違いって何なのでしょうか?
0614デフォルトの名無しさん
NGNGDrawFrameControlはチェックボックスそっくりの絵を描くだけ。
0615613
NGNGがーん。。。。
DrawFrameControl()で描画したチェックボックスを
操作する方法を必死に探していた自分って。。。。。
CreateWindow()で頑張ります。
情報どもでした
0616デフォルトの名無しさん
NGNGIME の編集バッファっていじれるんでしょうか?
ImmSetCompositionString() に SCS_SETSTR で書き込めば
一応バッファに文字を追加できました。
しかし、バッファ内の特定の文字を削除したり
カーソルの位置を移動したりする方法が見つかりません。
とりあえず、
ImmGetCompositionString() に GCS_CURSORPOS を渡せば
編集バッファ内のカーソルの位置は分かります。
ImmNotifyIME() に NI_COMPOSITIONSTR と CPS_CANCEL を渡せば
編集中のバッファを空に出来ます。
これらとあわせて keybd_event() で VK_〜 を送れば
それらしいことは出来るのですが
非常に泥臭いコーディングになってしまいます。
SetWindowsHookEx() で WH_KEYBOAR フックして
キーの入れ換えをするプログラムで使うため
なるべく上記の方法は避けたいのです。
IME の編集バッファを直接操作する
またはシステムの keyproc を通さずに
IME に直接 VK_〜 を食わせることは出来ないものでしょうか?
0617デフォルトの名無しさん
NGNGそのログをViewに表示させたいのですが、
この場合CreateProcess()とsystem()、(または別の関数?)
のどちらを使うと良いでしょうか?
ちなみにFTPとかTelnetなどを呼び出したいのです。
0619デフォルトの名無しさん
NGNGでもsystemがつかえるというなら、ふつーpipe。
0620617
NGNGCMD.exeなどの標準出力をViewに表示したいんです。
CreateProcess()で呼び出したCMD.exeにパイプを介して、
出力をViewに表示するということは可能ですか?
標準入力はスクリプトファイルからの読み込みを想定しているのですが、
いまはサンプルとして、
CreateProcess()/CMD.exe生成→コマンド読み込み→
WriteFile()/パイプに書き込み→ReadFile()/パイプから読み込み→
Viewに書き込み
という具合で書いているのですが、パイプからReadFile()で
読み込もうとするとデッドロックしてしまうんです。
0621デフォルトの名無しさん
NGNGスレッド使え。
0622デフォルトの名無しさん
NGNGIMEの編集バッファって
コンポジションウインドウのことかな?
IMEってコンポジションウインドウ展開時は
WM_KEYDOWMイベントを自分で受けて
コンポジションウインドウにイベント内容展開
しているんじゃなかったけ?
コンポジションウインドウ展開時なら
左右キーでカーソル動かせるし、
DELやバックスペースで任意の文字もけせるよ。
それじゃあかんの?
0623デフォルトの名無しさん
NGNG確か、peeknamedpipe使って確認してから
やらないとデッドロックが起きる問題があたーよ
0624617
NGNGスレッド使えとは??
0625デフォルトの名無しさん
NGNG別プロセスやっちゅーに。
0626デフォルトの名無しさん
NGNG読み込む部分を表示と別スレッドにしてしろ、って話じゃないのか?
0627617
NGNGデッドロックが起きる問題はpeeknamedpipeを使ってみたところ、
読み込む内容がカラッポだったからみたいでした。
どもです。
だけど、なんで返ってこないかは??なので考え直してみます。
ちなみにパイプに書き込むのと、パイプから読み込む部分は
WriteToPipe()
{
ReadFile(); // ファイルから読み込み
WriteFile(); // パイプに書き込み
}
ReadFromPipe()
{
ReadFile(); // パイプから読み込み
WriteFile(); // Viewに出力したいがとりあえず、ファイルに書き込み
}
としていました。
0628デフォルトの名無しさん
NGNG0629616
NGNGそうですコンポジションウィンドウに表示されてる文字です。
おっしゃる通り、コンポジションウィンドウは
カーソルや BS、DEL を勝手に受け取ってくれます。
しかし今回はそうではなくその操作をソフト側から制御してやりたいのです。
実を言いますと現在キーのマッピングを変更するソフトを書いておりまして
携帯みたいにキーを連打すると文字が a=>b=>A=>B=>a のように
変わって行くキーを作らなければならなくなってしまいました。
hook した KeybordProc() 内で
keybd_event() に VK_BACK を与えて
ImmSetCompositionString() で SCS_SETSTR 渡せば
上記の動作が出来そうなものなのですが、
keybd_event() で送ったキーイベントの処理が
KeybordProc() から抜けた後になってしまうので
SCS_SETSTR を VK_BACK で消してしまうと言うなんとも間抜けな結果に。
グローバルにフラグ持っておいて一旦 KeybordProc() を終了した後
自分で送った VK_BACK を拾った時点で
SCS_SETSTR するとか泥臭くやってしまえば出来そうなので
既に半分くらいは解決してるのですが。
もっとスマートに(keybd_event()なんぞを通さずに)
コンポジションウィンドウの内容を直接操作する方法はないものでしょうか?
0630デフォルトの名無しさん
NGNGあれだよあれ、こーやんの。
PeekNamedPipe ( hStdOutRd, NULL, 0, NULL,
&dwBytesRead, NULL );
if(dwBytesRead)ReadFile......;
0631616
NGNG泥臭くなりつつも
VK_LEFT VK_BACK VK_RIGHT SCS_SETSTR
の順番で文字叩き込んだ後
イベント3回捨てることで結果だけはゲットしました。
はふ。
0632デフォルトの名無しさん
NGNG第1巻のp.549で、DIBのピクセルデータのサイズを計算している部分で
nBytes = ALIGNLONG((WIDTH * COLORBITS)/8) * HEIGHT;
つー、個所があるが、これってWIDTH=1だったら、0バイトにならない?
サンプルではWIDTH=50のCOLORBITS=4だから問題はないのだが・・・。
これを信じて組み込んでたら、たまーにエラーで落ちるので変だと
思って調べたら・・・くそ。まぁ、それだけです。
#define ALIGNLONG(i) ((i+3)/4*4)
0633デフォルトの名無しさん
NGNG・GetForegroundWindow()
・GetFocus()
・入力状態を ForegroundWindowにアタッチしてから GetFocus()
いづれも駄目でした(´Д`;
0634617
NGNGGetStdHandle,CreatePipe,SetStdHandleに使われるハンドルが
多すぎて頭がごちゃごちゃになってしまっています。
どこか詳しく解説してあるサイトはないでしょうか?
ちなみに、猫は難しすぎてサッパリでした。
0635デフォルトの名無しさん
NGNG0636デフォルトの名無しさん
NGNGGetForegroundWindow -> GetWindowThreadProcessId ->
GetGUIThreadInfo
でできるかな? (未確認)
0637デフォルトの名無しさん
NGNG確かにねぇ。
どーすんだろね。パイプの実態がつかみにくいよね。
えーっと、パイプは、2つのパイプがついたファイル(入れ物)
だって思っていいはずなんだけど、その線で分かりやすい
説明さがしてみれば?ちなみに普通のファイルは2つのパイプ
なんていう丁寧なものはついてない、という感じで・・・・
0638デフォルトの名無しさん
NGNGウィンドウハンドルに関わらず
キャレットのところに直接文字を書き込んだりすることは
できるかな?
0639617
NGNG今だにパイプからReadFileで読み取れていないので、お聞きします。
やりたいことは、子プロセスにコマンドを渡し、処理結果を受け取る。
ということを、CreateProcessで呼び出した子プロセスに、
パイプを介して書き込み→読み込み→表示を繰り返し行うことです。
現在はプロセス間通信用クラスを作り、
そのコンストラクタでパイプの作成や子プロセスの生成を行う。
次にWriteToPipe(CString strBuf)という関数内でstrBufをパイプに書き込み(WriteFile)、
ReadFromPipe(CString& strBuf)でパイプから読み込んだ文字列をstrBufに書き込む。
ということを、ボタンハンドラで呼ばれるView内の関数から、
WriteToPipe()、ReadFromPipe()にアクセスして、Viewに表示する。
というふうにしています。
このプロセス間通信用のクラスのオブジェクトをCUIから生成した場合は、
問題なく表示可能なのですが、GUIからだとReadFileで読み込む文字列が空になる
原因がさっぱりわかりません。
問題点、またはもっとうまいやり方はないでしょうか?
0640617
NGNG今だにパイプからReadFileで読み取れていないので、お聞きします。
やりたいことは、子プロセスにコマンドを渡し、処理結果を受け取る。
ということを、CreateProcessで呼び出した子プロセスに、
パイプを介して書き込み→読み込み→表示を繰り返し行うことです。
現在はプロセス間通信用クラスを作り、
そのコンストラクタでパイプの作成や子プロセスの生成を行う。
次にWriteToPipe(CString strBuf)という関数内でstrBufをパイプに書き込み(WriteFile)、
ReadFromPipe(CString& strBuf)でパイプから読み込んだ文字列をstrBufに書き込む。
ということを、ボタンハンドラで呼ばれるView内の関数から、
WriteToPipe()、ReadFromPipe()にアクセスして、Viewに表示する。
というふうにしています。
このプロセス間通信用のクラスのオブジェクトをCUIから生成した場合は、
問題なく表示可能なのですが、GUIからだとReadFileで読み込む文字列が空になる
原因がさっぱりわかりません。
問題点、またはもっとうまいやり方はないでしょうか?
0641デフォルトの名無しさん
NGNG0642617
NGNGけど、なんとか自己解決しました。
原因は、SetStdHandleで標準入出力を設定してたからで、
STARTUPINFO構造体中の対応する場所に,ハンドルを設定してやったらできました。
おさわがせしました。
0643デフォルトの名無しさん
NGNGレジストリのアクセス権をプログラムの中で変更したいのですが、方法がよくわかりません。
ACL関係のAPIを使うのだと思うのですが、どうやってレジストリのアクセス権を変更したらよいのでしょうか?
よろしくお願いします。
0644デフォルトの名無しさん
NGNG0645デフォルトの名無しさん
NGNGCMyDocに格納できますか?
0646デフォルトの名無しさん
NGNGせっかくだから俺はCMyDocにメンバ変数を用意してそこにぶちこむぜ。
0647645
NGNGCMainFrameでGetDocument用意して、
pDoc->m_strDoc = m_strMainFrame;
ってのができないんですよ。
0648デフォルトの名無しさん
NGNG0649デフォルトの名無しさん
NGNG0650645
NGNGありがとございます。
GetActiveDocumentででけましたです。
0651デフォルトの名無しさん
NGNGどの部分の色なんですか。
0652デフォルトの名無しさん
NGNG0653デフォルトの名無しさん
NGNGスクロールバーのシャフトの部分だね。
0654651
NGNG何も変化しません。win2000での話ですが。
0655デフォルトの名無しさん
NGNGSYSTEMTIME st1; // 2002/02/15とか
SYSTEMTIME st2; // 2200/10/07とか
// st1からst2までの期間を計算する。
GetRemainTime(st2, st1);
みたいな。
200年後とかなので、自作すると閏年の計算間違えそうで不安です。
安直なものがあれば流用しようかと。
0656デフォルトの名無しさん
NGNGFILETIMEに変換してから引き算する
とか考えたけど、FILETIMEって200年先まで表せたかなあ。
0657デフォルトの名無しさん
NGNGMFCの CTimeか CTimeSpanのソースでも参照してみたらどうよ?
0658655
NGNGためしてみたけど、やっぱりコンパイルエラーです。
bool GetRemainTime()
{
SYSTEMTIME si1;
SYSTEMTIME si2;
si1.wYear = 2200;
si1.wMonth = 10;
si1.wDay = 7;
GetLocalTime(&si2);
SYSTEMTIME si3 = si1 - si2;
cout << si3.wYear << si3.wMonth << si3.wDay << std::endl;
}
>>657 そうすね。そーすみてみます。
#MFCをそのままつかうのは避けたい。
0659655
NGNG0660655
NGNG0661デフォルトの名無しさん
NGNGそれは、3月1日から1月1日を引いても、9月1日から7月1日を引いても「2ヶ月」になって欲しい、ってこと?
0662デフォルトの名無しさん
NGNG秒で出たら60*60*24で割れば日単位になるが。
ひょっとして日単位の結果が欲しいんじゃないのか?
0663デフォルトの名無しさん
NGNGWin2000/XPで、起動したプロセス(例:cmd /c dir)の標準出力を
リアルタイムに取得したいのだけど、方法ありますか?
Unixのteeみたいなのつくりたいんですが・・・
(Win9x向けには ttp://www.vector.co.jp/soft/dos/util/se037517.html
見つけましたがw2kでは動きませんでした.)
WindowsのPipeは最初のコマンドが終了してから次のコマンドを実行するようで、
CreatePipeとReadFileを使うと、↑のために最初のコマンド終了後にしか出力を
取り出せませんでした.
0664デフォルトの名無しさん
NGNGどうせ、起動されたプログラムがバッファリングしてるんだろうよ。
0665デフォルトの名無しさん
NGNGDOS用16bitアプリという罠
0666デフォルトの名無しさん
NGNGほんとですねぇ。起動される側を↓にしたら期待した通りになりました。
for(i = 0; i < length; i++){
printf("line %d\n", i);
fflush(stdout);
Sleep(interval);
}
---
なんとかうまく騙す方法ってないんでしょうか?
0667デフォルトの名無しさん
NGNG今やりたい事は、ダイアログベースのアプリケーションで二重起動を防止して、
2つ以上起動しようとしたら既に起動しているやつをフォアグラウンドに移動
させたいんです。
二重起動を防止するだけならMutexを使って簡単にできますけど、フォアグラ
ウンドに移動する部分で困ってしまいました。
FindWindowでウィンドウハンドルを取得しようと思っても、ダイアログのキャ
プションは実行時に変化するので、特定の名前で検索することができません。
クラス名もダイアログなのでユニークな名前に出来ません。
Win98とXPで共通に使えて、異なるインスタンス間でウィンドウハンドルをやり
取りする方法、またはウィンドウを特定する良い方法はないでしょうか?
0668デフォルトの名無しさん
NGNG非表示の親ウィンドウを一つ作っておいて、
1. 親ウィンドウを FindWindow() で特定
2. GetLastActivePopup() でダイアログを特定
3. アイコン化されてたら ShowWindow(SW_RESTORE) で戻す
4. SetForeground() で前面に
で OK。
0669667
NGNGなるほど、非表示の親ウィンドウっていうのは良い手ですね。
ウィンドウハンドルの受け渡しに、メモリマップドファイルやレジストリを
使おうかと難しく考えていました。
2番目以降の処理は親ウィンドウに任せる事もできますね。
どうもありがとうございました。
0670655
NGNG>>662
ご指摘のように、実は秒も日も同じものです。
知りたいのは、2200年10月7日24:00から現在時刻までいったいどれだけあるのかということです。
具体的には、
「2200年10月7日まで 後72685日」
とかやりたいのです。
difftimeはどうやら秒単位の引き算しかできないようなので、
(残り秒) = (2200年10月7日の絶対秒) - (現在の絶対秒)
というように、絶対秒なる概念を導入しないと計算できないです。
ということでdifftimeでは何の解決にもならないことがわかりました・・・
0671デフォルトの名無しさん
NGNG「ユリウス日」で検索したら出てきただけなんだが、参考になるかい?
http://alfin.mine.utsunomiya-u.ac.jp/~niy/algo/u/ut2jd.html
0672デフォルトの名無しさん
NGNGファイルのプロパティを開いて「プログラム終了時にウィンドウを閉じる」に
チェックを入れれば、閉じるようになるんだけども。
このチェックを入れるという行為をGUIを使わずに Win32APIを用いて
VBやWSHから行うことはできますか?
0673デフォルトの名無しさん
NGNG背伸びせずに、batファイルの最後にexit書いとけ!
0674655
NGNGこ、これです。こんなのがほしかったんです。
ありがとうございます。早速試してみます。
0675655
NGNGこんな便利な日付があるとは知りませんでした。ありがとうございました。
double d1;
long ud_xday;
ud_xday = ut2jd(&d1, 2200, 10, 7, 23, 59, 59);
cout<< "x-day: " << ud_xday << std::endl;
time_t ltime;
struct tm *today;
double d2;
long ud_today;
time(<ime);
today = localtime(<ime);
cout << today->tm_year+1900 << today->tm_mon+1 << today->tm_mday << std::endl;
ud_today = ut2jd(&d2, today->tm_year+1900, today->tm_mon+1 , today->tm_mday,
today->tm_hour, today->tm_min, today->tm_sec);
cout<< "today: " << ud_today << std::endl;
cout << "Remain Day: " << ud_xday - ud_today << std::endl;
「・・・まであと72551日」
0676デフォルトの名無しさん
NGNGなんのひ?
0677デフォルトの名無しさん
NGNG解決したみたいだからいいけど、difftimeで「何の解決にもならない」ってことは
ないんじゃないの? 何でそこまで変換するのをいやがるのかわからん。
time_tだと2038年の壁があるから、とかいう理由だったらわかるけどさ。
0678デフォルトの名無しさん
NGNG1年前になっちゃうんだけどなんでなんでしょう?Win2000,VB6.0使用なのですが。
0679デフォルトの名無しさん
NGNGその組み合わせだと、
ドラえもんの四次元ポケットに繋がってます。
0680655
NGNGこの日までにもどってこないと・・・
>>677
秒をきらってたわけじゃなくて、struct tmで設定したx-dayをtime_tにする方法が
わからんかったんです。
difftimeの引数はtime_t型なもんで。
time_t ltime;
struct tm *today;
// 今日
time(<ime);
// その日
struct tm xday = { 59, 59, 23, 7, 10, 300 };
// はて?
difftime( ? , ltime);
0681デフォルトの名無しさん
NGNGMSDN
> Microsoft C/C++ 7.0 以外のすべての Microsoft C/C++ バージョンおよび Microsoft Visual C++ のすべてのバージョンでは、time 関数が返す現在時刻は、1970 年 1 月 1 日の午前 0 時 0 分 0 秒から経過した秒数です。
ヘルプくらい読もうぜ・・・。
0682655
NGNGそのヘルプは読んだんですが、問題は現在時刻ではなくて
「2200年10月7日」は、1970 年 1 月 1 日の午前 0 時 0 分 0 秒から何秒後か?
ってことなんです。
0683デフォルトの名無しさん
NGNG0684デフォルトの名無しさん
NGNG過去ログになかったみたいです。
0685デフォルトの名無しさん
NGNG0686デフォルトの名無しさん
NGNGなんでそこで「任意の日付をtime_tにする方法」を調べるなり聞くなりするという
発想にならないんだろう……
いずれにせよ、time_t使ってるかぎり2038年以降は動作しない可能性があるけど、
その辺はいいの?
0687デフォルトの名無しさん
NGNGbatの記述には、ちゃんと最後にexitと記述しているけど、
ウィンドウが閉じないんだよ〜。なんで?
逆に、Windows2000でbatを起動するとexit記述があってもなくても
終了後に自動でウィンドウが閉じる。これまたなんで?
0688デフォルトの名無しさん
NGNGやろうぜ
0689デフォルトの名無しさん
NGNG0690デフォルトの名無しさん
NGNGIOleInPlaceActiveObject
どーやって使うの?
0691デフォルトの名無しさん
NGNGレジストリ見ないでってこと?
0692デフォルトの名無しさん
NGNGWindowFromPoint見たいなのを使ってウィンドウから直接的に得る方法はないかなと思って。
どの道レジストリ調べてもprogIDとかが分からなければ使いようがないので。
0693デフォルトの名無しさん
NGNG0694デフォルトの名無しさん
NGNG>WindowFromPoint見たいなのを使ってウィンドウから直接的に得る方法
WindowsのhWnd又はWndClassから、COMのCLSIDが欲しい、って事か?
0695デフォルトの名無しさん
NGNG0696デフォルトの名無しさん
NGNG0697デフォルトの名無しさん
NGNG0698デフォルトの名無しさん
NGNGユーザー認証はどうやるのでしょうか?
普通にユーザー名とパス渡しても、ログインできないんです。
0699デフォルトの名無しさん
NGNGまーたそれだ(笑)
まだできてないんだ。
もしかすると、例の、あの、
ユーザ名入力の部分だけ標準出力とは
違う出力つかってるのかもね。
でも、わかんないけどね。
いっそのことFTPシステム作ったら?
案外簡単かもよ?わかんないけど。
0700デフォルトの名無しさん
NGNG応答ファイルを使えばよいかと。
0701デフォルトの名無しさん
NGNGWin32API は付属のヘッダで宣言されていたので不自由なく使えているのですが、
他人様が作った DLL 内の関数を使いたいと思ったら、宣言の仕方が解りませんでした。
関数のシグネチャはわかっている(本当はこれから調べるんですけど)として、
DLL のファイル名等はどうやって指定すればいいのでしょう?そもそもソース内に書くものなのか、コンパイラ or リンカのオプションに指定する物なのかも解っていません。
どなたか教えて下さい。よろしくお願いします。
0702デフォルトの名無しさん
NGNGimplib xxxx.lib [DLL名]
とかやればインポートライブラリが作れるから、
その lib をリンカでリンクすればよいのでは。
0703デフォルトの名無しさん
NGNGそれからgetprocadressだろ
0704701
NGNG>>702
やってみたのですが、xxxx.lib は作れたのですが、それをリンクしても
関数が見つからないみたいです。 xxxx.lib をテキストファイルとして開いてみると、どうやらそれらしい名前が書いてあるのですが…。
>>703
試してみます。
0705デフォルトの名無しさん
NGNG名前修飾で引っかかってるんじゃないの? ヘッダファイルで関数名を宣言
している部分を extern "C" { } で括ってみるとか。
0706デフォルトの名無しさん
NGNGを作ってるんですが、デバッグができないZ。
エクスプローラを終了させて、デバッガで動かした後、
ブレークポイントを設定し、ブレークしたところで、VCが
操作できねーz。
0707デフォルトの名無しさん
NGNGオレッチもそれ試したんだけどねぇ、できないよな?
なんでだろね?でもloadlibraryとgetprocadressだったら
絶対できるよ。だからそっちつかう。
でも、
なんでだろ・・・・
0708デフォルトの名無しさん
NGNGデスクトップ上を、キャラが練り歩くようなアプリがありますが、
あれはどうやって実現すれば良いのでしょうか?
0709デフォルトの名無しさん
NGNG便乗。
昔から色々調べてたんですが708のような物ってやっぱりリージョンウインドウで
やるんですかね?
魚泳ぐような奴でいっぱいリージョンウインドウがあると凄く重くなるような気がした
んで,他になんかあるのかなぁと思ったんですが…。
0710デフォルトの名無しさん
NGNGWindows 2000/XPならレイヤードウィンドウもある。
リージョンウィンドウでも腕次第でだいぶ
パフォーマンスが変わったりするみたいね。
0711デフォルトの名無しさん
NGNGふむふむ。半透明できる奴でしたっけ…>レイヤード
デスクトップアクセサリ系のはWin3.1の頃からあった気がしたんで,どうやってんだろうなて
のが疑問だったんですよね。チャダンスとかはソースもあったらしいんですが見つからず…。
0712デフォルトの名無しさん
NGNGリージョンに対してのデメリットはマウスメッセージが透過できない事
ぐらいかと。
0713708
NGNG>>709-712
レスサンクスです!!Win98環境の友人へ、誕生日プレゼントとして
送る予定なのでリージョンかトランスパーレントで行こうと思います。
やっぱ聞いて良かった。危なくディスプレイ全部のHDC取得して…
とか行儀の悪いことやるところでした。感謝!
0714デフォルトの名無しさん
NGNG待ちたいんですけどどうすればいいですか?
MsgWaitForMultipleObjects は NTだからか
access denied になってしまうみたい。
あとはフックで監視しておいて WM_PAINT 投げられるまで
待つしかないの?
ほかに隠れウインドウ作っておいて WM_ACTIVATEAPP 待つのも
やってみたけど ALT+Tab でウインドウ切り替えられると氏ぬる。
0715デフォルトの名無しさん
NGNG0716714
NGNGフックしてやってみたがだめだったので、
SetWindowsHookEx の使い方がまずいのか、
それともそもそもフックがだめなのか
知りたかったんだけど…。
0717デフォルトの名無しさん
NGNG他のプロセスへ引っ付くには、フックプロシージャをDLLにせんと、動かないぞよ
0718まんさく
NGNG0719まんさく
NGNG0720714
NGNG書き忘れましたが今は2000上でデバッグ&プログラミング中。
struct dhookinfo {
HHOOK hHook;
DWORD dwTargetThreadId;
DWORD dwCallingThreadId;
};
__declspec(dllexport) BOOL WINAPI DllEntryPoint( HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved )
{
if( fdwReason == DLL_PROCESS_ATTACH ) {
tlsidx[0] = TlsAlloc();
hInst = hinstDLL;
} else if( fdwReason == DLL_PROCESS_DETACH ) {
TlsFree( tlsidx[0] );
} else if( fdwReason == DLL_THREAD_ATTACH ) {
TlsSetValue( tlsidx[0], NULL );
} else if( fdwReason == DLL_THREAD_DETACH ) {
LPVOID pm;
pm = TlsGetValue( tlsidx[0] );
if( pm ) {
if( ((struct dhookinfo *)pm)->hHook ) UnhookWindowsHookEx( ((struct dhookinfo *)pm)->hHook );
HeapFree( GetProcessHeap(), 0, pm );
}
}
return TRUE;
}
こんなかんじでDLLを初期化して
0721714
NGNGstatic LRESULT CALLBACK hookwndproc( int nCode, WPARAM wParam, LPARAM lParam )
{
if( nCode < 0 ) {
return CallNextHookEx( ((struct dhookinfo *)TlsGetValue( tlsidx[0] ))->hHook, nCode, wParam, lParam );
}
if( wParam ) {
PostThreadMessage( ((struct dhookinfo *)TlsGetValue( tlsidx[0] ))->dwCallingThreadId, WM_USER, 0, 0 );
}
return CallNextHookEx( ((struct dhookinfo *)TlsGetValue( tlsidx[0] ))->hHook, nCode, wParam, lParam );
}
0722714
NGNG○ if( !wParam && ((CWPSTRUCT *)lParam)->msg == WM_PAINT && GetWindowThreadProcessId( ((CWPSTRUCT *)lParam)->hwnd, NULL ) == ((struct dhookinfo *)TlsGetValue( tlsidx[0] ))->dwTargetThreadId ) {
ってなかんじになっています。
0723デフォルトの名無しさん
NGNG_asm int 3;
で無理矢理止めてみたら?
0724714
NGNGちょっとやってみます。
ちなみにこれ、指定されたアプリケーションの
スクリーンショットを自動的に撮るプログラムになる予定なんだけど…。
0725デフォルトの名無しさん
NGNG0726デフォルトの名無しさん
NGNGそうか?ゲームでもない限り、描画はWM_PAINTに集中させとくのがセオリーだと思ってたのだが…。
っていうか、「WM_PAINTのタイミングなら確実に描いている」のは確かかと。
0727デフォルトの名無しさん
NGNGみたいな塗りつぶし描画はどうやってるのでしょう?
長方形を描いて右から左にグラディエーションをつけたいだけです
システムがやってるんだからAPIがあると思うのですが 見つからない
0728デフォルトの名無しさん
NGNG多分、DrawMenuBar だと思うんだけど、違うかな?
0729728
NGNGDrawCaption だ、 DrawCaption
うまくいったかどうか報告キボンヌ >>727
0730728
NGNGとりあえずちょっと試してみた。ソースが VB なのは勘弁してくれ(これくらいならわかるっしょ?)
DC_TEXT をつけないと、何故かうまくいかないんだよなぁ…。
ここら辺わかったら情報をフィードバックしてくれ。
Private Declare Function DrawCaption Lib "User32" (ByVal hWnd As Long, ByVal hdc As Long, lprc As RECT, ByVal uFlags As Long) As Long
Private Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
Private Const DC_ACTIVE As Long = &H1
Private Const DC_ICON As Long = &H4
Private Const DC_INBUTTON As Long = &H10
Private Const DC_SMALLCAP As Long = &H2
Private Const DC_TEXT As Long = &H8
Private Const DC_GRADIENT As Long = &H20
Private Sub Command1_Click()
Dim r As RECT
r.Left = 10
r.Top = 20
r.Right = 200
r.Bottom = 40
Call DrawCaption(Me.hWnd, Picture1.hdc, r, DC_ACTIVE Or DC_GRADIENT Or DC_TEXT)
End Sub
0731デフォルトの名無しさん
NGNG0732デフォルトの名無しさん
NGNGWaitForMultipleObjectsの使い方を間違えてる可能性が大だと思われ
つーかWaitForInputIdleじゃだめなのか
0733デフォルトの名無しさん
NGNGExitWindowsEx(EWX_LOGOFF, 0);
0734デフォルトの名無しさん
NGNG差分みやすく、その場の編集できるもので使い勝手のよいもの。
VCのソース管理->相違点 と連動してくれればベストなのですが・・・
0735デフォルトの名無しさん
NGNGVSS
0737727
NGNG>>730 のコードをDelphiで実行したのですが何もおこりませんでしたし
結局APIを使う方法が判らず、ビットマップを自分で作成してしまう事にしました
function CreateGradationRectBitmap(const width,height:Integer;const LeftColor,RightColor:TColor):TBitmap;
var L,R:array [0..2] of integer;
procedure decompose(var w:array of integer;const col:TColor);
begin
w[0]:= col and $FF;
w[1]:=(col shr 8) and $FF;
w[2]:=(col shr 8) and $FF;
end;
var i,j,w:integer;
var p:pByte;
begin
decompose(L,LeftColor);
decompose(R,RightColor);
Result:=TBitmap.Create;
Result.Monochrome :=False;
Result.PixelFormat:=pf24bit;
Result.Width :=width;
Result.Height:=height;
p:= pByte(Result.ScanLine[0]);
w:=width-1;
for i:=0 to w do begin
{色の按分 } for j:=0 to High(L) do begin p^:= (R[j]*i +L[j]*(w-i))div w; inc(p);end;
end;
w:=width*3;
With Result do for i:=1 to Height-1 do Move(ScanLine[0]^ , ScanLine[i]^ ,w);
end;
0738デフォルトの名無しさん
NGNGOS が XP でアルファブレンディングなアイコンなら
きちんと透過表示できるのでしょうか?
0739デフォルトの名無しさん
NGNGフォント名の前に@をつける方法でできるのは分かりますが、
イマイチスマートじゃないのでしっくりきません。
0740デフォルトの名無しさん
NGNG他のフォントと同様に列挙されると思うが
0741デフォルトの名無しさん
NGNGGradientFill
0742727
NGNG名前が判らないと検索も出来ない。なんか魔法使いの世界みたいなもんですね。
http://www.microsoft.com/japan/developer/library/jpgdipf/_win32_gradientfill.htm
Windows: サポートされていません。 <---アリャリャ
0743730
NGNGありゃ、DrawCaption 駄目だった? Canvas と API のカラミとかではなくて?
(Del知らないからなんとも言えないけど)
でもね、>>741さんの見て思い出したけど、
GradientFill さ、VB 用の Win98 の API 本で(Win98から実装の関数として)紹介されてるよ!?
MS のサイトの情報の方が間違ってるんではなかろうか?
0744デフォルトの名無しさん
NGNG日本語版は情報が古い。ちゃんと使える。
http://msdn.microsoft.com/library/en-us/gdi/bitmaps_8oa4.asp
> Windows NT/2000/XP: Included in Windows 2000 and later.
> Windows 95/98/Me: Included in Windows 98 and later.
つーかWindows 98/2000がキャプション描画するときこれ使ってるんだから
使えないわけがない。
0745デフォルトの名無しさん
NGNG書き方が悪かったですね、列挙ではなく、
フォント名 -> 縦書きフォント名 変換がやりたいのですが、
すべてのフォントで名前の最初に@をつけるだけで良いのかわからないし、
保証されていると書いてある文書も見つからないので、気になってます
0746デフォルトの名無しさん
NGNG0747デフォルトの名無しさん
NGNGtm.tmOverhangが常に0なんですが、どういう事なんでしょうか?
0748デフォルトの名無しさん
NGNG0749デフォルトの名無しさん
NGNGOverhangが無いってコトでしょう
Overhangの(プログラム上での)和訳がわからないけど、辞書だと「張り出し」って意味だよ。
0750デフォルトの名無しさん
NGNGItalicやBold指定しても設定されてないんですよね。
修飾書体と無修飾書体を混在で綺麗に扱う方法って無いんですかねぇ
0751747=750
NGNGここをみると、TextOut()で一気に一列書くのではなくて、
1文字ずつTextOut()して出力していかないといけないってことになるのかな?
0752747=750
NGNG基本となるフォントを決めておいて、
TextOut()する前に、
::SetTextCharacterExtra(hdc, current_tm.tmAveCharWidth + base_tm.tmAveCharWidth);
とすればいいのかな???
0753747=750
NGNG0754デフォルトの名無しさん
NGNGしかし、1文字ずつだとカーニングが反映されないという諸刃の剣。
0755デフォルトの名無しさん
NGNGhttp://www.microsoft.com/msdownload/platformsdk/sdkupdate/
0756デフォルトの名無しさん
NGNG別に怪しげなことをするのではなくタイトルのアルファベットを
全角->半角に変換したいのです。
0757デフォルトの名無しさん
NGNG問題の現象は、事前に、コントロールパネルの中のタスクを調べておかないと、色々変になることです。
・コントロールパネルのフォントのFORPARSINGで得られるディレクトリ→GUID文字列
・コントロールパネルの管理ツールのFORPARSINGで得られるディレクトリ→GUID文字列
・コントロールパネルのネットワークの中身→空になる
・ごみ箱の中身のプロパティ→ごみ箱そのもののプロパティが出てしまう
当方Windows2000SP2, IE5.5なのですが、この動作が、一般的に起こり得るのか、うちの環境が変なのか知りたいのです。
というわけで、タスクを調べずにいきなりごみ箱の何れかの「中身」のプロパティが出せる環境の人いらっしゃいますか?
program Test;
uses Windows, ActiveX, ShlObj, ShellAPI, Demoのvirtuallistviewの関数を抽出したユニット;
const EnumOption = SHCONTF_FOLDERS or SHCONTF_NONFOLDERS or SHCONTF_INCLUDEHIDDEN;
var Desktop, Bitbucket, Folder: IShellFolder; Malloc: IMalloc; Enum: IEnumIDList;
Menu: IContextMenu; Arg: TCMInvokeCommandInfo;
ID, Item, It: PItemIDList; PMenu: HMENU; Got: DWORD;
begin
SHGetMalloc(Malloc); SHGetDesktopFolder(Desktop);
SHGetSpecialFolderLocation(0, CSIDL_BITBUCKET, ID);
Desktop.BindToObject(ID, nil, IID_IShellFolder, Bitbucket); Malloc.Free(ID);
Folder := Bitbucket; It := nil; Folder.EnumObjects(0, EnumOption, Enum);
while Enum.Next(1, Item, Got) = S_OK do
begin if It = nil then It := CopyPIDLs(Malloc, Item); Malloc.Free(Item); end;
if It <> nil then begin
Folder.GetUIObjectOf(0, 1, It, IContextMenu, nil, Menu);
PMenu := CreatePopupMenu; Menu.QueryContextMenu(PMenu, 0, 1, 100, CMF_NORMAL); DestroyMenu(PMenu);
FillChar(Arg, SizeOf(Arg), 0); Arg.cbSize := SizeOf(Arg); Arg.nShow := SW_SHOW; Arg.lpVerb := 'properties';
Menu.InvokeCommand(Arg); Malloc.Free(It);
end;
end.
0758初心者01
NGNGプロシージャ系が駄目みたいなんですがどうやったらいいでしょう?
ウィンドウ構築の関数とプロシージャの部分が一緒のソースにあると
成功するんですが、これは分けられないでしょうか?
0759デフォルトの名無しさん
NGNG現在実行中のアプリケーションの実行ファイルのサイズを求めるにはどうしたら
良いのでしょうか?対象のファイルは他のプロセスの実行ファイルです。
CreateFileの引数を色々と変えてみましたが、ファイルをオープンできませんでした。
・・・もしやと思ってFindFirstFileを使ってみたらサイズが取得出来ました。
すみません、自己解決しちゃったようです^^;
もし、もっと良い方法があれば教えてください。
0760デフォルトの名無しさん
NGNGReadOnly-NonExclusiveで開いてもだめ?
0761759
NGNGもちろんそれも試しましたが駄目でした。
dwAccessを0にしても駄目でした。
とりあえず、FindFirstFileを使った方法は、98、Me、2000、XPで問題無く
動いているようです。
もっとストレートに取得する方法あればいいんだけど。
0762デフォルトの名無しさん
NGNGエディタとかでごく普通に開けるようだが?
指定を間違えてるに一票。
0763デフォルトの名無しさん
NGNGGetLastError()は試したか?
0764デフォルトの名無しさん
NGNG0765デフォルトの名無しさん
NGNGバックサーフェス(back_dc)からフロントサーフェス(hdc)へ転送するときに、
子供ウィンドウがちらついてしまうのですが、ちらつかないようにする
対策方法を教えていただけませんか?
BitBlt(hdc, 0, 0, 32, 32, back_dc, 0, 0, SRCCOPY);
このように転送する際、親ウィンドウ内の子供ウィンドウがちらついてしまうんです。
0766デフォルトの名無しさん
NGNG0767デフォルトの名無しさん
NGNGそんなAPIはない。
そのDLLのモジュールハンドルでCOFFヘッダ見ろ。
0768759
NGNGっていうか、なんで朝はできなかったんだろう?
0769デフォルトの名無しさん
NGNGコンパイルは通るのに(レベル4)メッセージボックスで順に調べていくと
そこで止まってます。
なぜ?
0770デフォルトの名無しさん
NGNGウィンドウプロシージャのWM_CREATEは何返してる?
0771デフォルトの名無しさん
NGNGGetLastErrorってご存じ?
ちなみにファーイーストリサーチ社の調べによると、CreateWindowで
失敗する原因の第1位はウィンドウクラス名の間違い。
0772757
NGNG…ということは、他のスレッドで取得したIMalloc, IShellFolderなどを
別のスレッドから使用するのは危険な気がしてきた…。
今、おもいっきりそーゆー処理してます。一応動いてますけど…。
0773769
NGNG>>771
サンクスです。
多分クラスの構築の仕方に問題あったようです。
初期化の段階でここまでこけまくるとは。。。。。
今はプロシージャからメンバ関数呼べるようにしてるところです。
動いてますけどコピペなので解読中なのですが。。。
LPARAM、CREATEWINDOW、WM_CREATE って親戚みたいなもんなんですね。
ヘルプで追ってて初めて気付いた。。。。
0774デフォルトの名無しさん
NGNGさっぱり分かりません。
0775デフォルトの名無しさん
NGNG0776デフォルトの名無しさん
NGNG名前空間の中では、識別子の解決法が名前に支配される。
魔空空間と似たようなもんだ。
0777デフォルトの名無しさん
NGNGいながきメンバーがそう言ったのか?
0778デフォルトの名無しさん
NGNG「Apartment」でMSDNライブラリを検索してみれ。
0779デフォルトの名無しさん
NGNGそれだと使えないコンポーネントがあるが。
IEとかIEとかIEとか
0780デフォルトの名無しさん
NGNGCreateWindow(Ex) でウィンドウを作成時に WS_VISIBLE を設定しないと
非表示状態でウィンドウが作成されますよね?
ところがこの時 GetWindowPlacement して取得した
WINDOWPLACEMENT.showCmd に SW_SHOWNORMAL が入っているんです。
それを使ってそのまま SetWindowPlacement すると、ウィンドウが表示されてしまいます。
何か根本的に間違っているのでしょうか?
ウィンドウのクライアント領域のサイズを変更してからウィンドウを表示したいので、
ウィンドウ作成→ウィンドウの幅設定→クライアント領域の幅を取得→
設定した幅からの誤差を計算して、望んだクライアント領域の幅になるようにウィンドウの幅を設定→
ウィンドウの表示
という事をやっているのですが、はじめのウィンドウの幅設定の時点で
すでにウィンドウが表示されてしまっているのです。
この設定&取得はほかの部分でも使っているので、現在ウィンドウが表示されているか
されていないかにかかわらず正常に動作させたいのです。
どうすればいいでしょうか?よろしくお願いいたします。
0781コーダーさん ◆FGThHbRk
NGNGhttp://www.microsoft.com/JAPAN/developer/library/jpuipf/_win32_adjustwindowrect.htm
0782780
NGNGWS_VISIBLE を調べて SetWindowPlacement の際に showCmd をいじくれば
とりあえずは ok そうです。
>>781
ありがとうございます。こっちの方がこの場合には適切ですね。
0783さくさく
NGNGVBとか他の4GLとかで外部関数(DLL)インターフェースを持つ言語で作ったWinのアプリからMAPIを使用してMicrosoftのMailerから受信したMailを見たいのですが、
OutlookのMailの本文を取得するとencodeがかかったリソースのまま取得してしまいます。
MSFCのインタフェース(DLL)で、encodeタイプを指定したら2バイトコードに変換してくれるようなものってご存知ないですか?(decoder?)
ちょっと調べてみたのですが、分かりませんでした・・・
よろしくお願いしますっっっ
0784デフォルトの名無しさん
NGNGテキストファイルの総行数をレポートするような
ソフトありませんか?
プログラムのソースコードの規模を見る目安に用いたいと思っています。
よろしくお願いします
0785デフォルトの名無しさん
NGNGCygwin あたりの UNIX 由来のコマンドを使えれば、こんな感じか。
wc -l `find -iregex '.*\.\(cpp\|c\|h\|hpp\)'`
ファイル数が多い場合には `` で済ませずに、個々のファイルについて wc して
合計を足すようなスクリプトを awk, perl あたりで書いたほうがいいかも。
0786784
NGNGありがとうございます
でもWindows上で実行できるGUIのある普通のソフトが理想です
0787デフォルトの名無しさん
NGNGソフトを探しているのなら、こちらで聞いてみては?
***すれ立てるまでもない質問はここで 第11刷***
http://pc.2ch.net/test/read.cgi/tech/1014478527/
0788デフォルトの名無しさん
NGNG>でもWindows上で実行できるGUIのある普通のソフトが理想です
ふむ。つまり、VC++あたりでwcを開発したい、と。
0789デフォルトの名無しさん
NGNGあまりに単機能なプログラムなので、わざわざ個別のアプリケーションとして
作ってるやつはいないんじゃないかと。
GUI でまじめにややろうとすると、
- 含める拡張子のパターン
- 除外するディレクトリ
- ファイルの改行コード
とか、細細した設定用のダイアログやら何やらも必要になって、目的の割に
面倒なことになりそうだし。
0790デフォルトの名無しさん
NGNGAPIのCreateThreadを使ってスレッド関数を呼びたいのですが、
スレッド関数をクラスのメンバとして宣言して
class hoge {
public:
DWORD WINAPI ThreadFunc(LPVOID lpparam);
};
というように書いてCreateThread()からスレッド開始する方法って
無いのでしょうか?
この場合、引数に関数名書くだけではダメですよね・・・
思いつく限り色々やってはみたのですが出来なかったので、
よければ教えてください
0791FAQデスナ
NGNGpublic:
DWORD ThreadFunc();
};
DWORD ThreadFunc(LPVOID lpparam)
{
((hoge*)lpparam)->ThreadFunc();
}
で CreateThread に、グローバルの方の ThreadFunc と、hoge のアドレスを渡す。
0793デフォルトの名無しさん
NGNGWM_NOTIFY メッセージ内で((NMHDR*)lParam)->code が
PSN_APPLY になったときに処理するようにしたのですが、
プログラム全体が変になるのです。例えば文字の配列が
一バイトずれるなど。困ったことに変更データとまったく関係
のない所に影響を及ぼすらしく原因が分からないのです。
そこでPSN_KILLACTIVEで処理するように書き直してみたら
問題なくうまくいきました。この変な現象の原因は何だった
のでしょうか。
0794757=772
NGNGで、COMの作成や登録は今回は使う側なのでパスして
最終的にCOINITに行き着いたのですが、
要するに CoInitializeEx(nil, COINIT_MULTITHREADED) して
クリティカルセクションか何かで同期して呼んでやれば、
COMオブジェクトを取得したスレッド以外のスレッドからでも、呼べる、
と、この理解で合ってますか?
0795757=772
NGNGOleInitializeはCoInitializeExをCOINIT_APARTMENTTHREADEDで呼ぶと書いてあるし、
どうすればいいのでしょうか?
0796769
NGNGだれかCREATESTRUCTについて語ってください。
0797デフォルトの名無しさん
NGNGそうですか?
おれも詳しくないけどさ。
0798デフォルトの名無しさん
NGNGソースうぷすればいい。
0799デフォルトの名無しさん
NGNGどんな方法がありますか?
できればストリーミングみたいな感じでやりとりしたいのですが…
0800デフォルトの名無しさん
NGNGWinSock, Pipe, COM
> できればストリーミングみたいな感じでやりとりしたいのですが…
- 送る側と受け取る側は非同期に動く
- データは FIFO
ということ? それだと、ふつーは Pipe じゃないかな。CreatePipe() あたりの
API をチェック。
0802デフォルトの名無しさん
NGNGDCにBindされたフォントで、その文字列がきちんと
表示できるのかはどうやって判断するのですか?
やっぱり、コード毎にフォントを変えて出力しないと
いけないのでしょうか?
0803デフォルトの名無しさん
NGNGWinNT系なら GetFontUnicodeRanges() API で。
Win9xだと…わからん。
0804デフォルトの名無しさん
NGNG実装されてたとしても多言語を同時に出力できるような仕様になってないから
気にする必要ないとか
0805デフォルトの名無しさん
NGNGあるフォントで、ある文字が表示できるかどうか調べるには、GetFontData を使ってフォントファイルを読み取って調べるコードを自分で書かないといかんです。とても面倒。検討を祈る。
0806デフォルトの名無しさん
NGNG何か詳しいWebサイトなんかがあれば教えて下さい。
0807デフォルトの名無しさん
NGNG0808デフォルトの名無しさん
NGNG0809デフォルトの名無しさん
NGNG書籍「Linkers & Loaders」じゃないのか、やっぱり。
>>808
そりゃ、実行ファイルをメモリに展開して実行できるようにする仕組みだろ。
DLL 使ってる場合とか、DLL にアドレスを割り付けて relocation する過程
などの詳細を知りたくなることもある。
0810デフォルトの名無しさん
NGNG漏れは面倒だからいつもDLLにしちゃうけど。DLLマンセー
0811デフォルトの名無しさん
NGNGhttp://www.iecc.com/linker/
0812API初心者の名無しさん
NGNGフロッピーやPCカードなどのボリュームシリアルを変更しようと思うのですが、
そのAPI関数がわかりません。
ヒントでいいので教えてください。
0813デフォルトの名無しさん
NGNGSetVolumeInformation()
0814API初心者の名無しさん
NGNGありがとうございました。
あとはMSDNで調べます。
0815API初心者の名無しさん
NGNG申し訳ございません。
MSDN調べたんですが、載ってなかったんで、
サンプルか詳細を教えて頂けませんか?
サンプルURLでも結構ですので。
0816デフォルトの名無しさん
NGNG使ったことないからよくわかんないけど SetVolumeLabel っていう API があるみたいだよ。
0817デフォルトの名無しさん
NGNGボリュームシリアル番号は変更できないっぽい
0818デフォルトの名無しさん
NGNG判定してくれるAPIってありませんかね?
いまのところ、CreateFileでリードオープンしてみて成功なら
存在する、ってやってますけど、なんかAPIであった方が
安心できるんですが…。
0819デフォルトの名無しさん
NGNGFindFirstFile
0820デフォルトの名無しさん
NGNGGetFileAttribute とか?
0822デフォルトの名無しさん
NGNGPathFileExists
ただしIE4.0以上がないと使えない。
0823818
NGNGうわー、まんまのAPIがあるんですね。
検索してみたんですけど、これって日本語のMSDNライブラリには
載ってない…。英語の方にはあったけど。
はぁ…普段から英語の方を使うようにした方がいいですかね?
ところで、最初っから「ファイル 存在 判定 API」でグーグレば
すぐに分かることでした…<判定用のAPI
それすらせずに聞いてた自分に気づいて、ちょっと鬱。
回線切って首つってきまーす。
0824デフォルトの名無しさん
NGNG0825デフォルトの名無しさん
NGNG一発やん。
0826ゾーナム
NGNGいや、俺もIE4を要求したいとは思ってませんので、PathFileExistsは、
その存在を知った、というだけにとどめておきますよ。実際に使うのは
GetFileAttributesの方です。
0827818(=826)
NGNG恥ずかしい…。
0828デフォルトの名無しさん
NGNG何度か試したのですが、うまく変換できないようで・・・。
0829デフォルトの名無しさん
NGNGバイトオーダーが違うとか、そっち系の問題じゃないの?
0830デフォルトの名無しさん
NGNGGetLastError() 夜露死苦!
0831デフォルトの名無しさん
NGNG0832デフォルトの名無しさん
NGNGGetLastError()してもエラーではなかったので変だと思ったのですが、
ご指摘のとおりバイトオーダーで駄目だったようです。
bomが付いてるからいけると思ってた私が馬鹿でした。
0833デフォルトの名無しさん
NGNG試してみたんですけど、本当にこれでいいのかどうかわかりません。
short nRepeat = (lParam & 0x0000FFFF);
char nScanCode = (lParam & 0x00FF0000) >> 23;
bool bExtendedKey = (lParam & 0x01000000) >> 24;
bool bAltKey = (lParam & 0x20000000) >> 29;
bool bPress = (lParam & 0x40000000) >> 30;
bool bUp = (lParam & 0x80000000) >> 31;
0834デフォルトの名無しさん
NGNGnScanCodeを得るには16bitシフトではないのか。
0836デフォルトの名無しさん
NGNGMSDNサンプルのTTY.Cを参考にしてるんですけど、
あのアプリって何をするものなのでしょうか?
ソースの前に、あのアプリの使い方がわからんです。
0837デフォルトの名無しさん
NGNG何か方法はないでしょうか?
GetClientRect は幅と高さしか返してくれなくて、座標は ( 0, 0) になってしまうようなのですが・・・。
0838デフォルトの名無しさん
NGNG0840デフォルトの名無しさん
NGNGClientToScreen()
0841デフォルトの名無しさん
NGNG#define FOO "def"
LTEXT "abc"FOO"ghi", ...
と書くと abc"def"ghi のように余計な " が付いてしまいます
これを abcdefghi と表示するにはどうすればよいのでしょう?
0842839
NGNGClientToScreen()で(0, 0)で望んでいた値を取得できました。
ありがとうございました。
0843デフォルトの名無しさん
NGNG環境によって違いがあるんでしょうか。
(画面32bit)
DDB >>> 8bit > 16bit≒32bit > 24bit
(画面16bit)
DDB >>> 8bit > 16bit > 24bit > 32bit
↑うちの環境ではこのような感じです。
DDBは加工しづらいし8bitじゃ色数が足りないんで
そこそこ速い16bitを使おうと思っているんですが、
環境によってこの順位は変わったりするんでしょうか。
0844デフォルトの名無しさん
NGNG0845デフォルトの名無しさん
NGNGそうでしたか。
それなら扱いやすさだけを考えて32bitにしようかな。
ありがとうございました。
0846デフォルトの名無しさん
NGNG0847デフォルトの名無しさん
NGNG0848846
NGNGIsIconic でしたか、ありがとうございます。
95以前からあるAPIは名前の雰囲気から探すの難しいです。
0849デフォルトの名無しさん
NGNGそろそろAPIバイブルを買って前ページ読破してもよい時期だな。
嫁。
嫁。
嫁。
昔はたったの800APIしかなかったから簡単だった。
0850デフォルトの名無しさん
NGNGForegroundID = GetWindowThreadProcessId(GetForegroundWindow(), 0)
TargetID = GetWindowThreadProcessId(HWND, 0)
で最前面とフォームのID取ってきて、
AttachThreadInput(TargetID, ForegroundID, True)
でアタッチして
SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT, 0, 0, 0)
でロック時間0にして、
BringWindowToTop(HWND)
SetForegroundWindow(HWND)
とやっているのですが、コマントプロンプトが最前面の時には最前面になってくれません。何ででしょうか?
0851デフォルトの名無しさん
NGNGそれは、君がタコだから
0852デフォルトの名無しさん
NGNG0853デフォルトの名無しさん
NGNGアーカイブにファイルをD&Dできるようになりますよね。
アレってどうやってるんでしょうか?
自分のアプリでエクスプローラと同じ挙動をさせたいのですが、
シェルエクステンションとか調べればできるようになりますか?
0854デフォルトの名無しさん
NGNG> でロック時間0にして、
はやめれ。
0855デフォルトの名無しさん
NGNGOLE D&Dを調べれ。
0856タコ
NGNG弄くってるウチになんとかなった。
>>854
先にSPI_GET〜で現在の値を保存しておいて、後でSETしなおしてますが。
0857デフォルトの名無しさん
NGNGWindowsはマルチタスクだ。保存してから元に戻す間に
別のプログラムが設定をいじったら破綻するだろ。
0858デフォルトの名無しさん
NGNG防ぐにはどうしたらいいんでしょう?
環境はBCC5.5 + Win2kです。
0859デフォルトの名無しさん
NGNGなんでOLEなんですか?
アプリケーションにDnDをするのではなくて、
デスクトップ上のアイコンにDnDできるんです
0860デフォルトの名無しさん
NGNGエクスプローラもアプリケーションですが…
ドラッグ&ドロップでのオブジェクト転送については、
http://msdn.microsoft.com/library/en-us/shellcc/platform/shell/programmersguide/shell_basics/shell_basics_programming/transferring/transfer.asp
あたりが参考になるかと。
0861デフォルトの名無しさん
NGNG0862デフォルトの名無しさん
NGNG送り側はちょいと面倒かも。
0863デフォルトの名無しさん
NGNG全て選択されるのは、Windows の標準動作。
なので、防ぐんじゃなくて、自分でその選択を消すと考える。
その EDITTEXT にフォーカスが来た時(EN_SETFOCUS が飛んできたとき)に、
EM_SETSEL メッセージを投げる。
0864デフォルトの名無しさん
NGNGつまり、エクスプローラで、
1.txt, 2.txtとかのファイルをドラグしていって、
a.zipというファイルに対してドロプし、
追記相当の処理をさせたい、と。
0865デフォルトの名無しさん
NGNGcase IDD_TEXT:
if(HIWORD(wParam) == EN_SETFOCUS){
SendDlgItemMessage(hdwnd, IDD_TEXT, EM_SETSEL, 0, 0);
return 1;
}
で、いきましたthx!
0866デフォルトの名無しさん
NGNGえっと、Explzhと同じことがやりたいのではなくて、
エクスプローラ側と同じ動作をさせたいのです。
zipがDnDを受け取るようになっていたら
自分のアプリでもzipへのDnDを許す、みたいな。
0867デフォルトの名無しさん
NGNG「Shell Extension」「Drag Drop Handler」あたりで検索してみろ。
0868デフォルトの名無しさん
NGNG> SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT, 0, 0, 0)
は、Win98以降で強制的に SetForegroundWindowする場合の常套手段だけど、
行儀は悪い。まぁ仕方ないのかも。
>>866
俺もシェルエクステンション初心者だから間違ってるかも知れんが、
レジストリの HKCR->.zip のクラス名(と言うのか?)->shellex->DragDropHandlers
に有効な CLSIDが登録してあれば、シェルで D&Dを受け付けると思われ。
0869デフォルトの名無しさん
NGNGそもそも強制的にフォアグラウンドを奪うこと自体行儀が悪いんだから
多少の行儀の悪さは誤差の範囲なのかもな。
0870デフォルトの名無しさん
NGNG稀に、複数プロセスで1つのアプリケーションを構築した場合なんかは、
仕方なく使うんだけどね。
0871デフォルトの名無しさん
NGNGMFCだとメッセージマップみたいのでマクロ一発で済むみたいなんですが。
さすがに親Windowフックしてメッセージ投げ返してやるんじゃスマートじゃないし・・・。
0872デフォルトの名無しさん
NGNGHWND hwndCtrl = (NMHDR*)lp->hwndForm;
if (hwnd != hwnd)
return ::SendMessage(hwnd, msg, wp, lp);
;
break;
こういうんじゃないの?
0873デフォルトの名無しさん
NGNG0874デフォルトの名無しさん
NGNGメッセージリフレクションは、親Windowに手を入れなくていいというのが利点だ!ってMSDNに
書いてあったんで・・・。自前で書くならやむなしなのかもしれません。
0875デフォルトの名無しさん
NGNGあらかじめ書いてるかどうかの違いに過ぎないと思うんだが?
一度書いておけばそれ以上いじる必要ないだろ。
0876デフォルトの名無しさん
NGNGImmRegisterWordで文字列を登録させる処理なのですが、
IMEがデフォルトで登録してある語句をダブって登録させようとすると
関数が登録失敗で返してきます。
(例 語句”漢字”、よみ”かんじ”、品詞”名詞”)
失敗は良いのですが、その後エラーを取りたいのです。
MSDN等には、ImmGetGuideLineで取得できるとあります。
実際その処理を組み込んだのですが、戻り値がゼロで返却され
エラー内容を取得できないのです。
ガイドラインの情報タイプは”GGL_LEVEL”と”GGL_INDEX”で試してみました。
MSDNには
通常、アプリケーションはIMN_GUIDELINEメッセージを受け取った後に
この関数を呼び出します。と記載されてますが、
このメッセージがエラーが発生した際通知されないです。
もちろんWM_IME_NOTIFYのwParamで見てますよ。
詳しいかたよろしくお願いいたします。
0877デフォルトの名無しさん
NGNG既存のコントロールの子としてウインドウを作ったら、
その既存のコントロールをサブクラス化したりしないといけないからって話じゃないか?
0878デフォルトの名無しさん
NGNGそれはMFCだって同じだろ?
単にMFCが自動的にやってくれるかどうかの違いだけで
0879874
NGNG要するに、こんな便利な機構がWin32APIセット自体には含まれていないんだなーって
ことです。ウィンドウスタイルにリフレクションを行う、なんてのがあれば結構使える
と思うんですが。
0880デフォルトの名無しさん
NGNG親に通知するという仕組みが糞なだけじゃないか?
0881874
NGNG自分自身へのnotifyがデフォルトで、親に通知するメッセージを(簡単に)選べる
方がスマートなのかもしれません。浅はかな考えですけど。
0882デフォルトの名無しさん
NGNG書けば済むから、普通だったらそっちの方が楽。糞というほどのことはないと思う。
サブクラス化とか絡まない限りにおいては、だけどね。
0883874
NGNGカラムの順番を入れ替えたりできます。
ヘッダの境界線をドラッグすると幅を変更できます。
これらを検出できないでしょうか・・・。LVN_*はなさげです。
0884874
NGNG0885デフォルトの名無しさん
NGNGHDN_*にありそうだけど。
0886874
NGNGそれからヘッダーコントロールの親がリストビューだということに気づくまでに
数十分。しばし格闘してみましたが、HDN_BEGINDRAGとHDN_ENDDRAGはつかまえ
られました。
しかし!境界をドラッグするのがつかまえられません。HDN_*はすべてハンドリング
してるのですが、それ以外のWM_NOTIFYが来てるようです。試しにHDN_*以外のすべて
のWM_NOTIFYに対してTRUEを返してみたら、境界ドラッグを防ぐことができました。
spy++でウォッチしてみたんですが、WM_NOTIFYであることしか教えてくれないんで
どうしようもなくなってしまいました。ヘルプ!
0887874
NGNGcommctrl.hからの抜粋です。
#define HDN_ITEMCHANGINGA (HDN_FIRST-0)
#define HDN_ITEMCHANGINGW (HDN_FIRST-20)
#define HDN_ITEMCHANGEDA (HDN_FIRST-1)
#define HDN_ITEMCHANGEDW (HDN_FIRST-21)
#define HDN_ITEMCLICKA (HDN_FIRST-2)
#define HDN_ITEMCLICKW (HDN_FIRST-22)
#define HDN_ITEMDBLCLICKA (HDN_FIRST-3)
#define HDN_ITEMDBLCLICKW (HDN_FIRST-23)
#define HDN_DIVIDERDBLCLICKA (HDN_FIRST-5)
#define HDN_DIVIDERDBLCLICKW (HDN_FIRST-25)
#define HDN_BEGINTRACKA (HDN_FIRST-6)
#define HDN_BEGINTRACKW (HDN_FIRST-26)
#define HDN_ENDTRACKA (HDN_FIRST-7)
#define HDN_ENDTRACKW (HDN_FIRST-27)
#define HDN_TRACKA (HDN_FIRST-8)
#define HDN_TRACKW (HDN_FIRST-28)
#if (_WIN32_IE >= 0x0300)
#define HDN_GETDISPINFOA (HDN_FIRST-9)
#define HDN_GETDISPINFOW (HDN_FIRST-29)
#define HDN_BEGINDRAG (HDN_FIRST-10)
#define HDN_ENDDRAG (HDN_FIRST-11)
#endif
#ifdef UNICODE
#define HDN_ITEMCHANGING HDN_ITEMCHANGINGW
#define HDN_ITEMCHANGED HDN_ITEMCHANGEDW
#define HDN_ITEMCLICK HDN_ITEMCLICKW
#define HDN_ITEMDBLCLICK HDN_ITEMDBLCLICKW
#define HDN_DIVIDERDBLCLICK HDN_DIVIDERDBLCLICKW
#define HDN_BEGINTRACK HDN_BEGINTRACKW
#define HDN_ENDTRACK HDN_ENDTRACKW
#define HDN_TRACK HDN_TRACKW
#if (_WIN32_IE >= 0x0300)
#define HDN_GETDISPINFO HDN_GETDISPINFOW
#endif
#else
#define HDN_ITEMCHANGING HDN_ITEMCHANGINGA
#define HDN_ITEMCHANGED HDN_ITEMCHANGEDA
#define HDN_ITEMCLICK HDN_ITEMCLICKA
#define HDN_ITEMDBLCLICK HDN_ITEMDBLCLICKA
#define HDN_DIVIDERDBLCLICK HDN_DIVIDERDBLCLICKA
#define HDN_BEGINTRACK HDN_BEGINTRACKA
#define HDN_ENDTRACK HDN_ENDTRACKA
#define HDN_TRACK HDN_TRACKA
#if (_WIN32_IE >= 0x0300)
#define HDN_GETDISPINFO HDN_GETDISPINFOA
#endif
#endif
結局、HDN_*Wが来てました。今まではHDN_*Aを待っていたので捕まえられなかった
訳です。で、僕のプログラムではUNICODEが#defineされていなかったのが原因なわけ
ですが・・・これって僕のミスなんですか?
どうも腑に落ちない。
0888874
NGNG気にするなんて文字列についてのことなんだろうけど、BEGINTRACKでもBEGINDRAGでも
アイテムの情報(文字列を含む)をパラメータとしてもってくることに変わりはない。
ますます謎だ・・・。
0889デフォルトの名無しさん
NGNGhttp://support.microsoft.com/default.aspx?scid=kb;EN-US;q281155
0890デフォルトの名無しさん
NGNGオイラ、ウィンドウのプログラム組むときにMFC使わずにWin32だけで組んでいますが、
C++でMFC使わずに組んでる人ってどれくらいいるの?
0891デフォルトの名無しさん
NGNGはい。ATL/WTL は使ってるけど(w
0892デフォルトの名無しさん
NGNGそれにDLLヘルの問題がやだ、
STATICリンクにしても良いけどサイズが1M超えるのはかんなり鬱
っつーことで、Win32でC++で組んでるけど
結構クラスライブラリひととおり組むと勉強になる
0893デフォルトの名無しさん
NGNGDefFrameProcの2つ目の引数のクライアントウィンドウのインスタンスは
何を指定すればいいのでしょうか?
毎回getWindowで指定するのがいいのでしょうか?
0894デフォルトの名無しさん
NGNG0895デフォルトの名無しさん
NGNG勉強目的にはいいと思う。でも、それだけだな。
MFC はダメなライブラリだけど、その流儀に従えば
開発時間は短縮できるもの。
0896!=892
NGNGある程度大きなプログラムになると外面のコーディングは実装の
コーディング量を遥かに下回るから、どちらを使っても大差ない。
むしろ綺麗にかけるという点で自前ってのも悪くない。
勿論SDKで書くことに慣れてるのが前提。
逆に小さめのプログラムだとMFCはかなり効率を上げるが、
正直開発効率追求ならBCBやらDelphiを使えば良いわけで。
0897初心者
NGNGWin32API糞むずいよー( ´Д⊂ヽ)
誰か教えてよー
0898デフォルトの名無しさん
NGNG何処で詰まってるか言え。
0899初心者
NGNG例えば
int WINAPI WinMain()...
というのでWINAPIは何なのですか?
と教えて貰おうと思いましたが自分で調べないのはマズイので
ちょっとhttp://www.google.ne.jp/へ逝ってきます
0900デフォルトの名無しさん
NGNG__stdcall のことデス。
0901デフォルトの名無しさん
NGNGキーワードは「猫でも分かるプログラミング」で一発。
0902デフォルトの名無しさん
NGNGあまり細かいことを気にしたらいかん。
特に型周りは typedef の嵐だから、 "そういうもの" ということで
覚えてしまったほうがある意味楽だぞ。
0903デフォルトの名無しさん
NGNG0904デフォルトの名無しさん
NGNG「呼び出し規約」でMSDN検索しる。
0905mige
NGNG0906zxcvbnm
NGNG0907zxcvbnm
NGNG今はWinbiffのひらめーるにあるようなリストビューが対象です
0908デフォルトの名無しさん
NGNG親ウィンドウのWM_SIZEでMoveWindowを使って、
コンボボックスの幅を動的に変えたいんですけどうまくいきません。
CB_SETDROPPEDWIDTHを使うのかなと思ったんですが、
これはリストの部分の幅を変更するだけですよね。
コンボボックスのサイズを変更する方法はないんでしょうか?
0909VB6エスパー五
NGNGUrlGetPart関数というのがshlwapi.dllにあるので
VB6で使いたいのですが
詳細
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/reference/shlwapi/path/urlgetpart.asp
案の定VBにはない変数型使ってます
何がしたいかというと
HPのURLを
正確にプロトコル、ホスト、ポート、ファイルパス…と別に分解して得たいのです
(Winsockコントロールを使ったHTTPクライアント(ブラウザとまではいきませんが)を作成中なのです)
ぜひVB6で扱う際の手引きをください
LPDWORD や DWORD型を 以下にVBで処理するのか
VCはサボってましたので ここが難問なのです
ポインタがからむものはちょっと
他に楽な関数があったら 教えてください
VBだけでやるほうは 自分で考えてみます
お願いします
0910デフォルトの名無しさん
NGNG普通にSetWindowPosなんかを使ってできないの?
0911デフォルトの名無しさん
NGNGLPDWORDが pcchOut As Long
DWORDが ByVal dwPart As Long とかそんな感じ。
ってゆーか google で UrlGetPart するとVB関係の記事が最初に。。。
0912デフォルトの名無しさん
NGNGゴグルであった(・∀・)
http://www.mvps.org/vbnet/
ここイイね
日本人サイトはダメね
UrlGetPart関数はIE5以上についてくるようだネ
InternetCrackURL関数のほうが イイのかしら
また調べもの
日本人って ケチというか心がせまいのか
Win32APIをVBで使う宣言で著作権云々いうとこあるね
オイオイって感じ
困った人達だ
0913デフォルトの名無しさん
NGNGWin2kだと、ドライブをフォルダとしてマウントできるので、リネームだけでフォルダを移動させられない
ことがあるので、調べたいのですが。
何かいい方法ないでしょうか?
0914デフォルトの名無しさん
NGNG0915デフォルトの名無しさん
NGNGリネームで移動させてみて失敗したらダメでいいんじゃない?
0916デフォルトの名無しさん
NGNGDefFrameProcの2つ目の引数のクライアントウィンドウのインスタンスは
何を指定すればいいのでしょうか?
毎回getWindowで指定するのがいいのでしょうか?
VC++使ってMDI作ってる人なんて、あまりいないと思いますが・・・・
いればよろしくお願いします
0917デフォルトの名無しさん
NGNG猫行け、猫。
0918デフォルトの名無しさん
NGNGそのウィンドウのハンドルを取得するコードが必要になりました。
しかし、いろいろ探してみたのですが、フックをかける方法か、タイマで定期的に EnumWindow を回すか、どちらかの方法しか見つかりません。
最終的にはこれでいくしかないんでしょうけど、もっとシンプルに、
他のプロセスに迷惑を与えないような、またシステムに負荷をかけないような方法で、
ウィンドウが表示されたことを検知する方法はないものでしょうか?
(ウィンドウが生成されたら送られてくるメッセージなどがあればいいんですが・・。
ざっと探したところ、見つかりませんでした)
使用言語は Visual C++ で、MFC は使っていません。SDK でガリガリやってます。
2000/XP で動作すればいいので、9x 系にはない API やテクニックによる解決法も大歓迎です。
0919デフォルトの名無しさん
NGNGWM_CREATE
0920918
NGNGお返事ありがとうです。
でも、WM_CREATE って自分(もっといえば自スレッド)がウィンドウを作成したときに
送信されるもので、他スレッド、プロセスが作成(表示でもいいですが)されたときには送られてきませんよね?
0921デフォルトの名無しさん
NGNG0922デフォルトの名無しさん
NGNGWH_CALLWNDPROCRET でフックかけて WM_CREATE 捕まえられないか?
0923デフォルトの名無しさん
NGNGふつうはWH_CBTだろ
0924デフォルトの名無しさん
NGNG0925918
NGNG>>921>>922
やっぱりフックですか・・。うーん。
>>924
SetWinEventHook を調べてみましたが、英語の資料しか見つかりませんでした(^^;
Google で検索して、日本語ページ4つで全部 MS のものでかつ Active Accessibility のもの・・。
他に参考となる資料はありませんか?
MSDN の英語資料を見ると、SET_OBJECT_CREATE で window object を作成したときを
キャッチできるようなのですが、それ以上は私の英語力では読みとれませんでした。
0926デフォルトの名無しさん
NGNG0927918
NGNGSetWindowsHookEx とは別に、SetWinEventHook というのもあるらしいです。
Accessibility の API だそうですが・・。
あ・・・
SetWindowsHookEx で WH_CBT でよさそうな感じですね(^^; >>923
すみません、調べが足りませんでした。
0928デフォルトの名無しさん
NGNGリソーススクリプトの書式がわからんのですよ。
下に書いたようにやったら、どうやらダイアログを表示せずに
即終了してしまうみたいで。どなたか教えてください。
// main.cpp
DialogBox(hThisInst, "SAMPLEDLG", NULL, (DLGPROC) DialogFunc);
// main.rc
SAMPLEDLG DIALOGEX 10, 10, 320, 240
CAPTION "sample"
STYLE WS_OVERLAPPEDWINDOW | WS_VISIBLE
{
CONTROL "", IDD_RICHEDIT, "RICHEDIT", WS_BORDER | WS_VSCROLL | ES_MULTILINE , 0, 0, 10, 10
}
0929デフォルトの名無しさん
NGNGMFC だと AfxInitRichEdit()というのを呼ばないといけない。
だからそれに相当することをやらないといけないんだろうけど
あとは知らない。
0930デフォルトの名無しさん
NGNGダイアログを表示する前の適当なところで
::LoadLibrary("RICHED32.DLL");を入れてリッチエディットのクラスを登録しておかないと行けない。
0931デフォルトの名無しさん
NGNGLoadLibraryしてませんでした。感謝。
0932デフォルトの名無しさん
NGNGCtrl+key Shift+key を検出するには、自分でShiftの状態をフラグで持っているとか、
GetASyncKeyStateなどで調べるのがふつうなのでしょうか?
0933デフォルトの名無しさん
NGNG0934デフォルトの名無しさん
NGNG素直にアクセラレータ使え
0935デフォルトの名無しさん
NGNGフルキーカスタマイズを実現したいため、
全部のキーパターンをアクセラレータに登録するのが面倒なんで、困るんです。
0936デフォルトの名無しさん
NGNGアクセラレータテーブルは作れるよ。MSDN調べてみるといい。
0937デフォルトの名無しさん
NGNGどうでもいいがWM_KEYDOWNで使うならGetKeyStateの方が普通。
0938デフォルトの名無しさん
NGNGサンクス、調べてみます。
WM_KEYDOWNだと、日本語キーボードで ';' ':'がたいてい別キーなのに、
VKコードが同じだったり使いづらいので、WM_CHARと併せて2回判定する必要が
ありそうだったので、困ってました。
0939デフォルトの名無しさん
NGNGCreateFontW に DEFAULT_CHARSETを設定してもだめだし、
どのようなパラメータでフォントを作成すればいいのでしょうか?
0940デフォルトの名無しさん
NGNGフォントとか色々インストールしてますか?
0941デフォルトの名無しさん
NGNG設定する方法を教えてください。
メニューと同じ名前のアクセラレータを作っただけでは働かず、
WM_INITDIALOGで LoadAccelerators(hInst, "samplemenu");
って感じにやっても働きませんでした。
0942デフォルトの名無しさん
NGNGTranslateAcceleratorやらなきゃ。
問題は、これをどこでやるかだ・・・
0943941
NGNG「メッセージループしてるところで捕らえる」、ってのは解ったのですが
DialogBox(...) でダイアログを作ってるので、何処がメッセージループに
なってるのかが解りません。
CreateDialog(...)に書き直すのは問題ないのですが、書き直さないで
実現できる方法は無いでしょうか?
0944デフォルトの名無しさん
NGNGCreateDialogBoxで作って、自分でメッセージループを回す
0945デフォルトの名無しさん
NGNGモーダルダイアログボックスは、メッセージループを自分で回してしまうので
無理。モーダレスダイアログボックスでモーダルダイアログボックスをエミュ
レートしましょう。MFC 使ってもいいけど。
0947デフォルトの名無しさん
NGNGバイナリは分けるしかないでしょうか?
同じバイナリにすると、OSによって読み込むdllファイルを動的にかえるってことを
しなければならないとおもうのですが、そんなことが果たして可能なのでしょうか?
0948デフォルトの名無しさん
NGNG0949デフォルトの名無しさん
NGNG> OSによって読み込むdllファイルを動的にかえる
LoadLibrary() 使いましょう。
0950947
NGNGでもラッパー関数ないでそのAPIを呼んだら同じことなんでは?
>>949
なるほど。
でもよく考えたら、やっぱりNTにないAPI関数がコードにある時点でだめなような
気がしてきました・・・
0951デフォルトの名無しさん
NGNGNTにないAPI関数をコードから取り除くためにLoadLibrary()を使うんだよ
GetVersionEx()を使って場合分けすれ
0952947
NGNGそうだったんですか・・・
わかりました。ちょっとMSDN逝って来ます。
0953947
NGNGおおざっぱなところでは、
if(version = WIN2000)
{
HINSTANCE hLib = LoadLibrary("aaa.dll");
if(hLib)
{
FARPROC fp2000API = GetProcAddress(hLib, "only2000Func");
if(fp2000API )
{
(*fp2000API)();
}
}
}
てなところでしょうか?
実は2つほど疑問があります。
0954947
NGNG# 今ところNTで実行するときにでてくるエラーダイアログからしかわからん(w
疑問2: 上記ロジックでやれば、ひょっとしてOSでの場合分けはいらないのでは?
# if(fp2000API)があるからなんですが。
0955デフォルトの名無しさん
NGNGa1-2 FindFirstなどで検索(一般のプラグイン実装とおなじやね)
a2 yes
0956947
NGNG>a1-1 決めうち
> a1-2 FindFirstなどで検索(一般のプラグイン実装とおなじやね)
なるほど。FindFirstFileでdllを探しにいうということですよね?
dllがなかったらあきらめると。
> a2 yes
ですよね。ありがとうございます。
0957947
NGNGありがとうございました。
0958デフォルトの名無しさん
NGNG同名の別仕様関数が隠しAPIなどで他のOS上に実装されて
いないことが保証されているなら場合分けの必要はないが
OSごとに処理ルーチンが異なるんだったら普通しとくもんだろ
0959デフォルトの名無しさん
NGNG文字列とデバイスコンテキストを渡してやると幅を返すような奴。
MSDNのテキストのとこには見つからなかったもので。
0960デフォルトの名無しさん
NGNG0962デフォルトの名無しさん
NGNG新スレ立てマスタ
09631000!
NGNG0964デフォルトの名無しさん
NGNGが
UpdateWindow(hWnd);
より優れている点はありますか?
SendMessageでWM_PAINTを送るメリットを何一つ感じません。
0965デフォルトの名無しさん
NGNGなんでそんなことすんの?
0966デフォルトの名無しさん
NGNGそんなことって何?
0967デフォルトの名無しさん
NGNGwParamとlParamが0じゃイカンだろ(違
自分で勝手にWM_PAINTを送りつけても、クリッピング領域とか管理してないから
まともに再描画はされないぞ。メリットとか言う以前に仕様違反。
0968デフォルトの名無しさん
NGNGA window receives this message through its WindowProc function.
LRESULT CALLBACK WindowProc(
HWND hwnd, // handle to window
UINT uMsg, // WM_PAINT
WPARAM wParam, // not used
LPARAM lParam // not used
);
Parameters
wParam
This parameter is not used.
lParam
This parameter is not used.
だけど、確かwParamはたしかHDCを指してたような
0969WM_PAINT
NGNGsent by an application』. To force a window to draw into a specific
device context, use the WM_PRINT or WM_PRINTCLIENT message.
>だけど、確かwParamはたしかHDCを指してたような
For some common controls, the default WM_PAINT message processing
checks the wParam parameter. If wParam is non-NULL, the control
assumes that the value is an HDC and paints using that device context.
0970デフォルトの名無しさん
NGNGダブルクリックの時間はどうやって取得しますか?
二回目のクリックで、WM_LBUTTONDBLCLKが送られなくなるまでの時間。
ダブルクリック動作を手動で実装しなければいけなくなったので。
0971デフォルトの名無しさん
NGNG標準じゃないクラスの窓は、作者の実装次第。
WPARAMがゼロじゃない時はBeginPaint〜EndPaintを呼ばずにWPARAMを使う癖をつけてもいいかも。
0973970
NGNG0974デフォルトの名無しさん
NGNG最近のソフトによくあるアイコン付きのメニュー(Officeとかみたいの)
はAPIではどうやって作るんでしょう?
0975デフォルトの名無しさん
NGNG0976デフォルトの名無しさん
NGNG0977デフォルトの名無しさん
NGNG「Shift + Home」をAPIで押した状態にしたい。
その場合、どうすれば良いか?
ただし、keybd_event等はKey_Down等のイベントが起きるので
使いたくない!!
できれば、SendMessage(PostMessage)等が理想。
0978デフォルトの名無しさん
NGNG0979デフォルトの名無しさん
NGNG0980デフォルトの名無しさん
NGNG0981デフォルトの名無しさん
NGNG0982デフォルトの名無しさん
NGNG0983デフォルトの名無しさん
NGNG0984デフォルトの名無しさん
NGNG0985デフォルトの名無しさん
NGNG0986デフォルトの名無しさん
NGNGレス数が950を超えています。1000を超えると書き込みができなくなります。