Win32API質問箱 Build37

このエントリーをはてなブックマークに追加
952デフォルトの名無しさん:2005/12/04(日) 15:19:52
あなたの場合、日本語の勉強が先でしょう。
953デフォルトの名無しさん:2005/12/04(日) 15:22:11
関係あるかどうかわからんが
GetCurrentDirectoryが必ずしもexeのあるフォルダを指すとは限らんよ
954デフォルトの名無しさん:2005/12/04(日) 15:33:57
DOSさわったこと無いプログラマが増えてきたんかな。
955デフォルトの名無しさん:2005/12/04(日) 15:46:14
>>951
GetModuleFileName使えば?
956デフォルトの名無しさん:2005/12/04(日) 16:01:16
>>947,954
PSPから環境変数領域のセグメントを調べて
直接書き換えればよい
ttp://www5c.biglobe.ne.jp/~ecb/assembler2/2_1.html

Windows上なら別プロセスに対しては意味が無くなるので
素直に >>949 の SetEnvironmentVariable 等を使う方がよい
957デフォルトの名無しさん:2005/12/04(日) 16:08:12
>>956
WinNT系ならレジストリいじればいいはず。
Win9x系なら非公開APIを使ってシステムの環境変数領域を取得し、
メモリの内容を直接書き換える。
958デフォルトの名無しさん:2005/12/04(日) 16:09:09
>>929
>DirectXのシェーダ機能を無理やり使ってPCからキーン・・・という音を出せばGOOD!

おいおい、それ俺のNEC Lavie のノートPCだおwwwwwwっww
画面のスクロールするとキーンwww
959デフォルトの名無しさん:2005/12/04(日) 18:15:56
GetOpenFileNameへのコントロールの追加を「CreateWindowで」動的に、
行いたいのですが、次のようなHookProcではうまくいきません。
具体的には、ダイアログの描画が適切に行われず、画面が乱れます。
どうしたらよろしいでしょうか?

UINT_PTR CALLBACK OFNHookProc(HWND hdlg, UINT msg, WPARAM wParam, LPARAM lParam) {
    switch (msg) {
        case WM_INITDIALOG : {
            MoveWindow(hdlg, 30, 17, 300, 22, FALSE);
            CreateWindow("ComboBox", "", CBS_DROPDOWNLIST | WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_GROUP | WS_TABSTOP, 130, 0, 164, 100, hdlg, (HMENU)0x1000, Instance, 0);
            return 0;
        }
    }
    return 1;
}
960デフォルトの名無しさん:2005/12/04(日) 18:32:28
>>951です
>>952さんそうですね。日本語難しいです。
>>953さん。
確かにexeを指すわけではないようなので、
一番最初の立ち上げにカレントフォルダを取得したらいいのかなと思っているのですが。
>>954さんdirやcd なんかしかつかわなくて、
>>955さんへ。
一度試したのですが、最初からうまくいかなくて、
どううまくいかないのか、よくわかりません。
ので、もう少し試してみます。

皆様いろいろありがとうございます。
961デフォルトの名無しさん:2005/12/04(日) 19:17:22
>>960
GetModuleFileName (GetModuleHandle(NULL),buff,sizeof(buff)-1);
こいつからdatファイルのパスを生成汁
962デフォルトの名無しさん:2005/12/04(日) 19:21:49
>>961をもう少し丁寧に言うと


GetModuleFileNameで実行ファイルのパス取得
         ↓
PathRemoveFileSpecでファイル名部分を削除
         ↓
PathAppendでそれとdatファイル名をくっつける
         ↓
datファイルのパス完成
963デフォルトの名無しさん:2005/12/04(日) 22:16:05
>>962
駆け出しの頃に誰もが困惑した経験があるのが、バックスラッシュの切り出しだよな。

【初心者へのお題】
以下のフルパスからディレクトリ名とファイル名を分割せよ。
ただし、tchar.hとC標準関数を用いること。Win32APIは使用禁止。

C:\噂の真相\一覧表\赤十字.doc
964デフォルトの名無しさん:2005/12/04(日) 22:17:20
スレ違いだゴルァ
965デフォルトの名無しさん:2005/12/04(日) 22:20:49
今アプリケーションを作成していまして、検索ダイアログを
作ったのですが、いったん検索ダイアログを閉じてしまうと、
CFindReplaceDialogオブジェクトがNullになってしまうので
すが、どうにかして状態を残しておくことはできないでしょうか?
CFindReplaceDialogオブジェクトを残しておきたい理由としまして、
ダイアログを閉じても、F3ボタンで検索の続きができるように
したいのです。どなたか教えていただけないでしょうか?
966デフォルトの名無しさん:2005/12/04(日) 22:27:02
スレ違い
967デフォルトの名無しさん:2005/12/04(日) 22:29:51
968デフォルトの名無しさん:2005/12/04(日) 23:39:26
何だったか忘れたけど日本語対応の
jstrrchrって関数がついてるコンパイラがあったなぁ
969デフォルトの名無しさん:2005/12/04(日) 23:48:31
そんなのはMSC/VCにもあるぞ。
970デフォルトの名無しさん:2005/12/05(月) 13:10:50
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1206.txt

//パレット(RGBQUAD構造体)の終わりの位置の取得
offSet = *(LPDWORD)(*buf + 10);

は、コメントの通り、ビットマップメモリの始めから、
パレットの終わりの位置を得る式だと思うんですけど、
(1,24ビットなら54+0、4ビットなら54+16*4、8ビットなら54+256*4)
なぜこの式でそれが得られるのでしょうか。
971デフォルトの名無しさん:2005/12/05(月) 13:26:22
>>970
BITMAPFILEHEADERのbfOffBitsパラメータを参照してるだけ

972デフォルトの名無しさん:2005/12/05(月) 13:30:25
>>970
bufが指す位置にはBITMAPFILEHEADERがある。

っていうか、そのプログラム合ってる?
offset=のところ、*が1個多くね?
973デフォルトの名無しさん:2005/12/05(月) 13:42:47
>>972
bufはLPBYTE*だからあってるよ。
974970:2005/12/05(月) 13:44:04
ありがとうございます。

>>971
なるほど。分かりました。
ビットマップファイルを作るときそこに値を入れますもんね。

>>972
VCとBCCで一応正しく動作しています。
DIB系のは、サイトに載っているのがグローバリー変数なので、
ローカル変数で出来るように意識したんですが、
記述としてよい書き方かは、良く分かりません。
975970:2005/12/05(月) 13:45:14
>>973
あってて良かったです。
976デフォルトの名無しさん:2005/12/05(月) 14:18:47
>>973
ウホ ほんとだ。よく見てなかった。
bufはLPBYTEだと思い込んでた。
977959:2005/12/05(月) 16:18:41
無理なんでしょうか
978デフォルトの名無しさん:2005/12/05(月) 16:47:43
スレッドの中から自分を Create したときの
ハンドルを取得したいと思い
スレッドの中で以下のようにしました

HANDLE hThreadFake = GetCurrentThread();
HANDLE hThreadReal;
DuplicateHandle(
hThreadProcess,
hThreadFake,
hThreadProcess,
&hThreadReal,
0,
FALSE,
0
);

このようにして得られる
ハンドル hThreadReal が
このスレッドのハンドルではなく
なぜか,次にスレッドを Create したときの
ハンドルになります.

なぜこのようになるのでしょうか?
979デフォルトの名無しさん:2005/12/05(月) 18:01:53
GetMessage()でユーザからのメッセージをmsgに格納し,
それをDispatchMessage()でウィンドウプロシージャに渡す事は解りましたが。

例えばウィンドウA,Bを作成し、ウィンドウAへのメッセージとウィンドウBへのメッセージも
このメッセージループで取得されますよね?そしてDispatchMessageで適当なウィンドウプロシージャへ
送出するのですが。
この送出先というのは、DispatchMessageがMSG構造体のメンバHWND hwndから判断してるのでしょうか?
980デフォルトの名無しさん:2005/12/05(月) 19:13:52
>>978
レスが1000件に到達したから
981デフォルトの名無しさん:2005/12/05(月) 19:16:25
>>979
それは違う
そこに来るのは自分宛のMsgのみ

DispatchMessageで回ってくるMsgとは別に
Windows自身がMsgキューを持っている
そちらにはどのWindowsへ送るMsgかのハンドルを持っている
982デフォルトの名無しさん:2005/12/05(月) 19:57:06
>>981
??????????
別々のウィンドウでも同じアプリケーションのものなら単一のメッセージループですが?(一部除く)
>>979のウィンドウA、Bもそういうことだろ?
983デフォルトの名無しさん:2005/12/05(月) 21:00:00
>>959
なんでそんなめんどくさいことしてんの?
lpTemplateNameじゃ駄目なん?
984デフォルトの名無しさん:2005/12/05(月) 22:09:48
>>962さん丁寧に教えていただきありがとうございます。
その通りにするとちゃんとできました。
>>963さん
char *Getdictory(){
char moji[] = "C:\噂の真相\一覧表\赤十字.doc";
int mojicount = strlen(moji);
char damy[mojicount+1];
int i,j;
for(i=0;i<strlen(moji);i++){
if(moji[mojicount-i]=='\\') break;
}
for(j = 0;j<i;j++){
damy[j] = moji[j];
}
damy[++j]='\0';
return damy;
}
こんな感じでしょうか。コンパイラーは通してないですが、
場違いですみません。
985デフォルトの名無しさん:2005/12/05(月) 22:13:49
>>984訂正
for(j = 0;j<i;j++){
ここちがう。
for(j = 0;j<mjicount-i;j++){
まちがいだらけかも。
986デフォルトの名無しさん:2005/12/05(月) 22:34:28
>>982
>同じアプリケーション
同じスレッドでしょ

>>984
IsDBCSLeadByte, CharNext あるいは mbcs 対応の crt 関数使わないと
'\\' を正確に判断できないよ
987デフォルトの名無しさん:2005/12/05(月) 22:39:33
その前に

int mojicount = strlen(moji);
char damy[mojicount+1];

なんだよこれ
初心者スレ行け
988デフォルトの名無しさん:2005/12/05(月) 22:44:19
元のコードを結構修正することになるけど、CharNextのほうが986のより楽。

>>987
C99という可能性はまだ消えていない。
989デフォルトの名無しさん:2005/12/05(月) 22:44:56
>>987
確かに。
スペルはdamyじゃなくてdummyだわな。
話にならん。
990デフォルトの名無しさん:2005/12/05(月) 22:53:55
WM_MOUSEMOVEメッセージについてなんですけど、
マウスカーソルがスタティックテキスト(含むグループボックス)の子ウィンドウ上の時にはメッセージ来るようなんですが、
他の子ウィンドウ(エディットコントロールやチェックボックスなど)上だとメッセージが来ないようなのです。

うまくスタティック以外のウィンドウ上でのマウスカーソルの動きをキャッチする方法はないのでしょうか。
991デフォルトの名無しさん:2005/12/05(月) 23:19:06
>>987
allocaだ
992959:2005/12/05(月) 23:57:31
>>983
任意のhWndを持つウィンドウの追加が動的に行えればそれでも
構いません。ただし、.resファイルなどは一切使用しないことが
条件なのです。どうすればいいでしょうか?
993デフォルトの名無しさん:2005/12/06(火) 01:01:40


Win32API質問箱 Build38
http://pc8.2ch.net/test/read.cgi/tech/1133798345/
994デフォルトの名無しさん:2005/12/06(火) 01:04:01
Z
995デフォルトの名無しさん:2005/12/06(火) 01:12:23
1000なら元カノをレイープ
996デフォルトの名無しさん:2005/12/06(火) 01:40:29
>>995
犯罪予告すると、かなりの確率で警察のお世話になるよ。
997デフォルトの名無しさん:2005/12/06(火) 01:43:28
大丈夫、元カノはくたびれた南極ちゃんだから
998デフォルトの名無しさん:2005/12/06(火) 02:01:13
1000
999デフォルトの名無しさん:2005/12/06(火) 02:02:03
1000
1000デフォルトの名無しさん:2005/12/06(火) 02:02:17
1000
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。