■過去ログ置き場に戻る■ 1- 次250 最新50


[memo] "9999999999_00.html#R20" という感じで、URLの最後に "#RレスNo" を追加すると幸せになれます。

Win32API質問箱 Build14
1 名前: ◆ncKvmqq0Bs :03/10/05 13:33
.NET Framework!? 知らんな!!
そんなヤル気のあるネィティブプログラマ集まれ!

スレ立てるまでもない、Win32APIについての質問はこちらへどうぞ。
やさしい にいさま達がきっと答えてくれる(ハズ)。
でも、質問する前に検索ぐらい汁!!
過去スレ・参考は>>2 ぐらいを参照するべし。

2 名前: ◆ncKvmqq0Bs :03/10/05 13:34
- 過去スレ
Build13:http://pc2.2ch.net/test/read.cgi/tech/1059549320/
Build12:http://pc2.2ch.net/tech/kako/1056/10560/1056033645.html
Build11:http://pc2.2ch.net/tech/kako/1052/10526/1052651750.html
Build10:http://pc2.2ch.net/tech/kako/1047/10478/1047819779.html
Build9:http://pc2.2ch.net/tech/kako/1044/10449/1044929160.html
Build8:http://pc2.2ch.net/tech/kako/1040/10409/1040964626.html
Build7:http://pc3.2ch.net/tech/kako/1036/10366/1036654893.html
Build6:http://pc3.2ch.net/tech/kako/1032/10325/1032548635.html
Build5:http://pc3.2ch.net/tech/kako/1028/10285/1028580373.html
Build4:http://pc3.2ch.net/tech/kako/1023/10233/1023361418.html
Build3:http://pc.2ch.net/tech/kako/1017/10170/1017072275.html
Build2:http://pc.2ch.net/tech/kako/1006/10067/1006783012.html
Build1:http://pc.2ch.net/tech/kako/991/991576947.html


- MSDN Online
http://www.microsoft.com/japan/msdn/default.asp
- 猫でもわかるプログラミング
http://www.kumei.ne.jp/c_lang/index.html
- Platform SDK Update
http://www.microsoft.com/msdownload/platformsdk/sdkupdate/

3 名前:デフォルトの名無しさん :03/10/05 14:11
>>1 オツ─wwヘ√レvv〜(゚∀゚)─wwヘ√レvv〜─ !!

4 名前:デフォルトの名無しさん :03/10/05 14:32
前スレ995より:
--------------------------------------------------------------------------------
ShellExecuteという関数を使って
関連付けがなされているファイルを
起動できると聞きました
プログラム中にwindows.hがIncludeされていて
windows.hの中にshellapi.hがIncludeされています
shellapiの中に
SHSTDAPI_(HINSTANCE) ShellExecuteA(HWND hwnd, LPCSTR lpOperation, LPCSTR lpFile, LPCSTR lpParameters, LPCSTR lpDirectory, INT nShowCmd);
#define ShellExecute ShellExecuteA
と書かれていてぐぐって見たのですが
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/reference/functions/shellexecute.asp
くらいしかなくどうやって使ったらいいかわかりません
具体的にはC:\testフォルダの中のaaa.xlsを指定すると
エクセルが立ち上がってaaa.xlsが読み込まれるというようにしたいです
windows2000+BCC551です
どうかよろしくお願いします
--------------------------------------------------------------------------------
だそうな。マルチでなければ誰か面倒見てやってくれ

5 名前:前スレ995 :03/10/05 15:08
自己解決しました
がネットワーク上のファイルを指定すると
サーバに登録されていないユーザの為
アクセス拒否されます
プログラムソースにユーザ−IDとPASSを書いておいて
接続してからというやり方は出来ないものでしょうか


6 名前:前スレ981 :03/10/05 16:24
前スレ>>990
テキストファイルなんかの表示ならわかるのですが・・・。
よろしくお願いします。

7 名前:デフォルトの名無しさん :03/10/05 16:36
>>6
ええっ、じゃあ絵の描き方から説明が必要なのかな煤i゚Д゚;

1、ウィンドウを作成
2、WM_PAINTメッセージを受けてクライアント領域に絵を表示
3、絵を書きたいタイミングにInvalidateRectを発行して再描画

辺りから始めてみてはどうでしょう。
描きたい絵は、BYTE buf[width*height*4]とか確保して
ベタデータで絵を描いたら、上記2の箇所で
SetDIBitsToDeviceを呼び出してHDCへ描画すれば絵が描けます。


8 名前:デフォルトの名無しさん :03/10/05 17:00
>>6
テンプレにある猫でも(ry見に行けば勉強になると思うよ。

>>7
StretchDIBitsも(・∀・)イイ

9 名前:デフォルトの名無しさん :03/10/05 18:11
モニターの電源をOn/OffするAPIってなんでしょう?

10 名前:デフォルトの名無しさん :03/10/05 18:12
>>5 携帯からだから記憶テキトーだけど、WNetAddConnection2 とか?

11 名前:デフォルトの名無しさん :03/10/05 18:38
>>9
すみません自己解決しました.
SendMessage(hwnd, WM_SYSCOMMAND, SC_MONITORPOWER, MONITOR_OFF);
これでON.
SendMessage(hwnd, WM_SYSCOMMAND, SC_MONITORPOWER, MONITOR_OFF);
これでOFF.
これで実現できました

12 名前:デフォルトの名無しさん :03/10/05 18:39
>>9
間違えました
SendMessage(hwnd, WM_SYSCOMMAND, SC_MONITORPOWER, MONITOR_ON);
これでONです

13 名前:デフォルトの名無しさん :03/10/05 18:49
SendMessageについて質問があります。
1文字だけあるウィンドウに送ろうとしたときに

SendMessage(hWnd, WM_CHAR, Asc("a"), 0)

だとうまくメッセージを受信できるのですが、
以下のように、2バイト文字にすると

SendMessage(hWnd, WM_CHAR, Asc("亜"), 0)

文字化けしてうまく受信できません。
どうしたらうまく送信できるのでしょうか?
よろしくお願いいたします。

言語はVBです。

14 名前:デフォルトの名無しさん :03/10/05 18:56
ASC("亜")でなにが返ってくるの?
0x88きゃ?

15 名前:デフォルトの名無しさん :03/10/05 18:59
>>13
Asc()はascii文字セット専用だからでは?
shift-jisには対応できてないから文字化けするんだと思うけど。

16 名前:デフォルトの名無しさん :03/10/05 19:00
>>14
戻り値を16進に変換したら889Fと帰ってきました。

17 名前:デフォルトの名無しさん :03/10/05 19:03
>>15
なるほど・・・。
shift-jisに対応するAscに変わる関数というのは
存在するものなのでしょうか?

18 名前:デフォルトの名無しさん :03/10/05 19:05
というか問題はWM_CHARでないのか?
889FはShift-JISの"亜"でそ

19 名前:デフォルトの名無しさん :03/10/05 19:13
すこし状況を説明しますと
すでにC++で書かれたソースがあって
それを元にVBに落としているところなのです。
そのサンプルソースが

LPCSTR pString = InputView->Lines->GetText();
if(pString[0])
{
for(i=0;pString[i];i++)
SendMessage(hWnd,WM_CHAR,(UCHAR)pString[i],0);
PostMessage(hWnd,WM_KEYDOWN,'\r',0);
m_pHistory->AddString(pString);
}

このような感じになっていまして
それでWM_CHARをそのまま使ってしまったのです。
上記のソースは問題なく2バイト文字も送信できています。

20 名前:デフォルトの名無しさん :03/10/05 19:26
>>19
受け側でどう化けてるのか調べるのが手っ取り早いと思うけど。
思いつきだけど、0x889Fじゃなくて0x9F88で受信してるとか?

21 名前:デフォルトの名無しさん :03/10/05 19:50
>>20
受け側はすでに完成されたプログラムでコードまで
判別できないのですが「 」とか「・」が表示されています。
ネットで、【5.本日のお題 WM_CHAR による2バイト文字取得サンプル】
procedure THoge.WMChar(var Message: TWMKey);
var
CH, CL: Char;
M: TMsg;
S: String;
begin
if Message.CharCode in [$20..$7E, $A0..$FF] then
// 1バイト文字
S := Chr(Message.CharCode)
else
begin
// 2バイト文字
CH := Chr(Message.CharCode);
if (CH in LeadBytes) and
PeekMessage(M, Handle, 0, 0, PM_NOREMOVE) and
(M.Message = WM_CHAR) and
(M.wParam in [$40..$FF]) and
PeekMessage(M, Handle, 0, 0, PM_REMOVE) then
begin
CL := Chr(M.wParam);
S := CH + CL;
end;
end;
end;
みたいなサンプルを拾ったのですが
Delphiなのでさっぱりわかりません・・・。
似たようなことをやっているのでしょうか?

22 名前:デフォルトの名無しさん :03/10/05 20:10
>>21
SendMessage(hWnd, WM_CHAR, Asc("亜")>>8, 0)
SendMessage(hWnd, WM_CHAR, Asc("亜")&255, 0)
は?

23 名前:デフォルトの名無しさん :03/10/05 20:18
>>13
1バイトずつデータを送ると、受け取るアプリによっては文字化けする。
WM_IME_CHARで、2バイト文字も1回で送れば、文字化けしないかも。


24 名前:デフォルトの名無しさん :03/10/05 20:23
>>19
>>SendMessage(hWnd,WM_CHAR,(UCHAR)pString[i],0);
>>PostMessage(hWnd,WM_KEYDOWN,'\r',0);

これだと、2バイト文字の1バイト目と2バイト目の間に、
"\r"が入ってしまわないか?


25 名前:デフォルトの名無しさん :03/10/05 20:41
みなさんありがとうございました。
>>23さんの方法ですんなり成功しました。
またよろしくお願いいたします。

ちなみに値は WM_IME_CHAR = &H286 でした。

26 名前:デフォルトの名無しさん :03/10/05 21:48
学校の卒業研究でデータベース(Acces)をVisual C++6.0で
読み書きするプログラムを作っています、アプリケーションの種類は
ダイアログベースです。勉強になるサイトや本などがありましたが
教えていただけませんか。おねがいします。
あとODBCを使うとかいってました。

27 名前:デフォルトの名無しさん :03/10/05 23:27
>>26
ADOつかっとけ


28 名前:デフォルトの名無しさん :03/10/06 06:27
CreateWindowでスタイルをWS_CHILDWINDOW|WS_OVERLAPPEDWINDOWとして
子ウィンドウを作成して表示もできてるんですが、
表示の優先が、完全に逆になってます。
親ウィンドウを最小化して戻すと、一番手前に描画されるウィンドウが
一番下の優先になってます。
ウィンドウの作成のしかたが悪いんでしょうか?


29 名前:26 :03/10/06 07:22
ADOって何ですか?
できればサイトを教えてほしいのですが。
よろしくお願いします

30 名前:デフォルトの名無しさん :03/10/06 07:30
ttp://www.google.co.jp/search?q=ADO+site%3Amicrosoft.com&hl=ja&lr=lang_ja&ie=UTF-8&oe=UTF-8

31 名前:デフォルトの名無しさん :03/10/06 09:21
ListViewのColumnをフラットにするにはどうすればいいですか?
LVS_EX_なんとか辺りで出来そうな気がするんですが探しても見つかり
ませんでした…。


32 名前:31 :03/10/06 09:40
ごめんなさい、海外のサイト漁ったら出てきました_| ̄|○
LV_NOSORTHEADERですね、マジすまんです。


33 名前:デフォルトの名無しさん :03/10/06 12:29
UNIXみたいに使用中のファイルを削除する方法はありませんか?

34 名前:デフォルトの名無しさん :03/10/06 14:29
>>31
ClumnClick:=False;


35 名前:デフォルトの名無しさん :03/10/06 20:52
>>28
CHILDとOVERLAPPEDは両立しないのでどっちか選べ

36 名前:デフォルトの名無しさん :03/10/07 01:42
>>35
あわわ、ありがとう。 半端に動くんだね・・・。

ところで、MDIを自力で実現することは難しいんでしょうか?
MDIを使えということなのか・・・。つか、MDIにしたほうがいいですかね。


37 名前:デフォルトの名無しさん :03/10/07 02:22
すごい房な質問で申し訳ないんですが、
友達にデバイスコンテキストハンドルは、
取得したあと、早いうちに解放しないといけないって聞いたんですけど、
本当にそうなんですか??

WM_CREATEでGetDCでとったデバイスコンテキストハンドルを
起動中ずっと使おうと思っていたんですが…

38 名前:デフォルトの名無しさん :03/10/07 03:15
>33
フロッピーのインストーラーなんかだと削除どころか引っこ抜く事が出来る。

39 名前:デフォルトの名無しさん :03/10/07 03:41
>>37
俺もためしたこと無いんで知らないがGetDC取りっぱなしだと画面の色数を変えたりウィンドウを移動させたときにうまく行かなくなるかもね

40 名前:デフォルトの名無しさん :03/10/07 09:15
>>37
WinMEなど9x系ではDCの総数に制限がある場合がある

41 名前:デフォルトの名無しさん :03/10/07 23:34
Common Control 6で EDITBOX に対してEM_LIMITTEXTで入力制限をかけると
「文字数単位」で制限がかかる仕様みたいなんだけど、
これを「バイト数単位」で制限をかけるようにはできないのでしょうか?


42 名前:デフォルトの名無しさん :03/10/08 00:59
>41
Common Controlと"EDIT"とには関係無い気がするのだが...

43 名前:37 :03/10/08 01:12
>>39 >>40
あー、なるほど…。
だから、使うたびに取得、解放が望ましいんですね〜。

44 名前:デフォルトの名無しさん :03/10/08 05:51
>>43
全部で5個しかなかったはず。うるおぼえだけど。

45 名前:デフォルトの名無しさん :03/10/08 08:06
OWNDCにしとけば?

46 名前:デフォルトの名無しさん :03/10/08 11:13
>>45
それでもWin9xではGDIヒープを食いつぶすんでないかい
32ビットヒープから取られるならいいけど
16ビットヒープから取られるなら問題

47 名前:デフォルトの名無しさん :03/10/08 11:14
>>33
自己レス
削除はできないけどリネームはできました

48 名前:デフォルトの名無しさん :03/10/09 06:26
最新のPlatformSDKだとダイアログが真っ白になりませんか?


49 名前:デフォルトの名無しさん :03/10/09 08:54
CreateProcess のコマンドラインに32kの制限があるのは何故なんでしょうか?

50 名前:デフォルトの名無しさん :03/10/09 12:26
>>49
CreateProcessAだから? (てきとー

51 名前:デフォルトの名無しさん :03/10/09 22:20
>>49
それぐらいで十分だと思ってるからじゃないか。

DOS は、確か 128byte だったし、ちょっと前の Unix は 4K ぐらいじゃなかったっけ ?

52 名前:デフォルトの名無しさん :03/10/10 09:35
CapsLockが押されているかどうかの判定(CapsLockのOn/Offではない)は
どのようにしたらいいのでしょうか?


53 名前:デフォルトの名無しさん :03/10/10 13:11
DirectInputのBuffered Dataでも使えば?

54 名前:デフォルトの名無しさん :03/10/10 14:04
>>52 GetKeyState とか GetAsyncKeyStateとか

55 名前:デフォルトの名無しさん :03/10/10 15:28
>54
それだと、日本語キーボードでは、Shift+CapsLockのときしか
判定できないよ。

56 名前:54 :03/10/10 16:09
Σ(´Д` な、なんだってー!!英語キーボード使ってるんで気づかんかった。

57 名前:52 :03/10/10 16:25
>>54さん
>>55さんのいうとおりなんですよね

>>53さん
IDirectInputDevice::GetDeviceDataとかいうものを使うということですか?
DirectX自体ほとんど使ったことないですが頑張ってみます

58 名前:デフォルトの名無しさん :03/10/10 16:47
ネットワークプログラミングのスレで書いたらこっちできいたほうがいい、
と言われたので転載します。
何かご存知の方がいましたら教えてください。

-----

ネットワーク接続を行うマルチスレッドDLLを作っているのですが、
DLLを呼び出す側のプログラムの終了処理に、

dllcleanup();//DLLの関数。スレッド止めてリソースを解放する
FreeLibrary(hMod);
WSACleanup();

ってな感じで呼び出すと、
WSACleanup内で強制終了になります。
FreeLibraryをWSACleanupの後にしたり、
dllcleanup内でスレッドを止めたりした後に
Sleepを数百msec入れると何故かエラーしません。

なんかWSACleanupする際に気を付けるべき点があれば
教えていただけないでしょうか?


59 名前:デフォルトの名無しさん :03/10/10 17:27
スレッドが全て終了したか確認してる?

60 名前:デフォルトの名無しさん :03/10/10 17:36
Winsock が影でスレッド作ってるから、WSACleanup される前に FreeLibrary されて
あぼーんしちゃうんじゃない?

61 名前:58 :03/10/10 18:21
>>59
生成したスレッド全てに対してWaitForSingleObject(handle,INFINITE)
を使って停止を確認してます。

>>60
winsockのDLLをFreeLibraryする、っていうことでしょうか?

色々試した結果やっぱりスレッドを停止した後に何かしら
処理を挟むと(printfとかでも)エラーしないようです。

62 名前:58 :03/10/10 18:56
解決したっぽいので書いておきます。
ワーカースレッドを10個生成していて、
それらに対してWaitForMultipleObjectで終了待ちしていたのですが、
第3引数のbWaitAllをtrueにしていても何故か実際には
終了していなかったスレッドがあったようです。
原因はわかりませんが、とりあえず代わりに
10個のスレッドに対して一つずつWaitForSingleObjectすることで解決しました。

63 名前:デフォルトの名無しさん :03/10/10 21:45
>>62
WaitForMultipleObject って何 ?

って言うお約束の突っ込みはおいといて、WaitForMultipleObjects の戻り値ちゃんと確認してる ?
WAIT_FAILED とか WAIT_TIMEOUT が返って来てたなんてことないよね。

64 名前:58 :03/10/10 22:01
>>63
あー、戻り値確認してませんでした。
タイムアウト時間はINFINITE指定してたんで
まぁ、WAIT_TIMEOUTは来ないし、WAIT_ABANDONED来てもいいか、
と勝手に思ってました。

ちなみにWAIT_FAILEDってどういう時にでるんですか?

65 名前:デフォルトの名無しさん :03/10/10 23:06
>>64
変なハンドル指定してるときとか。

66 名前:デフォルトの名無しさん :03/10/11 17:16
改行の仕方を教えて下さい!

以下のように子ウィンドウを作って、テキストを表示しようとしたのですが、
\nで上手く改行できませんでした。

//子ウィンドウの作成
edt_out=CreateWindow("EDIT","",
WS_CHILD | WS_VISIBLE | ES_WANTRETURN | ES_MULTILINE | ES_AUTOVSCROLL | WS_VSCROLL | ES_AUTOHSCROLL | WS_HSCROLL,
10,50,width-10,height-20,hw,(HMENU)ID_EDTOUT,hi,NULL);

//ボタンを押した時の操作(の一部)
wsprintf(host_add,"公式名:%s\nIP:%d.%d.%d.%d",
host->h_name,
(BYTE)*(host->h_addr_list[0]),
(BYTE)*(host->h_addr_list[0]+1),
(BYTE)*(host->h_addr_list[0]+2),
(BYTE)*(host->h_addr_list[0]+3)
);
lstrcpy(buff_out,(gho.host_add));
SetWindowText(edt_out,(LPTSTR)buff_out);

67 名前:デフォルトの名無しさん :03/10/11 17:32
>>66

Windowsの改行って何だったっけ?


68 名前:デフォルトの名無しさん :03/10/11 17:33
\r\n

69 名前:66 :03/10/11 17:41
上手くいきました、ありがとうございます

70 名前:デフォルトの名無しさん :03/10/11 18:09
あるウインドウに、マウスが移動するたびその座標を使ってRectangleで四角を描くようにしたのですが、過去に描いた四角が消えません。
ダブルバッファリングを使ってFillRectで消してから四角を書くと、過去のものは消えますが子ウインドウ(ボタンなど)も一緒に見えなくなってしまいます。
なんとかできないでしょうか?

71 名前:デフォルトの名無しさん :03/10/11 18:23
WS_CLIPCHILDREN

72 名前:デフォルトの名無しさん :03/10/11 18:47
>>71
できました。どうもありがとうございます。

73 名前:デフォルトの名無しさん :03/10/12 13:07
マスクファイルからリージョンへ変更出来るようにしたいのですが何かいい方法は無いでしょうか?

1ピクセルづつ調べてCreateRectRgn();で1ピクセル分のリージョンを作成してCombineRgn();で結合していくと言う方法を
考えたのですが、大きい物になると結構遅くなってしまいます

調べてみたところ、結合されて出来たリージョンが複雑な物の場合CombineRgn();がとても遅くなるようなのですが
もっと早くできる方法は無いでしょうか?


74 名前:デフォルトの名無しさん :03/10/12 13:20
左手の法則などでマスクの境界の形状を調べてポリゴンの組み合わせにするとか
(これはこれで複雑なのであまり解決にはならないが)

1ピクセルずつ調べて、まとまったピクセルを1行n列まとめて矩形として結合するとか

二番目の方は簡単だし実用的

75 名前:73 :03/10/12 13:31
>>74
1番目は前に自分でやって見たら無理でしたが、2番目をやってみたらかなりいい感じです
これで行こうと思います、ありがとうございました


76 名前:デフォルトの名無しさん :03/10/12 20:30
設定とかのウィンドウは最初に作っておいて設定ボタンで表示させたり消したりするのと
設定ボタンが押された時に作って設定し終わったら破棄するのとどっちがいいですか?

77 名前:デフォルトの名無しさん :03/10/12 20:39
頻繁に出したり消したりするもんでなければその都度作ったほうが資源を浪費しなくていい。

78 名前:デフォルトの名無しさん :03/10/12 20:48
タスクトレイに常駐するアプリで、設定ウィンドウ(っていうかそれがメイン
ウィンドウになってる)非表示にしてるだけの見ると萎え萎え

79 名前:デフォルトの名無しさん :03/10/12 21:01
>>78
非表示にしてるのにどうやって見るのか?

80 名前:デフォルトの名無しさん :03/10/12 21:05
>>79 Spy++とか

81 名前:デフォルトの名無しさん :03/10/12 21:05
Spy++って便利だよね(*^o^*)

82 名前:デフォルトの名無しさん :03/10/12 21:07
Spy++ユーザのための設計なんかしてられるか、ボケ。

83 名前:デフォルトの名無しさん :03/10/13 00:10
チェックボックスを最初からチェックした状態で作るにはどうしたらいいですか?

84 名前:デフォルトの名無しさん :03/10/13 00:19
>83
http://pc2.2ch.net/test/read.cgi/tech/1063029371/

85 名前:デフォルトの名無しさん :03/10/13 03:16
>>83
BS_CHECKEDじゃないの?

86 名前:デフォルトの名無しさん :03/10/13 03:37
>>85
そんなもんない。

87 名前:デフォルトの名無しさん :03/10/13 03:43
なぜこのスレに誘導したのかそいつの意図が読めんな
Win32にチェックボックスがないわけじゃないのに。

88 名前:デフォルトの名無しさん :03/10/13 07:39
>>87
何言ってんのこの人 ?

89 名前:デフォルトの名無しさん :03/10/13 10:29
初心者レヴェルのネタだからだろ?

90 名前:デフォルトの名無しさん :03/10/13 10:50
>>83
BM_SETCHECK

91 名前:デフォルトの名無しさん :03/10/13 13:10
2ch風のフォントを出したいのですよ
2ch風のフォントってMS Pゴシックの12ですよね?
それで設定してTextOutで出力しても,なんか雰囲気が違うんです
(ずれてる)いろいろ考えてみたんですがこの.

hFont=CreateFont(fontSize,
0,0,0,600,0,0,0,SHIFTJIS_CHARSET,//キャラクタセット
OUT_DEFAULT_PRECIS,//出力精度
CLIP_DEFAULT_PRECIS,//クリップ精度
DEFAULT_QUALITY,
DEFAULT_PITCH | FF_DONTCARE,
FontType);

この部分に問題がありそうだなと…
それで教えていただきたいのですが,2chのAAと同じフォントを出力できる
APIの引数を教えていただきたいのです


92 名前:デフォルトの名無しさん :03/10/13 13:14
肝心なフォント名とサイズが伏せてあるのはなぜだ

93 名前:デフォルトの名無しさん :03/10/13 13:16
FontTypeは MS Pゴシックです
FontSizeにはもちろん 12が入ってます


94 名前:デフォルトの名無しさん :03/10/13 13:19
MS PゴシックなのかMS Pゴシックなのかはっきりしる
あとFontSizeはフォントの高さであってポイントじゃない

95 名前:デフォルトの名無しさん :03/10/13 13:26
MS Pゴシック ですねすみません(汗
>>あとFontSizeはフォントの高さであってポイントじゃない
えっと…じゃどうすればいいんでしょう?(滝汗


96 名前:デフォルトの名無しさん :03/10/13 13:27
>>95
MSDNでCreateFont調べりゃ変換の仕方書いてあるから・・・

97 名前:デフォルトの名無しさん :03/10/13 13:38
変換はわかりました!
それから設定でかなり2ch風に近づけることができました…
ですが…まだ微妙に違うんですよ…
AAEditer


98 名前:デフォルトの名無しさん :03/10/13 13:39
うわまだ書いてる途中だったのに(TT
AAEditerと比べるとよくわかるのですが…微妙に違うんです…
何がおかしいんでしょう…

99 名前:91 :03/10/13 13:54
できました!!
みなさんありがとう!

100 名前:デフォルトの名無しさん :03/10/13 16:32
100Gets!

101 名前:デフォルトの名無しさん :03/10/13 17:48
ウィンドウ@の子ウィンドウの子ウィンドウは@と同じプロシージャにメッセージが返ってこないのですが
そういうものなんですか?

102 名前:デフォルトの名無しさん :03/10/13 22:36
そういうもんです。子ウインドウの子ウインドウの親宛てのメッセージはウインドウ@の子ウインドウに行きます。

103 名前:デフォルトの名無しさん :03/10/13 22:45
ウィンドウ@の子ウィンドウのプロシージャーがウィンドウ@のプロシージャーと同じ物の場合は
ウィンドウ@の子ウィンドウの子ウィンドウのメッセージはウィンドウ@のプロシージャーに行くんだよね?

104 名前:デフォルトの名無しさん :03/10/14 04:52
>>103
> ウィンドウ@の子ウィンドウのプロシージャーがウィンドウ@のプロシージャーと同じ

ってすさまじー状態だな。
親ウィンドウと子ウィンドウが同じ挙動を示すのか。

105 名前:デフォルトの名無しさん :03/10/14 17:04
mciでmp3ファイルを再生する方法ですが、
mciGetDeviceID("test.mp3");
でデバイスIDを取得できるのでしょうか?

106 名前:デフォルトの名無しさん :03/10/14 23:11
>103
論より証拠。コード吊るせ!

107 名前:デフォルトの名無しさん :03/10/14 23:34
>>103
同じプロシージャを定義していれば同じところにいくだろうが、
結局ハンドルは子ウィンドウになってるぞ。


108 名前:デフォルトの名無しさん :03/10/15 18:55
自作親ウィンドウの中に作った"STATIC"の中に"BUTTON"だけがあるプログラムとかでは
親のプロシージャで制御したくねぇ?

109 名前:デフォルトの名無しさん :03/10/15 23:56
自分のレンタル鯖のmySQLのデータベースからデータを参照するために必要な
Win32APIの関数ってどの辺を使えばいいの?

関数を教えてもらったらWeb製作板へ逝きますので、使えそうな関数を教えて!


110 名前:デフォルトの名無しさん :03/10/16 06:21
任意のプログラムが起動したり終了したりしたタイミングを検知するにはどうしたらよいのでしょうか?

111 名前:デフォルトの名無しさん :03/10/16 07:22
delphiで作ったdllをc++で作った他人のプログラムに
読み込ませようとしましたが、読み込み違反が出てうまくいきません。
グローバルメモリの辺りで躓いていると思うんですが。

まず、これがc++の関数部分(画像の受け渡しです)
//---------------------------------------------------------------------------
typedef bool __stdcall (*GetImageProc) ( char* HGLOBAL* );
void __stdcall LoadJpegImage(AnsiString FileName Graphics::TBitmap*
pBitmap)
{
if ( FileExists(FileName) != true ) return;
HINSTANCE hDLL = LoadLibrary( AnsiString("Conv.dll").c_str() );
GetImageProc GetImage = (GetImageProc)GetProcAddress( hDLL "GetImage" );
HGLOBAL data;
GetImage( FileName.c_str() &data );
TMemoryStream* Memory = new TMemoryStream();
Pointer DataPtr = ::GlobalLock( data );
Memory->WriteBuffer( DataPtr ::GlobalSize(data) );
Memory->Position = 0;
::GlobalUnlock( data );
::GlobalFree( data );
pBitmap->LoadFromStream( Memory );
delete Memory;
FreeLibrary( hDLL );
}
//-------------------------------------------------------------------------

112 名前:111 :03/10/16 08:09
それでこっちがdelphiのメソッド部分

var
buffer:Pointer;

function load(fn:PChar):PCardinal;
var
bImage1:TBitmap;
jImage:TJpegImage;
x:Integer;
car:Cardinal;
stream:TMemoryStream;
begin

stream:=TMemoryStream.Create();
jImage:=TJpegImage.Create();
JImage.PixelFormat:=jf24Bit;
JImage.LoadFromFile(fn);
bImage1:=TBitmap.create();
bImage1.HandleType:=bmDIB;
bImage1.PixelFormat:=pf32bit;
bImage1.Width:=jImage.Width;
bImage1.Height:=jImage.Height;
bImage1.Canvas.Draw(0,0,jImage);
bImage1.SaveToStream(stream);
stream.Position:=0;
x:=stream.Size;
つづく

113 名前:111 :03/10/16 08:10
car:=GlobalAlloc(GHND,x); // GPTRもためしました
buffer:=Pointer(car);
GlobalLock(car);
stream.ReadBuffer(buffer^,x);
GlobalUnLock(car);
result:=PCardinal(buffer);
stream.Free;
end;

function GetImage(fileName:PChar;var data:PCardinal):boolean;
begin
data:=PCardinal(load(fileName));
result:=true;
end;

114 名前:デフォルトの名無しさん :03/10/16 09:44
>>111-113
お前はMSDN読んでこい

115 名前:デフォルトの名無しさん :03/10/16 12:58
DelphiにはMSDNはついてきません。
WebのMSDNは使いにくいし中途半端なことしか書いてありません。

116 名前:デフォルトの名無しさん :03/10/16 13:02
やる気無いならおとなしくあきらめてね。

117 名前:デフォルトの名無しさん :03/10/16 13:21
ヽ(`Д´)ノ モウコネエヨ!!

118 名前:デフォルトの名無しさん :03/10/16 13:24
エキスポートしてないからか?

119 名前:111 :03/10/16 13:42
>>114
すみません。色々弄っている内に
バグだらけのコードを送ってしまったようで。
特にgetImageにstdcallが無いのは最悪ですね。

肝心の不都合は何だか
よく分からないうちに自己解決しました。


120 名前:111 :03/10/16 13:48
>>115
delphiには英語版のwin32.hlpがついてますよ。
programFileの下のcommonfileを見るべし。



121 名前:デフォルトの名無しさん :03/10/16 14:01
英語版でいいなら最新のSDK落としてくれば済む話だと思うが。

122 名前:デフォルトの名無しさん :03/10/16 15:14
Web上で見てもSDKインストールしてローカルで見ても、MSDNの情報は同じだ。

123 名前:デフォルトの名無しさん :03/10/16 16:48
結論:MSDNライブラリサブスクリプションを買え

124 名前:デフォルトの名無しさん :03/10/16 19:04
ちょっとやってわからなかったらすぐ質問・・・・・

125 名前:デフォルトの名無しさん :03/10/16 22:00
EDITを一行のみで使う場合で、スタイルにES_AUTOHSCROLLを指定しなかったときは
Ctrl+Vなどで貼り付けをするとウィンドウからはみ出す部分は、
貼り付けてくれないような仕様になっているのですか?

126 名前:デフォルトの名無しさん :03/10/16 22:39
>>125
自分で試せ、ボケ

127 名前:デフォルトの名無しさん :03/10/16 22:43
GetTextExtentPoint32で得られる文字列の高さと幅って
改行は考慮されないんでしょうか?
俺の環境じゃ幅に加えられてるだけなんだけど・・・

128 名前:127 :03/10/16 22:55
上の質問じゃ意味なさすぎなんで...
やりたい事は、文字列を表示するのに
必要な領域を知りたいって事なんですけど、
定石的な方法ってあるでしょうか?

129 名前:デフォルトの名無しさん :03/10/16 22:57
なんつーか高さを加算すりゃいいと思うんだけど

130 名前:デフォルトの名無しさん :03/10/16 23:00
そもそもTextOutだって改行面倒みてくれないんだから、
一旦自力で改行ばらして処理するしかなかろて。

状況によってはDrawText一発だったりもするが。

131 名前:127 :03/10/16 23:51
レスサンクスです。
やっぱ自力でやるしかないですね。
難しい事じゃないんですけど、
どうも文字列操作を自分でやるのに変な抵抗感があったりして。

132 名前:デフォルトの名無しさん :03/10/17 01:03
>>131

130 が言ってるように DrawText 一発じゃだめなの?
DT_CALCRECT 指定してさ。

133 名前:デフォルトの名無しさん :03/10/17 01:03
プロシージャー間のデータ渡しはどうやったらいいでしょうか?
自作コールバックメッセージとか作って渡したほうが良いのか、グローバル関数にしちゃっていいのか
どっちにするべきでしょうか?

134 名前:デフォルトの名無しさん :03/10/17 02:05
>>133
何言ってるのかよく分からないので勘で答えると、普通は構造体。

135 名前:127=131 :03/10/17 02:26
DT_CALCRECTは縦横のどちらか一方しか
修正してくれないと思ってたんですが...
今試してみたらバッチリOKでした。
これでコードがクリーンに!ありがとー

136 名前:デフォルトの名無しさん :03/10/17 15:28
「MENUITEMINFO構造体でMIIM_BITMAPマスクを立てて
ビットマップハンドラの代わりにHBMMENU_SYSTEMを指定すると
dwItemDataで指定したウィンドウのアイコンが表示される」
とヘルプに書いてあるんですが……

それって「HBMMENU_SYSTEMを指定する場合は、dwItemDataに
ユーザ定義の値を自由に書き込むことはできない」ってことですか?

自分で試したら、そのメニュー項目が表示された時点で、前もってMIIM_DATAで
書き込んだdwItemDataの値が上書きされるみたいなんですが、何か回避法は
ないのでしょうか。

137 名前:デフォルトの名無しさん :03/10/17 20:49
>>134
その構造体はグローバル関数にするんですか?それともSendMessage()でアドレスを渡したりするんですか?

138 名前:デフォルトの名無しさん :03/10/17 20:55
>>137
そもそもプロシージャー間のデータ渡しって何よ。
構造体を関数にするとはなかなかハイセンスなプログラム作ってるみたいだが。

139 名前:デフォルトの名無しさん :03/10/17 20:55
>>137
あなたの言う「グローバル関数」について、誰にでもわかるよう
200字以内で説明せよ (3点)

140 名前:デフォルトの名無しさん :03/10/17 21:08
>>133 >>137
そもそもその質問はWin32APIに関するものなのか?文章からはさっぱり見えないのだが。

141 名前:137 :03/10/17 21:50
ああ、違うグローバル変数だ

142 名前:デフォルトの名無しさん :03/10/17 22:46
>>140
プロシージャーというのは、ウィンドウプロシージャのこと
ではないかと思う。

143 名前:デフォルトの名無しさん :03/10/17 22:54
勘で要約すると、ウィンドウプロシージャAからウィンドウプロシージャBに構造体を渡したい。
でも自作コールバックメッセージとかグローバル関数とかよくわからないで用語を使ってるのでわけのわからないことに。

144 名前:デフォルトの名無しさん :03/10/17 23:16
>>136
なんか無理っぽいね。
でもなんでHBMMENU_SYSTEMを使うの?


145 名前:デフォルトの名無しさん :03/10/18 01:13
>>143
多分そうなんだろうね。
このスレ的にはWM_COPYDATAをお勧めしておくか。

146 名前:デフォルトの名無しさん :03/10/18 01:44
>>145
別プロセスでやり取りしたいようには見えないのだが。

147 名前:デフォルトの名無しさん :03/10/18 08:46
じゃあ、
SetWindowLongでウィンドウハンドルに構造体のポインタを関連付ける
それで、プロシージャにそのウィンドウハンドルを渡せば・・・あれ?w

148 名前:デフォルトの名無しさん :03/10/18 10:40
とりあえず、SetPropでいいんでない?

149 名前:デフォルトの名無しさん :03/10/18 17:58
Win32APIで画面解像度を変更する事はできるでしょうか?
画面解像度を取得するには
GetSystemMetrics(SM_CXSCREEN)
GetSystemMetrics(SM_CYSCREEN)
で出来るのですが、この値を変えたいのです。
いちいち画面のプロパティで設定変えるのがメンドクサイので
プログラムの中でやりたいと考えてます。

150 名前:デフォルトの名無しさん :03/10/18 18:32
GetSaveFileNameを使って「名前を付けて保存」のダイアログを開いたときに,
ファイル名を入力するところへ初期値として文字列を入力しておくことは
できますか?

151 名前:デフォルトの名無しさん :03/10/18 18:46
>>150
できますよ

152 名前:デフォルトの名無しさん :03/10/18 18:48
Pointer to an OPENFILENAME structure that contains information used to initialize the dialog box. When GetSaveFileName returns, this structure contains information about the user's file selection.
typedef struct tagOFN { // ofn
DWORD lStructSize;
HWND hwndOwner;
HINSTANCE hInstance;
LPCTSTR lpstrFilter;
LPTSTR lpstrCustomFilter;
DWORD nMaxCustFilter;
DWORD nFilterIndex;
LPTSTR lpstrFile;
DWORD nMaxFile;
LPTSTR lpstrFileTitle;
DWORD nMaxFileTitle;
LPCTSTR lpstrInitialDir;
LPCTSTR lpstrTitle;
DWORD Flags;
WORD nFileOffset;
WORD nFileExtension;
LPCTSTR lpstrDefExt;
DWORD lCustData;
LPOFNHOOKPROC lpfnHook;
LPCTSTR lpTemplateName;
} OPENFILENAME;



153 名前:150 :03/10/18 18:55
>>152
どれが当たりなんでしょうか・・・

154 名前:デフォルトの名無しさん :03/10/18 18:59
>>149
できますよ

155 名前:デフォルトの名無しさん :03/10/18 19:14
>>154
関数名を教えていただけませんか
後は自分で調べますので

156 名前:デフォルトの名無しさん :03/10/18 19:18
>>149
ChangeDisplaySettings

157 名前:デフォルトの名無しさん :03/10/18 19:27
Pointer to an OPENFILENAME structure

158 名前:デフォルトの名無しさん :03/10/18 19:41
>>156
ありがとうございました

159 名前:デフォルトの名無しさん :03/10/18 21:18
>>150
ファイル名を受け取る所に初期値として文字列を入れとくといいよ

160 名前:デフォルトの名無しさん :03/10/18 22:07
GDI+を使って16色のGIFファイルを書き出したいのですが。
EncoderParametersで設定できそうなのですが、良くわからないので
知ってる方いますか?
Jpegの品質設定はできたのですが・・・

VC++.NETを使っていて
ソースとしてはこんな感じで書き出してます。
CLSID encoderClsid;
EncoderParameters EncParam;
Image *in = new Image(infile);
GetEncoderClsid(L"image/gif", &encoderClsid);

in->Save(outfile, &encoderClsid, &EncParam);
delete in;

161 名前:デフォルトの名無しさん :03/10/18 22:08

SetTextCharacterExtraで文字間隔の設定が出来ますが、これと同じように
行間隔を設定するようなAPIは存在するのでしょうか?



162 名前:デフォルトの名無しさん :03/10/18 22:47
RichEditが強烈に重かったので、RTFをプログラム側で作成して、
EM_STREAMINでRTFを直接流し込む事によってだいぶ速くなりました。
しかし、これでも数千行程度になるとまだ重いです。
他にRichEditを軽くする技はどんなものがありますか?

163 名前:デフォルトの名無しさん :03/10/18 23:31
>>162
まずメモリに持っておいて
表示する時だけ表示させるとか。

164 名前:136 :03/10/19 11:21
>>144
レスどうもです。やっぱ無理ですか……。

ツールウィンドウみたいなのを何種類か表示するかも知れなかったので、
そのツールウィンドウのアイコンをメニューアイテムの横に
表示できるといいなあと思ったんです。

mii.fMask = MIIM_BITMAP | MIIM_DATA;
mii.hBitmap = HBMMENU_SYSTEM;
mii.hItemData = (LONG_PTR) hToolWnd; // ツールウィンドウへのハンドル

という感じで。
ちなみにhItemDataには、メニューアイテムを表す自作クラスの
インスタンスへのポインタを代入して逆引きできるようにする予定でした。
仕方ないので、HBMMENU_SYSTEMを使う場合のみ、ポインタではなく
hToolWndから逆引きするようにします……。

165 名前:デフォルトの名無しさん :03/10/19 13:29
>>163
既にそうしているんですが…
RichEditではWebブラウザのように、
別スレッドでストリームに流し込みながら、
ユーザーが流し込んでいる途中のRichEditを自由にスクロールさせながら観覧させる事は出来ないですか?

166 名前:デフォルトの名無しさん :03/10/20 07:00
>>165
全然なんのことかわからんが、表示に必要な分だけ扱うように処理してみたら?

167 名前:デフォルトの名無しさん :03/10/20 09:49
>>166
お返事ありがとうございます。
現在表示される分だけStreamInに流し込んで表示し、
スクロールバーは自分で制御して、
バーが押されたりカーソルキーやPageUp,Downキー
が押された時にスクロール後に表示される部分だけを、
ストリームに流し込み直せという事ですか?

それだとCtrl+Aとか押されてすべて選択された時とかマウスドラッグ等で
選択が1画面以上に渡った時に困りますよね。
もしかしてJaneで言うTHogeTextViewのように、
自分で1からコントロール書かないと無理なのでしょうか?

168 名前:デフォルトの名無しさん :03/10/20 14:03
MSDNで日本語版のWindowsAPIリファレンスってダウンロードできるのでしょうか?
MSDN歩いてみたり「MSDN Windows API ダウンロード」なんかで検索してみたのですが、だめでした

169 名前:デフォルトの名無しさん :03/10/20 14:09
メモリ上のmidiファイルを再生する方法はあるのでしょうか?
DirectXを使わない方法でお願いします。
waveだとsndPlaySoundだと思うのですが。

よろしくお願いします。

170 名前:デフォルトの名無しさん :03/10/20 14:10
>>167
色分けやフォントサイズだけが望みなら、作るか持ってくればRichEditよりはるかに軽い。面倒は面倒だがそれに見合う速度は出る。
表示部分だけストリームで〜〜とかやるほうがむしろ手間かもしれない。
OLEだかなんだかまで必要なら、自分で作ってもRichEditを超えるのは無理。

>>168
MSDN Library Subscription に入会。

171 名前:デフォルトの名無しさん :03/10/20 17:28
自分のアプリが、XPのビジュアルスタイルで動いているか、
クラシックで動いているか調べる方法はあるでしょうか。

172 名前:デフォルトの名無しさん :03/10/20 19:19
リストビューコントロールでエクセルのようにセルとセルの境界の線を表示するにはどうしたら良いですか?

173 名前:デフォルトの名無しさん :03/10/20 19:32
>>171
comctl32.dll のバージョンを調べてくれ。


174 名前:デフォルトの名無しさん :03/10/20 19:53
>>172
LVS_EX_GRIDLINES

175 名前:デフォルトの名無しさん :03/10/20 23:20
CreateFont()関数を使ってフォントや、論理高や角度などを決めて設定する問題なのですが、
HFONT型の変数を一つ宣言し、CreateFont()関数で生成したらSelectObject()関数で
設定すればそれ以降が生成したフォントになるのは分かるのですが、
問題には
 作成したフォントをDeleteObject()する前に、元のフォントに戻すこと
とあるのですが、どうやって元のフォントにもどせばいいのでしょうか?

176 名前:デフォルトの名無しさん :03/10/20 23:24
SelectObjectのヘルプをきちんと読みましょう。

177 名前:デフォルトの名無しさん :03/10/20 23:53
>>169
もちろん方法はあるけど面倒だよ。
諦めることをオススメするが、どうしてもというならmidiOutOpen、midiOutShortMsgあたりを調べてみ。

178 名前:175 :03/10/21 00:03
hFont = SelectObject(ps.hdc, hFont);
TextOut(ps.hdc, 0, 0, "(*゚∀゚)=3ムハー", strlen("(*゚∀゚)=3ムハー"));
SelectObject(ps.hdc, hFont);

こんな感じでよいんでしょうか?同じ変数でやるよりも
hFontOldとかにしたほうが分かり良さそうですが、↑のでも出来ますよね??

179 名前:デフォルトの名無しさん :03/10/21 00:09
>>178
strlen("(*゚∀゚)=3ムハー")はsizeof "(*゚∀゚)=3ムハー"-1でいいだろ。


180 名前:デフォルトの名無しさん :03/10/21 00:15
>>178
戻すときにまたhFontに代入しとかないと消すやつ間違えるぞ

181 名前:169 :03/10/21 00:15
>>177
レスありがとうございます。
調べてみます。

182 名前:デフォルトの名無しさん :03/10/21 00:57
>>178
同じ変数使ったら CreateFont()した hFont を DeleteObject() できないジャン?

183 名前:デフォルトの名無しさん :03/10/21 01:15
hFont = SelectObject(ps.hdc, hFont);
TextOut(ps.hdc, 0, 0, "(*゚∀゚)=3ムハー", strlen("(*゚∀゚)=3ムハー"));
hFont = SelectObject(ps.hdc, hFont);
DeleteObject(hFont);

で一応消せるジャン。やってる奴見たら窓から投げるけど。

184 名前:デフォルトの名無しさん :03/10/21 02:03
漏れなんか最近はこうだ。
hFont = SelectObject(ps.hdc, hFont);
TextOut(ps.hdc, 0, 0, "ゴラァ"));
DeleteObject(hFont = SelectObject(ps.hdc, hFont));

こんなところのエラーチェックなんてマンドクセー&エラー起きられても対応できねーもん。
365・7・24 てな感じのサーバ製品でもないしさ。

185 名前:182 :03/10/21 02:10
>>183
うむ。書いた後に気づいて、こんなこと↓考えてた

DeleteObject(
 SelectObject(ps.hdc,
  SelectObject(ps.hdc, CreateFont() ) | TextOut(ps.hdc, 0, 0, "(*゚∀゚)=3ムハー", strlen("(*゚∀゚)=3ムハー"))*0
 )
);
これでhFontもいらない。

186 名前:デフォルトの名無しさん :03/10/21 02:22
つまんねーこと質問スレで披露するなよ。まねするだろ。

187 名前:デフォルトの名無しさん :03/10/21 02:33
>>185
計算式の各項の評価順は(? : や && や || の場合以外は)不定だから好ましくない。


188 名前:デフォルトの名無しさん :03/10/21 04:48
ウィンドウプロシージャをC++クラスの中に入れようと思い、

class A{
 A(){m_pThis = this;}
 static A *m_pThis;

 BOOL OnCreate(HWND hWnd, WPARAM wParam, LPARAM lParam);

 static LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
 {
  switch(uMsg){
  case WM_CREATE:
   return m_pThis->OnCreate(hWnd, wParam, lParam);
  }
  return DefWindowProc(hWnd, uMsg, wParam, lParam);
 }
};

こんな感じでthisポインタを静的変数に入れて、そこからメッセージハンドラを
呼び出しているのですが、これって問題ありますか?

189 名前:デフォルトの名無しさん :03/10/21 04:54
APIフックをしたいんですけど
簡単なサンプルありませんか?

190 名前:デフォルトの名無しさん :03/10/21 05:00
恐ろしいですなぁ

191 名前:デフォルトの名無しさん :03/10/21 05:06
>>188
一個しかインスタンス作らないなら別に構わないと思うけど、WM_CREATE より前には
何のメッセージもハンドリングしなで良いんだったら、CreateWindow の最後の引数を
使って、こうした方が良くない?

class A{
 HWND m_hwnd;
LRESULT OnMessage(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {...};

 static LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
 {
  if (uMsg == WM_CREATE) {
   A* pA = reinterpret_cast<A*> (((CREATESTRUCT *)lParam)->lpCreateParams);
   pA->m_hwnd = hwnd;
   SetProp(hwnd, TEXT("hogehogebarbar"), (HANDLE) ((CREATESTRUCT *)lParam)->lpCreateParams);
  }
  HANDLE h = GetProp(hwnd. TEXT("hogehogebarbar"));
  if (h)
   return (reinterpret_cast<A*>(h))->OnMessage(hwnd, wParam, lParam);
  return DefWindowProc(hWnd, uMsg, wParam, lParam);
 }
};

192 名前:デフォルトの名無しさん :03/10/21 05:07
>>188
なんなら勝手に new A しても良いし。

class A{
A(HWND hwnd) : m_hwnd(hwnd) {};
 HWND m_hwnd;
LRESULT OnMessage(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {...};

 static LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
 {
  if (uMsg == WM_CREATE) {
   A* pA = new A(hwnd);
   SetProp(hwnd, TEXT("hogehogebarbar"), reinterpret_cast<HANDLE> (pA));
  }
  HANDLE h = GetProp(hwnd. TEXT("hogehogebarbar"));
  if (h)
   return (reinterpret_cast<A*>(h))->OnMessage(hwnd, wParam, lParam);
  return DefWindowProc(hWnd, uMsg, wParam, lParam);
 }
};

193 名前:デフォルトの名無しさん :03/10/21 10:15
俺も似たようなことやってるが、staticメンバだと別スレッドでCreateWindowを
呼び出したら明らかにヤバイと思う。もしスレッドを使う場合はTLSを使うといいよ。

192のやり方はかなりスマートでいいが、クラスインスタンスだけ先に作って
サイズなんかを指定してからCreateWindowを呼び出したい、というやり方を
とった場合に困るのと…

それからCreateWindowを呼び出したときかならずしもWM_CREATEメッセージが
真っ先に送られるんじゃなく、まずWM_GETMINMAXINFOとかが送られてる。
191,192手法だと、これらにきちんと対処できなくないかな。

194 名前:デフォルトの名無しさん :03/10/21 10:26
すいません
スレッド扱いたいのですが

_endthread関数と_beginthread関数が定義されていないとエラーメッセージが出ます

一応、下のものはインクルードしてあるのですが他何か
インクルードすべきものはあるのでしょうか?
#include <windows.h>
#include <stdio.h>
#include <process.h>

195 名前:デフォルトの名無しさん :03/10/21 11:44
>>194
どの処理系使ってるのか知らんが、例えばVC++の場合プロジェクトの設定で
使用するC/C++ランタイムライブラリがマルチスレッド版になっている必要がある。


196 名前:デフォルトの名無しさん :03/10/21 11:50
CreateProcessなどに渡して実行されるファイルのフルパスを取得するAPIの名前を教えて下さい。

例えば、
cmd
を渡すと
c:\winnt\cmd.exe
が返ってきて

cmd.exeを渡すと
c:\winnt\cmd.exe
が返ってきて

c:\winnt\cmd.exeを渡すと
c:\winnt\cmd.exe
がそのまま返ってきて

c:\winnt\cmdを渡してもやっぱり
c:\winnt\cmd.exe
が返ってくるようなAPIです。

197 名前:デフォルトの名無しさん :03/10/21 12:02
(^∀^)ゲラゲラ おもしろい

198 名前:デフォルトの名無しさん :03/10/21 12:16
>>196
ありません

CreateProcessのlpProcessInformationの中身使ってなんとかしる。

ちなみにNT系と9xだと取得の仕方が違う。
(9x系のやりかたで取るとNT系はファイル名しか帰ってこない)

199 名前:デフォルトの名無しさん :03/10/21 12:20
>>198
CreateProcessする前にパスが分からないと意味がないのです。
フォルダ部分をCreateProcessに渡したいので…

200 名前:デフォルトの名無しさん :03/10/21 12:26
>>199
パス通ってるディレクトリを全検索

201 名前:デフォルトの名無しさん :03/10/21 12:36
やっぱりいいです。ちょうどいいAPIを自分で見つけました。

202 名前:デフォルトの名無しさん :03/10/21 12:49
>>173
それだとわからないです。XPで画面のデザインを戻されている場合とかを知りたいので。

203 名前:デフォルトの名無しさん :03/10/21 13:12
自作のサービスプログラムをサービス登録後、
コンパネ>管理ツール>サービスの画面から、開始、停止って
やった後、サービス削除を行うと、状態が無効になってきちんと
削除されないんですが(再起動すれば削除されますが)
なんででしょうか?
VC6.0のサンプル(simple.exe(サービス)とclient.exe(サービスと通信用))
を元に作成してて、simple.exeでも削除されませんでした。

サービスの削除を行うとき、停止+削除(OpenSCManager、OpenService、
QueryServiceStatus、ControlService(停止)、DeleteService)と動作させる時は、
きちんとサービスが削除されますが、
削除のみ(OpenSCManager、OpenService、QueryServiceStatus、
DeleteService)の場合に削除されないです。
サービス停止時には、StartServiceCtrlDispatcher()から復帰してmain関数
から抜けてるし、使用したハンドルも全てクローズしてるんですが。

うう、わかりにくい・・・
サービスの停止・削除で注意点とか、サンプルソースとかあったら
教えてぷりーず。


204 名前:デフォルトの名無しさん :03/10/21 13:20
アクティブじゃないときにクリックされてもアクティブになるだけで
zオーダーそのままで最前列まであがってこないようなウィンドウを作る方法は
ありませんか?
WM_MOUSEACTIVATEの戻り値はアクティブにするかどうかしか設定できない
ようですし

205 名前:デフォルトの名無しさん :03/10/21 13:35
>>196
実際にシェルが同じことをしてるわけだから何かありそうだけどね。
でも、知らない。

206 名前:デフォルトの名無しさん :03/10/21 13:37
>>205
だからもう自分で見つけました。SearchPathです。

207 名前:デフォルトの名無しさん :03/10/21 13:43
なんでSearchPathなんだ・・・

208 名前:デフォルトの名無しさん :03/10/21 13:50
SearchPath(NULL, command, ".bat", _MAX_PATH, path, &file) ||
SearchPath(NULL, command, ".com", _MAX_PATH, path, &file) ||
SearchPath(NULL, command, ".exe", _MAX_PATH, path, &file) ||
SearchPath(NULL, command, ".cmd", _MAX_PATH, path, &file)

これで実際>>196の通りの結果が返ってきたからです。

209 名前:205 :03/10/21 13:52
>>206
ふんふん。意外とそのまんまな名前だったね。

210 名前:デフォルトの名無しさん :03/10/21 13:58
ふーん、それでいいならいいけど

211 名前:デフォルトの名無しさん :03/10/21 15:16
LineDDAと同じような挙動をする リージョンやパス対応版の
関数ってあるんですか

212 名前:161 :03/10/21 15:54
161です。
やはり行間設定するAPIは見つかりませんでしたが、DrawTextには外部レディングを
考慮して改行する機能はあるみたいです。
これを利用して、自分で外部レディングを設定する方法は無いでしょうか?

フォント作成時に設定出来ないものかと思いましたが・・・見つかりません。

213 名前:デフォルトの名無しさん :03/10/21 16:06
>202
すまん。
OpenThemeDataがエラーになるかどうかで判断でどうだ。


214 名前:デフォルトの名無しさん :03/10/21 16:32
おまいら!マイネットワークの設定を切り換えるAPIはありませんか?

215 名前:デフォルトの名無しさん :03/10/21 16:39
>>212
外部レディングって改行とは関係ないが。
つうか、改行なんか自分でやるものだ。

216 名前:161 :03/10/21 17:15
>>215
改行の話ではありません。行間です。

MSDNによると

DT_EXTERNALLEADING
行の高さに、外部レディングの高さ (テキストの行間として適切な高さ) を加算します。
通常、外部レディングはテキスト行の高さに加えられません。

とありますので、行間に関係あると思います。

自分で実装するとなると、DrawTextが持つ機能のほとんども自作せねば使い物になりません。
なにかいい方法はないでしょうか?

217 名前:デフォルトの名無しさん :03/10/21 18:08
確かに外部レディングは行の高さに大いに関係はあるのだが、
それはフォントによって固定な情報なので、外部からどうこう出来る
物ではない。

そもそも、日本語フォントだと外部レディングも内部レディングも0しか
設定されていないので、このフラグによる違いは出ない。

結論。
自作汁。

218 名前:デフォルトの名無しさん :03/10/21 18:22
すいませんが教えてください
VC++6.0使ってるんですが
メモリ開放のfree関数使うとエラーで止まるんですが
なんでなんでしょう
Cygwinだと動くんだけど・・

GlobalFreeとかも試したんですが
現象は同じです



219 名前:デフォルトの名無しさん :03/10/21 18:34
>>218
お前の書いたプログラムがバグってるから。

220 名前:デフォルトの名無しさん :03/10/21 18:38
VirtualAllocを試してみたら(w

221 名前:161 :03/10/21 18:57
>>217
外部レディングをなんとか後から設定出来れば簡単解決かと思ったんですが・・・(´・ω・`)
ありがとうございました。ノ☆

222 名前:デフォルトの名無しさん :03/10/21 19:04
ところで、DrawTextって、そんな大層なことをやっていたのか?

223 名前:デフォルトの名無しさん :03/10/21 20:16
アラインとか切り詰めとかかな。

224 名前:161 :03/10/21 20:31
http://www.microsoft.com/japan/developer/library/jpgdipf/_win32_drawtext.htm

かなり色々やってます。
全部使う訳ではないですが、自作にあたってこれを参考にしてたら気が遠くなってきます。

225 名前:デフォルトの名無しさん :03/10/21 20:34
>>208
.vbsとか.vbeとか.jsとか.jseとか.wsfとか.wshはいいんだ…。
a.batとa.comとa.exeとa.cmdとかあった場合はcmd.exeと
挙動が違っていいんだ…。


226 名前:sage :03/10/21 21:42
Windows2000AdvancedServerでAWEを使おうとしているのですが、
どうもうまくいきません。

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/memory/base/awe_example.asp

とりあえず、ここにあるサンプルのコードを試してみようと思ったのですが、
どうやらAdvancedServerとは関係ないような(勝手に思っているだけですが)部
分でAPIが失敗してしまいます。下記コードはそのまま丸写しですが、
AdjustTokenPrivileges の後で、GetLastError()が
ERROR_NOT_ALL_ASSIGNEDを返します。

AdjustTokenPrivilegesで、メモリーをロックしようというのは
正常に動作するのでしょうか?


227 名前:デフォルトの名無しさん :03/10/21 21:56
プリントプレビューを作成しようとしています。
対象となるデータは印刷ダイアログで「ファイルに出力」にチェックを入れて
得られるファイルなのですが、スプーラにWritePrinterで吐くのと同様に簡単に
処理できる物なのでしょうか?
自分的にはPSなりLIPSを解釈して描画し直す必要があると思っているのですが
解決策があれば教えて下さい。

# 通常のプレビュー(例えばtext)は、出力処理のCreateDCするところで
# プリンタでなくディスプレイを指定すれば良さそうなのですが…


228 名前:デフォルトの名無しさん :03/10/21 22:39
>>226
特権を持ってないんじゃないの?

229 名前:デフォルトの名無しさん :03/10/21 22:42
>>227
すでにプリンタの制御コードになってしまっているのであれば、
自力でコードを解釈してプリンタをエミュレートする必要がある。

230 名前:デフォルトの名無しさん :03/10/21 22:48
APIの実行コストについて質問です。
OpenProcessで他プロセスのメモリ書き換えを行っているのですが、
同じプロセスに対して複数関数で処理を行う場合、
関数単位でOpen/Closeを行うのとOpenしてから各関数を実行してCloseするのでは大きなコスト差が発生するのでしょうか?
問題がなければ関数単位でプロセスのOpen/Closeを行いたいのですが‥‥




231 名前:226 :03/10/21 23:02
>>228
Administrator権限でログインしていますが...

232 名前:デフォルトの名無しさん :03/10/21 23:05
リストビューで列の幅を変えさせないようにするにはどうしたらいいですか?

233 名前:デフォルトの名無しさん :03/10/21 23:23
ListViewをサブクラス化し、HDN_BEGINTRACK にTRUEを返すとか?

234 名前:デフォルトの名無しさん :03/10/21 23:40
>>233
ありがとうございます
その線で行ってみます

235 名前:デフォルトの名無しさん :03/10/21 23:42
現在起動しているプログラム(プロセス)リストを取得する
APIってありますか?

236 名前:235 :03/10/21 23:49
具体的にはMSNメッセンジャーの起動をチェックしたのですが・・・

237 名前:デフォルトの名無しさん :03/10/22 00:18
ToolHelp32

238 名前:235 :03/10/22 00:33
>>237
ありがとうございます。
謝謝!

239 名前:デフォルトの名無しさん :03/10/22 11:22
質問の仕方が悪かったようなので、再び。

ここでいうパスはファイルのパスではなく、グラフィックの方です。

パス上にあるすべての座標を知りたいです。
パスを構成している頂点座標だけではなくて、です。

例えばフォントを用いてパスを作成し、Aという文字の形をしたパスの
すべての座標を知りたいのですが、それはムリなのでしょうか。

240 名前:デフォルトの名無しさん :03/10/22 12:25
CreateThreadの戻り値って使わなければCreateThreadの直後にCloseHandleしていいよね?

241 名前:デフォルトの名無しさん :03/10/22 13:01
>>240
いいけどスレッドIDが信用できなくなる可能性がある
(ハンドルを閉じなければIDが再利用されることはない)

242 名前:デフォルトの名無しさん :03/10/22 13:11
>>241
IDも使わないからいいんだけど、MSDNでCloseHandleのところに
「スレッドオブジェクトを削除するには、最初にスレッドを終了し、
次にそのスレッドのすべてのハンドルを閉じなければなりません。」
ってあって、「最初にスレッドを終了」と書いてあるので気になった。

243 名前:デフォルトの名無しさん :03/10/22 15:52
>>239
一番簡単なのはモノクロビットマップにを描画して、ピクセルの色を調べることだな。

244 名前:デフォルトの名無しさん :03/10/22 16:20
質問です。
クリップボードから取得したテキストをファイルに出力したく、
GetClipboardDataで取得、fprintfで出力した所、メモ帳で見る限り正常なのですが、
秀丸やあふの内蔵ビュアなどで見ると改行が全て二重に出力されているようなのです。

hoge
hoge



hoge

hoge

になります。
さらに出力したファイルにメモ帳で変更を加えて保存すると
全ての改行が無くなってしまいます。

hogehoge

と言うふうに。
ちなみにfputsでも同様でした。
GetClipboardDataで取得した改行は何か特別な処理をしないといけないのでしょうか?

245 名前:デフォルトの名無しさん :03/10/22 17:03
>>244
よくわからんけど、キャリッジリターンとラインフィードの処理はちゃんとしてる?
つか、秀丸とかの設定は?

246 名前:デフォルトの名無しさん :03/10/22 17:43
GetLastErrorについて質問です。
API内でエラーが発生した場合にセットされるのは分かるのですが、

・エラーが発生してもセットされないケースがあるのか
・エラーが発生しない場合、変更されないか値がNO_ERRORである保証があるのか

この二点お願いします。
もちろん実装によるのは分かるので、
kernel32,user32,gdi32のAPIについてのみでいいです。



247 名前:244 :03/10/22 17:47
>>245
ヒントありがとうございます!
無事に解決しました!

248 名前:デフォルトの名無しさん :03/10/22 19:28
>>246 普通に考えてMSDNに書いてる範囲が保証されると思うけど。 全てのAPIがセットするわけじゃないよ。念のため。

249 名前:デフォルトの名無しさん :03/10/22 19:48
すみません おしえてください。

CreateWindow 関数で ボタンコントロールを作成した場合.
WS_TABSTOPをいくら指定してもダイアログで無い場合処理されない
でした?
昔 うまくやった気がしますが。
アドバイスあったらお願いします。

250 名前:デフォルトの名無しさん :03/10/22 19:52
>>249
メッセージループでダイアログのメッセージ処理した?


■過去ログ置き場に戻る■ 1- 次250 最新50
DAT2HTML 0.33f Converted.