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


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

Win32API質問箱 Build18
1 名前: ◆Manna2uCLg :04/04/12 02:03
スレ立てるまでもない、Win32APIについての質問はこちらへどうぞ。
やさしいオジサマ達が、熱く暑く答えてくれよう。
でも最低限、最新スレくらいは質問する前に検索を。
過去スレ・参考は>>2-5くらいを参照するッス!

2 名前: ◆Manna2uCLg :04/04/12 02:03
- 過去スレ
Build17:http://pc5.2ch.net/test/read.cgi/tech/1077470361/
Build16:http://pc2.2ch.net/test/read.cgi/tech/1073830065/
Build15:http://pc2.2ch.net/test/read.cgi/tech/1069339866/
Build14:http://pc5.2ch.net/tech/kako/1065/10653/1065328397.html
Build13:http://pc5.2ch.net/tech/kako/1059/10595/1059549320.html
Build12:http://pc5.2ch.net/tech/kako/1056/10560/1056033645.html
Build11:http://pc5.2ch.net/tech/kako/1052/10526/1052651750.html
Build10:http://pc5.2ch.net/tech/kako/1047/10478/1047819779.html
Build9:http://pc5.2ch.net/tech/kako/1044/10449/1044929160.html
Build8:http://pc5.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/
- Google
http://www.google.com

3 名前:デフォルトの名無しさん :04/04/12 02:24
3

4 名前:デフォルトの名無しさん :04/04/12 10:20
 4

5 名前:デフォルトの名無しさん :04/04/12 10:47
WriteFileの後にLastErrorをやってみると、6が返ってきました。
このエラーコードって簡単に調べる方法ないですか?



6 名前:デフォルトの名無しさん :04/04/12 10:48
MSDN


7 名前:デフォルトの名無しさん :04/04/12 10:54
>>5
Visual C++ エラールックアップ

8 名前:5 :04/04/12 10:57
はやっ!
ヘッダーファイルとかに定義されては無いんでつか?

9 名前:デフォルトの名無しさん :04/04/12 11:05
FormatMessage 関数を使って、GetLastError 関数が返したシステムエラーコードに対応するエラーメッセージ文字列を取得できます。次にサンプルコードを示します。
LPVOID lpMsgBuf;
FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
GetLastError(),
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // 既定の言語
(LPTSTR) &lpMsgBuf,
0,
NULL
);
// lpMsgBuf 内のすべての挿入シーケンスを処理する。
// ...
// 文字列を表示する。
MessageBox(NULL, (LPCTSTR)lpMsgBuf, "Error", MB_OK | MB_ICONINFORMATION);
// バッファを解放する。
LocalFree(lpMsgBuf);


10 名前:デフォルトの名無しさん :04/04/12 11:08
>>8 WINERROR.H

11 名前:5 :04/04/12 11:20
みなさん、さんきゅ

”#define ERROR_INVALID_HANDLE 6L” でいいや

でもCreateFileは、うまくいってみたいだしぃー
ハンドルも返ってきてるし渡してるしぃ・・・ブツブツ・・・

12 名前:デフォルトの名無しさん :04/04/12 11:26
バッファオーバーフローでハンドル格納したメモリが破壊されてるに1票

13 名前:デフォルトの名無しさん :04/04/12 11:53
じゃあ、WriteFileが成功してるのに、
エラーコードを取得しているに1票

14 名前:デフォルトの名無しさん :04/04/12 13:26
夢オチに1票

15 名前:デフォルトの名無しさん :04/04/12 13:32
夢の中でプログラム組んでた翌日は、とてつもなく疲労している自分がいる。

16 名前:デフォルトの名無しさん :04/04/12 14:37
Win32APIでマウスの移動量を取得する方法ってありますか?
例えば、画面左端にマウスカーソルがある時に、さらに左に
動かしてもその移動量が取りたいのです。

DirectPlayならできるのはわかったんですが、それだけの為に
DirectX必須にするのも考え物なので…。

17 名前:デフォルトの名無しさん :04/04/12 15:10
VBからのWin32APIでもいいですか?

Dim hFile As Long
Dim udtProcInfo As PROCESS_INFORMATION

hFile = CreateFile( _
"OUTPUT.txt", _
GENERIC_WRITE + GENERIC_READ, _
FILE_SHARE_READ, 0,CREATE_ALWAYS, _
FILE_ATTRIBUTE_NORMAL + FILE_FLAG_OVERLAPPED, 0)
ZeroMemory si LenB(si)
si.cb = LenB(si)
si.hStdOutput = hFile
si.hStdError = hFile
si.dwFlags = STARTF_USESTDHANDLES
rc = CreateProcess( _
0, "printf.exe", 0, 0, 1, 0, 0, 0, _
udtStartInfo,udtProcInfo)

OUTPUT.txtは出来ました。 
CreateProcessも一応通ります。
printf.exeは main(){printf("\nhelle world");}です。
でもOUTPUT.txtは、空のままです。

CreateProcessの5番目のパラメータを0にして
notepad.exeならうまく行きます。

なんでじゃい!?


18 名前:デフォルトの名無しさん :04/04/12 18:09
>>17
フラグセットを+演算子で記述するのは始めて見た。
最上位ビットがおかしくなるかもしれない。
ま、最上位ビットまで使うフラグはあまりないけど。

19 名前:デフォルトの名無しさん :04/04/12 18:27
発見された方 マルチをお許しください。
MFCのDLLを作成しているのですが
OnIdleイベントが発生しないんです。このメンバ関数って
もしかしてEXE(アプリケーション)のみ有効なメッセージ制御なのでしょうか?
DLLの場合 これに変わる処理ってどれにあたるかご存知ありませんか?
要はInitInstanceで構築したビューにメッセージキューがない場合
(ユーザーが何も命令を送らない間)
常に発生させたいです


20 名前:デフォルトの名無しさん :04/04/12 19:02
> フラグセットを+演算子で記述
前にも見たことあるんだけど、例えば WS_CAPTION + WS_BORDER だけでもバグるよな。

21 名前:デフォルトの名無しさん :04/04/12 20:05
>>19
OnIdle()は、メッセージキューがなくなる度に一回だけ呼ばれるって意味。
WM_TIMERなどの定期的なメッセージ処理があれば、
OnIdle()もそれに従って呼び出される。
また、逆にWM_TIMERでのOnIdle()呼び出しを避ける手法もMSDNに掲載されてる。

22 名前:デフォルトの名無しさん :04/04/12 20:11
VBだと「Or」では視覚的に区切りとして分かりにくいから
あえて「+」を使うことがあるみたい

23 名前:デフォルトの名無しさん :04/04/12 21:51
ビットフラグに"+"を使うやつは…


24 名前:デフォルトの名無しさん :04/04/12 22:05
間違えて同じ値を二度書いたときに...

25 名前:デフォルトの名無しさん :04/04/12 22:09
視覚的に間違えたと分かるケースならいいけど、

26 名前:デフォルトの名無しさん :04/04/13 01:13
まあ、しょうがないよ
メイドロボだし


27 名前:デフォルトの名無しさん :04/04/13 06:55
Win32APIではなくってリソーススクリプトの質問なのですが
MENUITEM "abc", 101, CHECKED
と書くと「v」みたいな印が abc の隣に表示されます

IEのメニューでも表示→ツールバー以下のメニューで
いくつかの項目のON/OFFを選択できますが、
この部分の仕組みに似ていると思いました

で肝心の質問なのですが、この CHECKED を付けても
ただ単に印がつくだけのようですが、ラジオボタンのように
いくつかの項目がグループになっていてどれかを選択すると
自動的に印が移動してただひとつだけが選択されている、とか
チェックボックスのように、選択するたびにON/OFFが切り替わる、とか
そういった自動機能をリソーススクリプトで書くにはどうしたら
いいのでしょうか?
もしかしたら、ないのでしょうか?
自分で GetMenuState() とか CheckMenuItem() とかを
プログラム内で使うのでしょうか?

28 名前:デフォルトの名無しさん :04/04/13 07:56
>>26

29 名前:デフォルトの名無しさん :04/04/13 09:40
BitBlt()について質問です。
MSDN libraryのラスタオペレーションPATINVERTとかの説明に
「指定したパターン」
とあるのですが、そのパターンはどうやって指定するんでしょうか?

30 名前:デフォルトの名無しさん :04/04/13 10:53
>>29
指定したHDCに関連づいてるブラシを利用するはず。
どんな風にパターン作るかは、MSDNのCreateBrushIndirect()あたりでも見てくれ

31 名前:デフォルトの名無しさん :04/04/13 11:05
>>27
そんな自動でやってくれる機能なんて多分無い。
APIにもそういった関数はないし。
だから、全部自前でやることになると思う。

32 名前:デフォルトの名無しさん :04/04/13 11:07
クラスライブラリとかでそういうのを自動化しているものはあるかもな。

33 名前:デフォルトの名無しさん :04/04/13 12:31
>>27
GUI周りで楽をしたきゃ、素直にMFCに移行した方がええで。

34 名前:デフォルトの名無しさん :04/04/13 15:50
いまさら死滅寸前でGUI周りが全然楽じゃない
MFCに移行してもしょうがないだろ。

35 名前:デフォルトの名無しさん :04/04/13 16:12
>>27
(`・ω・´)っ[ TMenuItem::RadioItem ]

36 名前:デフォルトの名無しさん :04/04/13 16:53
>>21

レスありがとうございます。
ということはDLLであってもフレームウインドウ等のMN_TIMER
をメッセージとして追加する事で
OnIdleを有効にすることが可能となるのでしょうか?

希望となるヒントをいただき感謝しております。

37 名前:29 :04/04/13 18:18
>>30
レスありがとうございます。

>指定したHDCに関連づいてるブラシを利用するはず。
そのHDCはどうやって指定するのでしょうか?
下記のようにやってみましたが真っ黒になりました。

PAINTSTRUCT ps;
HDC hdc = BeginPaint(hwnd, &ps);

HDC hdc2 = CreateCompatibleDC(hdc);
HBRUSH hbr = CreateSolidBrush(RGB(255, 255, 0));
SelectObject(hdc2, hbr); // 黄色ベタ塗り

// 青と黄色の模様が描かれたビットマップ(80 x 40)
HBITMAP hbmp = LoadBitmap(hInst, "MYBMP");
SelectObject(hdc, hbmp);

// 青はそのままで黄色→黒になる?
// 「黄色いビットマップ使ってSRCINVERT」と同じ?
BitBlt(hdc, 0, 0, 80, 40, hdc2, 0, 0, PATINVERT);

38 名前:デフォルトの名無しさん :04/04/13 19:54
>>37
いくつか間違いを犯しているわけだが…

まず、画面のHDCにHBITMAPのSelectObjectはできない。
戻り値を確認しましょう。

次に、パターンを指定するのは描画先に指定する。
つまりBLACKNESS等と同様に6〜8番目引数は使わない。

最後に、成功したとしても青はそのままじゃなくて白になる。

39 名前:デフォルトの名無しさん :04/04/13 20:07
キー入力を取得する時に、
初回から押しっぱなしの取得をするにはどの様にすればよいのでしょうか。

case WM_KEYDOWN:
int key_code = (int)wPlam

上記の方法ですと、最初のときだけ押しっぱなしにしている扱いにならず困っているのですが。
どうかご教授お願いします。

40 名前:デフォルトの名無しさん :04/04/13 20:08
訂正 int key_code = (int)wParam;

41 名前:デフォルトの名無しさん :04/04/13 20:21
>>39
GetAsyncKeyState

42 名前:デフォルトの名無しさん :04/04/13 21:47
>>39
こういうのも

static BOOL key_code[256];

case WM_KEYDOWN: key_code[wParam]=TRUE; break;
case WM_KEYUP: key_code[wParam]=FALSE; break

//使う時
if(key_code[VK_○○]) 処理;


メモリがもったいなきゃ32バイト確保して各ビットごとに割り当てるとか

43 名前:39 :04/04/13 22:02
>>41
>>42
レスありがとうございます。
GetAsyncKeyStateや、
WM_KEYUPを併せて使用する方法も検討したんですが、
ここまで簡素にできるとは思いませんでした。
両方とも試してみます。

44 名前:37 :04/04/13 22:27
>>38
ありがとうございます。

>まず、画面のHDCにHBITMAPのSelectObjectはできない。
>戻り値を確認しましょう。
はい。確かに戻り値は0でした。

>次に、パターンを指定するのは描画先に指定する。
>つまりBLACKNESS等と同様に6〜8番目引数は使わない。
要するに、PAT〜を指定したときには
・ビットマップなんて関係ない
・矩形をハッチ等指定したブラシで埋め尽くす
・ってことはPatBlt()と同じ
ということで間違いありませんか?


45 名前:デフォルトの名無しさん :04/04/13 23:44
http://black.sakura.ne.jp/~third/system/winapi/win.html
って、ペゾルト本のパクリ?

46 名前:デフォルトの名無しさん :04/04/14 00:05
>>44
> ってことはPatBlt()と同じ
ほぼ正解。

ほぼというのは、PATPAINTだけはコピー元が必要だから
それだけはPatBltじゃ無理。まぁ、見落としてるだけだと思うが。

47 名前:44 :04/04/14 00:26
>>46
レスありがとうございます。

>ほぼというのは、PATPAINTだけはコピー元が必要だから
>それだけはPatBltじゃ無理。
そうですね。

やっと理解できました。

48 名前:デフォルトの名無しさん :04/04/14 00:26
.net frameworkが次windowsで標準となるらしいですが、
win32apiはまだまだ使えるのでしょうか?

49 名前:デフォルトの名無しさん :04/04/14 02:06
>>48
使える。Windows 95 のときも 3.1 のアプリ動いたでしょ。

50 名前:デフォルトの名無しさん :04/04/14 07:55
>>42
キーダウン中にマウス操作でkillFocusしてキーを放すとフラグがクリアされません。

51 名前:デフォルトの名無しさん :04/04/14 09:20
>>50
MS謹製のIntelliPoint4.1でもそのバグがあったね(w


52 名前:デフォルトの名無しさん :04/04/14 09:56
BO2Kのようにタスクマネージャから見えないようにするのはどうすればいいんだろう?
そもそもどうやってステレスにしてんのか原理が分からんし
悪いソフトをつくろうとしてるわけじあqwせdrftgyふじこl

53 名前:デフォルトの名無しさん :04/04/14 11:39
> qwせdrftgyふじこl

CreateWindowEx

54 名前:デフォルトの名無しさん :04/04/14 14:12
BMP,JPEG,GIF,TIFF,PNGなどの色々な形式の画像ファイルを読込んで、
HDCで描画したいのですが、画像ファイルを読込むのに便利なAPIはないでしょうか?
LoadImageは、BMP形式しか読込めないので却下です。

55 名前:デフォルトの名無しさん :04/04/14 14:27
普通にファイル読んで解析してCreateBitmap汁

56 名前:デフォルトの名無しさん :04/04/14 14:33
>>54

OleLoadPicture

57 名前:デフォルトの名無しさん :04/04/14 14:51
>>54
Susie Plugin

58 名前:デフォルトの名無しさん :04/04/14 15:15
>>54
GDI+

WIN32APIと言えるかどうかは知らぬ
ttp://www.kumei.ne.jp/c_lang/sdk4/sdk_336.htm

59 名前:デフォルトの名無しさん :04/04/14 15:20
メッセージキューからある特定のメッセージだけを取り除きたいのですが
どうやればよいの?

その「取り除きたい」と思うタイミングにおいて、そのメッセージはそれ以上来ないという状況です。
つまり取り除き処理直後に飛んできた、ということはないです。



60 名前:デフォルトの名無しさん :04/04/14 15:22
>>59
PeekMessage

61 名前:デフォルトの名無しさん :04/04/14 15:23
PeekMessageじゃダメなのか?

62 名前:デフォルトの名無しさん :04/04/14 18:01
>>60-61
ありがと♪

63 名前:50 :04/04/14 18:24
テンキーの"1"をDOWM ---> WM_KEYDOWN VK_NUMPAD1
NUMLOCKをDOWN
NUMLOCKをUP
テンキーの"1"をUP ---> WM_KEYUP VK_END

64 名前:デフォルトの名無しさん :04/04/14 19:12
#include <windows.h>
int main(void)
{
MSG msg;
GetMessageSuper(&msg);//☆
printf("%c\n",msg.wParam);
return 0;
}
//☆みたいにウィンドウズメッセージを戻り値かポインタ引数で
得ることが出来るAPIはないでしょうか。
何も無いときはそこ(OS)でとどまっています。

while(GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
これのコールバックを経由しなくてもいいバージョンです。

65 名前:デフォルトの名無しさん :04/04/14 20:26
WindowProcが邪魔なら、WNDCLASS(EX)のlpfnWndProcにDefWindowProcを登録してみたら?
で、Get/Translate/Disptachをセットにして呼べばどうにかなるんじゃない?

ただ、その後でメッセージを処理してもWindowProc内と同じことにはならないと思うぞ。

66 名前:64 :04/04/14 21:30
>>65
ありがとうございます。今調べていますが、難しいです。

後、>>64に追加で、いままでは以下のような感じで、
MSGの残骸を利用してやっていました。

void hoge(HWND hwnd)
{
 MSG msg;
 while(1)
 {
  GetMessageSuper(&msg);
  if(msg. ...) ;
 }
}

void GetMessageSuper(MSG*msg)
{
if(!GetMessage(*(&msg),NULL,0,0))exit((*msg).wParam);
TranslateMessage(*(&msg));
DispatchMessage(*(&msg));
}

67 名前:デフォルトの名無しさん :04/04/14 22:49
つーか、Dispatchを呼ばなきゃ良いだろ?
あれは
(WNDPROC)GetWindowLongPtr(msg.hwnd, GWLP_WNDPROC)(msg.hwnd, msg.message, msg.wParam, msg.lParam);
を呼んでるだけだから。

68 名前:64 :04/04/14 23:41
>>67
ありがとうございます。勉強になります。

69 名前:48 :04/04/15 00:18
>>49
レスありがとうございます。

今学ぶなら.netの方がいいのでしょうか?
少しですがwin32apiが使える状態です。
基本的にジャンルが違う気もしますが

70 名前:デフォルトの名無しさん :04/04/15 00:48
>>39
LPARAMの30bit目じゃダメなのか?

71 名前:デフォルトの名無しさん :04/04/15 00:56
>>69
んーその質問は答えるのが難しいねぇ。おいらの場合は業務で
使う or 使いたい言語を学習するし。

ただまぁあれだ、.NET Frameworkは国際化対応を結構真面目に
考慮してる辺りが、おいらの業務にドンピシャなので、次回のプロ
ジェクトでは.NET Frameworkで進めようと画策中。

それに必要であれば.NET Frameworkでの開発でもWin32APIを
叩けるしね。


72 名前:デフォルトの名無しさん :04/04/15 01:00
こんにちわ
初歩的な事で申し訳ないのですが
(だからこそ載ってなくてわからないんだけど)
兄弟ウィンドウ同士が重なり合った場合
その前後を決めるものは一体何なのでしょうか
作りたいのは
メインウィンドウ
┣子ウィンドウA
┗子ウィンドウB(スタティックスタイル)
 ┗ボタンやエディット

という状態のときに(本当はもっとごちゃごちゃしてるんですが)
この子ウィンドウAを常に最前面に出しておきたいのです が
SetWindowPosでHWND_TOPMOSTを指定しても
子ウィンドウBの下に表示されてしまうので
兄弟ウィンドウの間では
Zオーダーがどうとかアクティブがどうとか
そういう問題ではなくなるのか??と思ったんですが
HWND_TOPを指定すると
ちゃんとウィンドウAがとりあえずは最前面に表示されましたので
コレは一体どういうことなんだろうって感じになってます

超初心者の質問ですいません おねがいします

73 名前:デフォルトの名無しさん :04/04/15 01:38
ホームページを開いた時になるMIDIを捕らえて
音量を制御したいです。

具体的には
WAVEを聴きながらMIDIの音量(dB?)を監視していて
検知したらWAVEの音量を下げるという感じです。

だいたいは実現方法がわかったのですが、
MIDIの音量の監視が出来ません。
MIDI音源のOUTを取得しそのまま出力するにはどうすればいいのでしょうか?
具体的な関数名を教えていただければうれしいです。


74 名前:デフォルトの名無しさん :04/04/15 01:41
子ウィンドウをTOPMOSTにできるの?


75 名前:デフォルトの名無しさん :04/04/15 01:44
>>73
仮想midiドライバ書いて、実際のドライバにリダイレクトさせたら?

76 名前:73 :04/04/15 01:53
>>75
レスありがとうございます。

wave再生は割と簡単に出来たのでもう少しがんばれば
できるかと思いましたが、仮想midiドライバとなると
難しそうですね。

よく分からないのですが、
どのような感じになるのでしょうか?

77 名前:72 :04/04/15 03:05
>>74

ありゃー やっぱ僕
基本がわかってないみたいですね
となると兄弟ウィンドウの前後関係(?)を決める要因は
なんなんでしょうか
それとも兄弟関係に前後も何も存在しないという
考え方なのでしょうか
HWND_TOPは使えてHWND_TOPMOSTが使えない理由は
どういうことなんでしょうか

78 名前:デフォルトの名無しさん :04/04/15 04:05
char test1[128], *test2;

GetDlgItemText(hDlg, IDTXT, test1, (int)sizeof(test1));
GetDlgItemText(hDlg, IDTXT, test2, (int)sizeof(test2));
MessageBox(hDlg, test1, "test1", MB_OK);
MessageBox(hDlg, test2, "test2", MB_OK);

こうするとメッセージボックスにtest1は表示されるのですがtest2の方は何も表示されません。
何が異なるのでしょうか?
また、test2の宣言で表示させる方法はあるのでしょうか?


79 名前:デフォルトの名無しさん :04/04/15 04:18
test2 = (char*)LocalAlloc(LMEM_FIXED, 128);
LocalFreeも忘れるなよ、約束だ!

80 名前:デフォルトの名無しさん :04/04/15 05:12
>>79 氏に加えて
GetDlgItemText(hDlg, IDTXT, test2, (int)sizeof(test2));

GetDlgItemText(hDlg, IDTXT, test2, 128 );
にするのも忘れずにな!

81 名前:デフォルトの名無しさん :04/04/15 08:49
>>78
API以前の問題で
char test1[128];

char* test2;
の違いを理解していないのではないかと思われる。

82 名前:デフォルトの名無しさん :04/04/15 12:20
C標準ライブラリ関数のstr〜系の関数と
Win32APIのlstr〜系の関数は使い分ける必要があるんですか?

83 名前:デフォルトの名無しさん :04/04/15 12:58
>>77
基本的には Zオーダー順になる。ただし、WS_CLIPSIBLINGS が付いている場合には、
Zオーダーとは関わり無く兄弟ウィンドウによってクリップされてしまうので、
普通に重ね合わせたような表示にはならない。
WS_TRANSPARENT とかの有無によっても再描画時の見かけは変わってくるし。

これでOK?

84 名前:デフォルトの名無しさん :04/04/15 12:59
>>82
lstr〜、wsprintf 等の Win32 側の関数は、引数が TCHAR を基本としているので、
ユニコードでビルド可能。


85 名前:デフォルトの名無しさん :04/04/15 13:10
>>55
それを言うなら CreateDIBSection() だろ。

86 名前:デフォルトの名無しさん :04/04/15 13:12
>>82
しかしwsprintfは標準ライブラリのsprintfに比べて貧弱だったりするので注意。(BCB6の場合。VC++は知らん)

87 名前:デフォルトの名無しさん :04/04/15 13:18
ランタイムを使った方が高速なんじゃなかったっけ。

88 名前:デフォルトの名無しさん :04/04/15 13:20
msvcrtって結構アルゴリズム的には最適化されてるんじゃないか

89 名前:デフォルトの名無しさん :04/04/15 13:38
>>86はなんだ。BCBを入れるとWin32APIの実装が変わるのか。

90 名前:デフォルトの名無しさん :04/04/15 13:40
>>85
DIBは素人にはお勧めできない。
使い方間違えると、あっという間にメモリリークさせてOSぶっ飛ばす諸刃の剣。


91 名前:デフォルトの名無しさん :04/04/15 13:56
>>89
どこをどう読めばそういう結論が出るのか小一時間(ry

92 名前:デフォルトの名無しさん :04/04/15 14:04
>>89
じゃなくて、BCBのsprintfが、wsprintfより貧弱かもっつーことだろ。

93 名前:デフォルトの名無しさん :04/04/15 14:05
>>92
逆だろ

94 名前:デフォルトの名無しさん :04/04/15 14:08
自分の場合CreateThreadで作成したスレッド内でランタイム使うと
メモリーリークするってMSDNに書いてあるのでwsprintfとlstr系に統一した

ランタイム使いたい人は_bigenThreadExとかつかえばいいんだけどね

95 名前:82 :04/04/15 14:13
>>84
ありがとうございます。
ユニコードの環境ではプログラミングしたことがないので知りませんでした。
Windowsでの文字列絡みのプログラミングでは
できるだけWin32APIを利用した方が良いということですね。

96 名前:デフォルトの名無しさん :04/04/15 14:14
>>94
_bigenThreadExって(藁

どうせ、なかでCreateThread呼んでるんだし、
最初っから_beginthreadex呼んでいいと思うんだけどね

97 名前:92 :04/04/15 14:15
>>93
そうだった。スマソ

98 名前:デフォルトの名無しさん :04/04/15 14:17
>>95
そうでもないよ

99 名前:デフォルトの名無しさん :04/04/15 14:21
16ビット環境ではAPI版は「FARポインタを渡せる」というメリットがあった

100 名前:デフォルトの名無しさん :04/04/15 14:26
16bit環境でも、少なくともMSC/VCには_f〜っつー明示的FARポインタ用関数はあったが。

101 名前:デフォルトの名無しさん :04/04/15 14:32
>>96
bigen早染めw

102 名前:デフォルトの名無しさん :04/04/15 15:17
>>92-93
どっちでもいいけど、とにかくsprintfもwsprintfも仕様が決まってるだろ。
BCBはこれらに対して仕様外な何か特別なことしてるのか?

103 名前:デフォルトの名無しさん :04/04/15 15:50
教えてください。
win32のlstrcpyと標準Cライブラリのstrcpyですが
これはどう使い分けるのでしょうか?


104 名前:デフォルトの名無しさん :04/04/15 16:19
wsprintf は、書式に浮動小数点が使えません。

そういうことなんじゃねーの?
>貧弱

105 名前:デフォルトの名無しさん :04/04/15 16:24
だからそれはBCBもVCも同じに決まってんだろゴルァって話じゃねーの?

106 名前:デフォルトの名無しさん :04/04/15 16:43
要するにVCやBCのそれはANSIとかのそれより機能が豊富だったりするが、
wsprintfはそこまでも機能が無いということだろ。

107 名前:デフォルトの名無しさん :04/04/15 16:47
こんな下らない事で論争が出来るおまいらは素敵過ぎる

108 名前:デフォルトの名無しさん :04/04/15 18:30
論争になどなり得ない問題のはずなのだが。

109 名前:デフォルトの名無しさん :04/04/15 18:55
APIスレの話題じゃないな

110 名前:デフォルトの名無しさん :04/04/15 19:17
一応APIなんだがな。

111 名前:デフォルトの名無しさん :04/04/15 19:19
話してるのは>>86のことだろう。
>>86だと、BCB6のwsprintfとVC++のwsprintf、
またはBCB6のsprintfとVC++のsprintfがあたかも別物のような書き方だから。
wsprintfもsprintfもそれぞれWin32APIとCで仕様が決まってるんだから、
「BCB6の場合。VC++は知らん」なんて、二つのコンパイラを区別する必要ないじゃん?と。

112 名前:デフォルトの名無しさん :04/04/15 19:21
>>111
86 は VC++ のことは知らんから、「VC++ は知らん」って言ってるだけでは?
漏れは逆に VC++ 使いだから、BCB6 の sprintf が ANSI 準拠かどうか知らんし。

113 名前:デフォルトの名無しさん :04/04/15 19:25
さて、収まったかと思ったら、またバカの出現で数歩後退しました。

114 名前:デフォルトの名無しさん :04/04/15 19:26
>>112
持って無くてもそれくらいはわかるだろう・・・
何十年も前に発売されたものじゃないんだから・・・

115 名前:デフォルトの名無しさん :04/04/15 19:32
それより>>106の意味がいまいちよくわからないんだけど。
「それ」って具体的に何?sprintfのこと?VCやBCのsprintfはANSIのより機能が豊富なの?

116 名前:デフォルトの名無しさん :04/04/15 19:34
すべてはい(A)

117 名前:デフォルトの名無しさん :04/04/15 19:45
スルーされてるけど>>45ってどのへんがパクリなん?
初めの方をペゾルド本と見比べてみたけど
特にパクった文章は見当たらないんだが。

118 名前:デフォルトの名無しさん :04/04/15 19:50
>>83
WS_CLIPSIBLINGSって難しいね
挙動が理解できない

119 名前:デフォルトの名無しさん :04/04/15 19:50
訪問者を増やすための作者の自作自演では

120 名前:デフォルトの名無しさん :04/04/15 19:54
>>117
パクりかは知らないが、俺はあれでw32apiプログラミングを学んだ。猫より記述が正確、構造がマシ(猫の破綻しきった
論理構造よりはマシという意味)で変数の命名規則もそれほど腐ってなかったから。

121 名前:デフォルトの名無しさん :04/04/15 20:05
関係無いがこんなクソスレあったんだな。

【漏れは】猫でもわかる質問スレ【猫以下です】
http://pc5.2ch.net/test/read.cgi/tech/1054813207/

でもレバーの指摘はちょっと笑った。

122 名前:デフォルトの名無しさん :04/04/15 20:36
>>117
なんつーか、出てくる項目とその並びがほとんどペゾルト本なんだよな。
いきなりUnicode対応のための項があったり、最後にちょこっとWinSockの項があったり。
とか言いながら、俺も結構勉強させてもらったが。

123 名前:デフォルトの名無しさん :04/04/15 20:59
質問なんですが、Win98vb6sp5の環境だとちゃんと機能するのですが。
WinXPvb6sp5の環境だとZip32.dllのところでオーバーフローしてしまいます。
これって直せるんでしょうか?ちなみにこんな感じです。
Dim FN As String
Dim SendStr As String
Dim Ret As String * 255
SendStr = "-r9 " & """" & FN & ".zip" & """" & " " & """" & pasu & "\" & """" & " " & """" & FN & ".bmp" & """"
Zip Me.hWnd, SendStr, Ret, 255
Retの数上げても意味ありませんでした。

VBのスレでも聞いてるんですが荒れてて答えかえって来そうに無いので
お願いします

124 名前:123 :04/04/15 21:01
同じプログラムのなかでLzhに圧縮するのも書いてるんですが
そちらは98もXPも問題なく動いてます。

125 名前:デフォルトの名無しさん :04/04/15 21:02
>>122
あぁ、それは確かに。ビットマップの項目が長いところとかね。

126 名前:デフォルトの名無しさん :04/04/15 21:03
> SendStr = "-r9 " & """" & FN & ".zip" & """" & " " & """" & pasu & "\" & """" & " " & """" & FN & ".bmp" & """"
鳥肌が立つほど気持ち悪かった

127 名前:123 :04/04/15 21:13
そう書かないとスペースありのフォルダ名とかくると
誤作動するんですよ、もっといい書き方ありそうですけど、、
初心者で申し訳ないです

128 名前:デフォルトの名無しさん :04/04/15 21:31
>>126の部分がAAに見えたよ。コードにはどうしても見えない

129 名前:デフォルトの名無しさん :04/04/15 21:35
>>123
zip32.dllはよくしらんが、-r9の後にスペースっていらんの?

130 名前:デフォルトの名無しさん :04/04/15 21:36
Win32APIじゃねーだろ。

131 名前:デフォルトの名無しさん :04/04/15 21:42
>>127
すれ違いだが...

Private Function DQ(Str As String) As String
 DQ = """" & Str & """"
End Function

SendStr = "-r9 " & DQ(FN & ".zip") & " " DQ(pasu & "\") & " " & DQ(FN & ".bmp")

とかするのは、どうだろうか ?

132 名前:デフォルトの名無しさん :04/04/15 21:43
>>121
その指摘したの漏れだ・・・。思うに猫の中の人はBASICで論理構造がガチガチに固まってるんじゃないかと。

133 名前:デフォルトの名無しさん :04/04/15 21:51
俺は「pasu」が気持ち悪いぞ。

134 名前:123 :04/04/15 21:58
>>129
-9rの後にスペースありますし98だと正常に動きます。

>>131
なるほど〜

すれ違いな事にも気づきませんでした、すみません

>>133
passとかaddとかつけたいけどなんかだめな気がするんで、、

すれ違いなようなので去ります。
ご迷惑おかけしました

135 名前:デフォルトの名無しさん :04/04/15 21:58
べーしっ君ですな

136 名前:デフォルトの名無しさん :04/04/15 23:02
>>134
> passとか

... pasu の方がましかも...。

137 名前:デフォルトの名無しさん :04/04/15 23:06
パス付きlzhってのがあるのかとおもたよ
pathのことかorz

138 名前:デフォルトの名無しさん :04/04/15 23:06
ってzipの話か。

139 名前:72 :04/04/15 23:26
>>83
遅レスごめんなさい
クリップっていうのはどういうことなんですか?
前々からWS_CLIPSIBLINGSの説明とかでもでてきたのですが
検索して調べても本文と照らし合わせて納得のいく
説明がしてあるのは見つかりませんでした・・
そしてこの

メインウィンドウ
┣子ウィンドウA
┗子ウィンドウB(スタティックスタイル)
 ┗ボタンやエディット

子ウィンドウ二つにはWS_CLIPSIBLINGSが設定してあります。
コレはただ 設定してないで同じ位置に配置した場合
一方の子ウィンドウ他方の子ウィンドウに描画を行ってしまうから
と 勝手に推測して設定したものでありますが
よくはわかってないで使ってます
ウィンドウ Zオーダー 色々な概念を
正確にイメージできていないような気がします・・



140 名前:デフォルトの名無しさん :04/04/16 00:27
>>123
> Dim Ret As String * 255
> Zip Me.hWnd, SendStr, Ret, 255

Retも怪しいんですが。
本当はByte型のテーブルにして、実行後にSJIS→UNICODE(String)コンバートするんじゃないかと。

141 名前:デフォルトの名無しさん :04/04/16 00:37
SetTimer で設定して呼ばれたタイマプロシージャ内で
そのタイマをKillTimerしても問題ありませんか?

142 名前:デフォルトの名無しさん :04/04/16 00:59
>>141
問題ありません。
つか、よくやることでしょう。

143 名前:78 :04/04/16 04:11
>>79-81
ありがとうございます。
81さんのまったく仰るとおりなんでググって出直してきます。。。
動的に長さが変化する文字列の取得がしたかったんですが
string使うのかな・・・
てか↓逝きですなorz
http://pc5.2ch.net/test/read.cgi/tech/1054813207/l50


144 名前:デフォルトの名無しさん :04/04/16 08:27
>>140
その辺の変換はVBがやってくれるよ。

145 名前:デフォルトの名無しさん :04/04/16 08:53
>>143
文字列の長さを取得するwin32apiはlstrlen

勉強してらノシ

146 名前:デフォルトの名無しさん :04/04/16 09:06
>>145
この場合はGetWindowTextLength(GetDlgItem(hDlg, IDTXT))だと思うが。

147 名前:145 :04/04/16 10:26
元のカキコを読まずに脊髄でレスしちまった・・・orz

フォローサンクス>>146

148 名前:デフォルトの名無しさん :04/04/16 10:27
windowsのUNICODEってUTF-8だよね?

149 名前:デフォルトの名無しさん :04/04/16 10:32
>>148
UCS-2/UTF-16

150 名前:デフォルトの名無しさん :04/04/16 10:38
>>149
サンクスコ
ついでにWideCharToMultiByte関数は現在のロケールのコードページに基づくMBCSに変換すんのかな?
コードページってキャラクタセットと同じ?

151 名前:デフォルトの名無しさん :04/04/16 10:50
>>150
ぐぐれ。つかMSDNの説明読んだ上でそんな質問してるのか?

152 名前:デフォルトの名無しさん :04/04/16 12:15
>>150
日本語( Shift_JIS ) は コードページ 932 だ。
WideCharToMultiByte( 932, (以下略) ); と指定するのだぞ。

153 名前:デフォルトの名無しさん :04/04/16 12:22
>>152だとOSがどこの国で動いていてもシフトJISになるわけだが
それではまずい場合は
WideCharToMultiByte( CP_ACP, (以下略) );
まあMSDNを見れば一目瞭然なわけだが

154 名前:デフォルトの名無しさん :04/04/16 12:51
>>139
まず、全ての標準コントロール (static を含む。NT系列では Comboを除く) は、CS_PARENTDC クラススタイルを
持っているので、描画は親ウィンドウのデバイスコンテキストにを用いて行われます。つまり描画について考える際には、
クリッピング領域とWM_PAINTの発行順だけを考慮すればOKです。デバイスコンテキストは共通だから。

次に、WS_CLIPSIBLINGS は単に全ての兄弟ウィンドウ(の矩形)への描画が行われないように描画範囲をクリップ
するって感じの属性で、Z-Orderは考慮されません。片方を他方の前に持ってきたからといって、前のほうが見える
ようになるわけではありません。

・・・具体的に何がしたいのかを書いてもらった方がもうちょっと実のある返事を書けるような気がする。

155 名前:139 :04/04/16 15:51
>>154

レスありがとうございます。理解した・・と思いましたが
できませんでした。

わかっていないのか・・_| ̄|○

具体的に作りたいのは自分が何問、何ページ、どの問題集を解いたかを
その日付ごとに教科単位で分けた子ウィンドウBに
(実際には構造体型配列に)記録しておけるプログラムです。

国数理社英
4/11□□□□□
4/13□□□□□
4/14□□□□□  □=子ウィンドウB

こんな感じになります。
この子ウィンドウBにはさらにプッシュボタンを持つ
ボタン子ウィンドウやらエディットやらがつまっています。
そしてもうひとつ、常にメインウィンドウの右下の最前面に存在し
スクロールバーをスクロールしても
メインウィンドウ上での位置を変化させない子ウィンドウAを作り
ここに正解確率やら、こなしたページの数やらを計算して
表示させたいのですが・・
この常に最前面に表示させるという方法がわかりません。


156 名前:139 :04/04/16 15:52
(続き)
WS_CLIPSIBLINGSを外してAにSetWindowPosのHWND_TOPMOSTを使うと
子ウィンドウAとBが重なっているときに
Aが前面に表示されているんですが
下にあるBのエディットに入力できたりしちゃうので
TOPMOSTは常に最前面に出してくれるんじゃなかったのか と
思う一方 自分は最善面という概念もわかっていないような
感じがします。

A、Bの両方にWS_CLIPSIBLINGSを設定して
AにSetWindowPosのHWND_TOPを使ったら
Aは前面に表示されているし重なったとき下のBを操作することも
できなかったので自分の思うようになったのですが
なぜこうなったのかわからないので生きた心地がしません。

長レス&超ド級初心者で申し訳ありません
助けてください_| ̄|○


157 名前:デフォルトの名無しさん :04/04/16 17:40
>>155
http://www.topposystem.co.jp/DL/Win32API/GUI/%E3%83%9A%E3%82%A4%E3%83%B3%E3%83%88%E3%81%A8%E6%8F%8F%E7%94%BB%E3%81%AE%E6%A6%82%E8%A6%81.html


158 名前:139 :04/04/16 18:11
>>157
サンクス!!!
まだちょっとしかみてないけど
今の自分にぴったりかもしれません
見てみます

159 名前:デフォルトの名無しさん :04/04/16 18:38
win32APIにてアイコンの変更ダイアログを呼び出したいんですが
ググってもvbに関しての情報がなくつまってます・・・

誰か助けてくだされ

160 名前:159 :04/04/16 18:43
事故解決でけますた
失礼

161 名前:159 :04/04/16 18:44
>>160
お前誰だよ!まだ解決してねーよ!!

162 名前:159 :04/04/16 18:47
>>161は偽物です。

163 名前:デフォルトの名無しさん :04/04/16 18:49
つかそれはVBでWin32APIの使い方がわからないのか?ならVBスレで聞いてこい。

164 名前:159 :04/04/16 18:54
>>163
うるせー馬鹿

165 名前:159 :04/04/16 19:03
>>163
159&160は自分です。
使い方はもちろんのことわかっております。
検索しても情報が少なく、accessについてるやつ引っ張れそうなんで
"解決"判を押させてもらいました。

スレ汚しスマソ

166 名前:デフォルトの名無しさん :04/04/16 19:55
>>165
どうやって解決した?
気になるじゃないか。

167 名前:デフォルトの名無しさん :04/04/16 20:03
ならねーよ

168 名前:159 :04/04/16 20:13
なれよ。

169 名前:デフォルトの名無しさん :04/04/16 20:16
この時間帯は何とも香ばしいですな。
質問があったけどまた後で来まつ。ノシ

170 名前:159 :04/04/16 20:17
>>166
解決といこうとしたんですが・・・
ちっと戦ってます。

ACCESSのSHChangeIconDialogに関して情報が載ってるソースあったんで
Shell32.dllから隠しでもってきて使ってみました。

したらばmsgboxが出てきて、文字化けたような
"ファイルxxxxxxxxがみつかりません。"と表示され
%SystemRoot%\system32\SHELL32.dll内のアイコンのリストビューがでます。

ンデ戦ってます。


171 名前:デフォルトの名無しさん :04/04/16 20:49
Dim strBuff As String
strBuff = StrConv("c:\winnt\explorer.exe" & vbNullChar, vbUnicode)
Call SHChangeIconDialog(Me.hWnd, strBuff, 0, 0)

で行けたにょ(Win2K)。細かい部分は任せた。

172 名前:159 :04/04/16 21:16
>>171
vbUnicodeじゃなくてFORMのユニコ指定してた。
神サンクスですわー

173 名前:デフォルトの名無しさん :04/04/16 22:51
簡単なWin32プログラムを作ってみたのですが、メッセージループでSleep()を入れないとCPU使用率が上がってフリーズしたような状態になってしまいます。
音楽が流れていると音が細切れになることから、これはリソースを独占して他のスレッドにリソースがうまく行き渡っていないからなのだと思うのですが、ここまでの解釈は合ってますよね?

で、うちのPCは常時CPU使用率が100%付近にきていて、しょっちゅうフリーズしてしまうという状況なのです。
これが上述の自分で作ったプログラムの症状と酷似している事から、どうやらメッセージループでリソースを独占している常駐ソフトがある、と睨んだところまではいいのですが
一通りのスタートアップ&サービスを止めてみたのですがだめぽでした。

こういうリソースを独占して他のアプリに迷惑をかける常駐ソフト(スレッド?)を見つける手段というのはあるのでしょうか?
また、クロック数の高いCPUに取り替えれば力押しでフリーズしないようになるのかどうか聞きたいのですが。

参考までに、ここの方と似たような症状です。
http://www21.ann.co.jp/pas/bbs6/lg115620.html

174 名前:デフォルトの名無しさん :04/04/16 22:52
それプログラミングの質問か?

175 名前:デフォルトの名無しさん :04/04/16 22:58
>>173
それ本気で知りたきゃ、実際に配布して試してもらえば?

176 名前:173 :04/04/16 23:08
>>174
やっぱスレ違い、というか板違いですか?
誘導してもらえるとありがたいのですが。

>>175
誰もが一番最初に作るであろうウィンドウだけの何もしないプログラムです。

177 名前:デフォルトの名無しさん :04/04/16 23:12
>>176
おまえのPCだけがおかしいんじゃないのか
ウィンドウだけのプログラムでそんなことにはならない。

178 名前:173 :04/04/16 23:25
>>177
そうですね。どうもありがとうございました。

179 名前:デフォルトの名無しさん :04/04/16 23:25
>>173

> こういうリソースを独占して他のアプリに迷惑をかける常駐ソフト(スレッド?)を見つける手段というのはあるのでしょうか?
タスクマネージャ

Windows Xp 質問スレ 86ページ目
http://pc5.2ch.net/test/read.cgi/win/1081622045/

180 名前:デフォルトの名無しさん :04/04/17 01:22
>>176
メッセージループでGETMESSAGEだっけを使ってない。のかも??
PEEKMESSAGEのみだとそんな感じだったような気がする。
WHILEでCPUリソース食ってるとかそんなんじゃなかったかな??
あと、スペル間違ってるかも。


181 名前:139 :04/04/17 05:26
>>157

子ウィンドウ の項目までとりあえず読ませていただきました
まず クリップっていうのは
描画するにあたって関係のない領域を
描画する領域から排除するっていう感じでよろしいのでしょうか??

本文中に
"システムはクリッピング リージョン外の描画を廃棄 (クリップ) するため"
と一応しっかり書いてあるのですがちょっと自信がなくて・・

それで、

>兄弟ウィンドウは、 Z順序と逆の順番でWM_PAINTメッセージを受け取ります
>このため、 Z順序の最上位の (いちばん前の) ウィンドウは、
>最後にWM_PAINTメッセージを受け取ります。

つまりはZオーダーというものは描画処理の順番を決めることで
前後関係をうまく表現しているだけであるということなんでしょうか。

Zオーダーが下であるウィンドウからWM_PAINTは呼ばれ
を指定したウィンドウは描画する際に
兄弟ウィンドウの領域をクリップするなら
を指定した兄弟ウィンドウ同士が重なる場合は
Zオーダーと逆の順番で重ねられたカタチになるのかな・・
使い慣れない言葉に正確にイメージできてるかわからない概念で_| ̄|○
変な文章になってたらすいません。
再び おねがいします。



182 名前:デフォルトの名無しさん :04/04/17 10:39
(リッチ)エディットコントロールについての質問なのですが、

上記をコンソールウィンドウのように、printfの代用としてメッセージ表示に用いているのですが、
僕自身がEM_REPLACESELを使用しているためか、表示処理がかなり遅く感じます。
(可能な限り、行単位で表示できるように処理してはいますが)

より速度を求める場合は、ウィンドウに直接書く(TextOut)しかないのでしょうか?

183 名前:デフォルトの名無しさん :04/04/17 10:49
リッチエディットより ということなら普通のエディットでもいいだろ

184 名前:デフォルトの名無しさん :04/04/17 12:53
前スレ見てて不思議に思ったんだが
> 464 名前:デフォルトの名無しさん[sage] 投稿日:04/03/10 21:12
> >>463
> みなさん大人しくfopen使ってるんすかねー?

> 466 名前:デフォルトの名無しさん[sage] 投稿日:04/03/10 21:30
> >>464
> 使ってる。ローカルファイルの一般的な展開にわざわざWin32APIを使うのは稀。
> MFCのCFile系統も必要なし。
> 将来の別プラットホームや別プロジェクトへの移植も考えると、C標準でほぼ十分。


って言ってるけど、結局fopenもW32APIコールに変換されてるんじゃない?と考えてReactOSのソースを見てみた。
msvcrt.dllのfopen.cから_open() (open.c内)が呼ばれ、そこではオープンモードを調査した上でこうしている
 hFile = CreateFileA(_path,
             dwDesiredAccess,
             dwShareMode,
             &sa,
             dwCreationDistribution,
             dwFlagsAndAttributes,
             NULL);

ROSのソースであってWindows自体のソースではないが、設計とAPIコール体系を調べた上で書いているようだから
参考にはなるだろう。

185 名前:デフォルトの名無しさん :04/04/17 12:59
>>184
あのね。標準関数というのは、その環境でちゃんと動くように作られてるんだよ。

186 名前:デフォルトの名無しさん :04/04/17 13:44
>>184
WindowsというかVCのCRTも最終的にはCreateFileを呼んでるけど。
fopenはCの規格に含まれる関数であって、OSのそれじゃない。
ネイティブで実装しているOSがあるかもしれないけど、それは今関係無い。

OSのサービスをC標準に準拠するようにラップするのが普通。
>>184みたいな事を言い出したら、mallocを使っていたとしても
いちいちHeapAlloc使ってますって言わなきゃならんのか?

187 名前:デフォルトの名無しさん :04/04/17 13:50
なんか懐かしいなぁ。私も高校の頃はそんな風に思ったもんだよ。

話は逸れるが、fopen()のオープンモード拡張して排他制御できたらいいとはちょっと思う。

188 名前:デフォルトの名無しさん :04/04/17 13:54
>>184
引用もとの発言者がしているのは、標準Cライブラリだけに依存している
プログラムはソースコードレベルで移植性があるよね、という話。
標準Cライブラリが動作する環境ならMakeかけなおすだけで大抵動く。
標準Cライブラリ自体は、あなたの言うとおりOSに依存するので移植性はない。

189 名前:デフォルトの名無しさん :04/04/17 14:16
>>188
別に移植性云々じゃなくてたしかにCreateFileのほうがfopenより多機能だが、
大抵の状況では必要ないからfopenで十分だろ、って程度じゃないか?

190 名前:デフォルトの名無しさん :04/04/17 14:28
>>189

183氏が

> 前スレ見てて不思議に思った

のは

> > 将来の別プラットホームや別プロジェクトへの移植も考えると、C標準でほぼ十分。

のくだりに関してだから、ここでいう移植とはこういう意味である、という
事でああいう風に書いた。
元発言の主旨はなにか、という話なら多分あなたの言う事が正しいのだろう。

191 名前:デフォルトの名無しさん :04/04/17 15:03
他スレからのコピペだけど、
Visual C++ Toolkit 2003
http://www.microsoft.com/downloads/details.aspx?FamilyID=272be09d-40bb-49fd-9cb0-4bfa122fa91b&DisplayLang=en

http://msdn.microsoft.com/visualc/vctoolkit2003/

> What is the Visual C++ Toolkit 2003?
> The Visual C++ Toolkit is a free edition of Microsoft’s professional Visual C++
> optimizing compiler and standard libraries ? the same optimizing compiler and
> standard libraries that ship in Visual Studio .NET 2003 Professional!
キタ━━━━(゚∀゚)━━━━!!
さよなら某ランド

192 名前:デフォルトの名無しさん :04/04/17 15:13
IDEあるの?

193 名前:デフォルトの名無しさん :04/04/17 15:14
配布制限あり、IDEなし
まだまだ某は生きると思われ

194 名前:デフォルトの名無しさん :04/04/17 15:21
どんな配布制限?

195 名前:デフォルトの名無しさん :04/04/17 15:26
Are there any restrictions on how I use the Visual C++ Toolkit?

In general, no. You may use the Toolkit to build C++ -based applications,
and you may redistribute those applications. Please read the End User
License Agreement (EULA), included with the Toolkit, for complete details.

インストールせんとEULA読めんのか。

196 名前:デフォルトの名無しさん :04/04/17 15:43
>>193はインストールして読んだんだろ?どんな制限があったのか教えてクリ。

197 名前:デフォルトの名無しさん :04/04/17 15:52
NetBIOSでのワークグループ名やドメイン名を取得するAPIって何になるんでしょうか?
Windows 2000/XPについてです。

GetComputerObjectName かと思って試したんですが
ドメインに入っていないマシンだとERROR_CANT_ACCESS_DOMAIN_INFOという
エラーが出てしまいます。

198 名前:デフォルトの名無しさん :04/04/17 16:57
>>191
コマンドラインベースだと某のコンパイラの方が使いやすい

199 名前:デフォルトの名無しさん :04/04/17 17:13
商用アプリ不可、$5.0を超える手数料の徴収不可

200 名前:デフォルトの名無しさん :04/04/17 17:57
えーご苦手ながら読んでみたけど、コンパイラはVC7.1(VS.NET2k3)のと同じなんだよね?

201 名前:デフォルトの名無しさん :04/04/17 19:23
>>199
落として一通りEULAに目通してみたけど、
どこをどう読んだら「商用アプリ不可、$5.0を超える手数料の徴収不可 」になるんだ?

202 名前:デフォルトの名無しさん :04/04/17 19:43
>199
少なくとも、$5.0の解釈は間違ってる。ライセンスの中で$5.00が出てくるのは、第15項だが
これは、terrariumのEULAにも出てくる。
http://www.microsoft.com/japan/msdn/net/terrarium/download/ter_eula.asp
http://www.microsoft.com/japan/msdn/net/terrarium/download/ter_eula_JP.asp

一番下の、LIMITATION OF LIABILITY AND REMEDIES. Notwithstanding any damagesがどーのこーのだ。
上記したterrariumの日本語参考訳の一番下を見ると判るが、「仮令、大きな被害を受け手も、5$以上は
俺ら(Microsoft)は支払いませんよ」という話で、手数料がどーのこーのという話ではない。

203 名前:デフォルトの名無しさん :04/04/17 20:24
配布制限に関しても「このソフト(Visual C++ Toolkit 2003)を無断で転載したら駄目」って感じなんだけど・・・
ここはちょっと英語力に自信が無いから微妙だけど

204 名前:デフォルトの名無しさん :04/04/17 20:58
英語の読めないアンチが騒いでるだけだから放置しとけ

205 名前:デフォルトの名無しさん :04/04/17 21:18
プ

206 名前:デフォルトの名無しさん :04/04/17 23:30
ピ

207 名前:デフォルトの名無しさん :04/04/17 23:51
QueryPerformanceFrequency()でゼロが返される
ハードウェアが高分解能パフォーマンスカウンタをサポートしてない
PCってあるのでしょうか?


208 名前:デフォルトの名無しさん :04/04/18 00:00
>>207
rdtscをサポートしてないCPUだとおもう
pentium以降は大丈夫だろう


209 名前:デフォルトの名無しさん :04/04/18 00:55
クロック可変のCPUで酷い目にあう悪寒

210 名前:デフォルトの名無しさん :04/04/19 09:59
PCに搭載されているシリアルポート名を、例えば、COM1、COM2と言った
感じで列挙したいのですが、APIで実現できますでしょうか?

「シリアル 列挙 API」とかでググってたんですが、それらしいAPIが見つから
なかった…(´・ω・`)



211 名前:デフォルトの名無しさん :04/04/19 10:38
とりあえずCreateFileとかしてみてハンドル取得してみるとか
でいいじゃん、めんどくさいし

212 名前:デフォルトの名無しさん :04/04/19 10:44
と言いつつ他の解決法を知らない>>211であった。

213 名前:デフォルトの名無しさん :04/04/19 12:20
HKLM\Software\Microsoft\Windows NT\CurrentVersion\ports

214 名前:210 :04/04/19 16:06
>>213のキーから"COMxx"を取得してCreateFileしてハンドルを取得出来た
ポートを列挙する事にしました(`・ω・´)


215 名前:デフォルトの名無しさん :04/04/19 16:30
>210
HKLM\HARDWARE\DEVICEMAP\SERIALCOMM


216 名前:デフォルトの名無しさん :04/04/19 18:22
CreateCompatibleBitmapを使用して、裏画面での描画を行っているのですが、

ウィンドウサイズが変わった時(=このビットマップサイズの元となるHDCのサイズが変わった時)は、
その都度DeleteObject→CreateCompatibleBitmapで良いんでしょうか?


217 名前:デフォルトの名無しさん :04/04/19 18:33
Win32AppricationでCreateFont+TextOutで文字を出力しているのですが、
(y:32,x:16)のサイズのフォントを等幅にするにはどうすればいいのでしょうか。
文字のサイズがデフォルトの(16,8)、(40,20)等の時は大丈夫なのですが、
自分が使いたい(32,16)の時はずれてしまいます。
他にポイントとなりそうな、最後から2番目の引数はFIXED_PITCH | FF_MODERNで
最後の引数は、MSゴシックなどです。そこにメモ帳のFixedSysを指定すると、
フォントのサイズが強制的に(16,8)になってしまいます。

218 名前:デフォルトの名無しさん :04/04/19 18:54
CreateProcess使って同じフォルダのexeを実行したいのですが、
どうすればいいのでしょう?

219 名前:デフォルトの名無しさん :04/04/19 19:12
MSDN嫁

220 名前:デフォルトの名無しさん :04/04/19 19:16
CreateProcess(NULL,"ここにexeのファイル名", 0, 0, FALSE, CREATE_NEW_CONSOLE, 0, 0, &startUpInfo, &procInfo ) ;
でやっても無理でした。

221 名前:デフォルトの名無しさん :04/04/19 19:24
何がどう無理なのか書けよ。エラーなら、GetLastError使うとか。

222 名前:デフォルトの名無しさん :04/04/19 19:57
コンソールアプリでHWNDを取得したいんでつがどうしたら良いでしょうか?
FindWindow(NULL, "test");
だとダメみたいだし、
GetModuleHandle(NULL);
で得たハンドルをHWNDにキャストしたらDirectSoundは初期化出来たんですが、
音が鳴りません。
教えてえろいひと!

223 名前:222 :04/04/19 20:14
ああ、お前等ごめんなさい。
FindWindow(NULL, "")でいけますた。

224 名前:デフォルトの名無しさん :04/04/19 20:18
GetModuleHandleはHMODULEだろ。。。

Win2000以降ならGetConsoleWindow()

225 名前:222 :04/04/19 20:26
>>224
へたれwindowsなら強引にキャストすればいけるんでないかと思って・・・。

そんなAPIあったのね。
ありがとうえろいひと。

226 名前:デフォルトの名無しさん :04/04/19 21:09
ヘタレなのはお前だろw

227 名前:デフォルトの名無しさん :04/04/19 22:37
ビットマップの透過表示の仕方で、表と裏の2枚分のデータを重ねて
計算して透過させる方法は知っています。

別の方法で、すでに何かが表示してある位置にビットマップを
表示するとき、透過する色を指定するとそこの部分を表示しなく、
前に表示してあったものが消されずにすむみたいなのがあるなら
教えてください。TextOutでいうSetBkMode(hdc,TRANSPARENT);
みたいな感じです。

228 名前:デフォルトの名無しさん :04/04/19 22:46
>>216
その通り。
これが嫌なら、MAXのサイズを前もって確保してみては?

>>217
1文字ずつ表示する。

>>227
BitBltのフラグとかどう?


229 名前:216 :04/04/19 22:55
>>228
有難うございます。

230 名前:227 :04/04/19 23:07
>>228
BitBltにそれらしきものがありますね。
今まではStretchDIBitsで表示してたのですが、
それには無かったので、気がつきませんでした。
探してみます。ありがとうございました。

231 名前:デフォルトの名無しさん :04/04/20 02:08
Windows2000pro sp4
PlatformSDK + Visual C++ Toolkit 2003

この環境でUS MicrosoftのMSDNサイトを見ながら GetConsoleWindow() を
試そうとしたのですが、コンパイルが通りません。
ヘッダーファイルの中には GetConsoleWindow の宣言も確認できます。
また、他のコードではコンパイル&リンクができてるのでパスの問題でも無さそうです。
何が悪いか分かりますでしょうか?

---------------------------------------------------------------------
#include <windows.h>
#include <stdio.h>
#define _WIN32_WINNT 0x0500
int main()
{
HWND hWnd = GetConsoleWindow();
printf( "このコンソールウィンドウのハンドル : 0x%X\n", hWnd );
return 0;
}
---------------------------------------------------------------------
error C3861: 'GetConsoleWindow': identifier not found,
even with argument-dependent lookup


232 名前:デフォルトの名無しさん :04/04/20 02:25
以下のビットマップを表示するプログラムについての質問です。
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1060403548&res=59&fi=no

まず、お手数ですがexeのある位置になんでもいいのでビットマップを
用意してください。そして、マクロの名前をその名前にしてください。

コールバックの//1のShowBitmapのコメントを外しても
ビットマップが一つしか表示されないのはなぜでしょう。
ShowBitmap内部の//2のコメントを外したときはちゃんと2つ表示されるのに。

233 名前:デフォルトの名無しさん :04/04/20 02:26
>231
Windowバージョンのdefineくらいは#includeの前にしてみなよ

234 名前:231 :04/04/20 02:40
>>233

通りました。
理屈をよく考えてみれば当然そうでしたね(汗
どうもありがとうございました。

235 名前:デフォルトの名無しさん :04/04/20 02:50
>>232
BeginPaintとEndPaint

あとは自分で考えれ

236 名前:デフォルトの名無しさん :04/04/20 02:53
>>232
BeginPaint()が二度呼ばれるから、が原因だな。

BeginPaintは、WM_ERASEBKGNDメッセージを発行するので、
DefWindowProcによって、Bitmapを描画する前に、
WNDCLASS.hbrBackgroundのブラシでクライアント領域を塗りつぶす。

処理の流れとしては、
WM_PAINT発行→BeginPaint呼び出し→WM_ERASEBKGND発行→Bitmap描画→
BeginPaint呼び出し→WM_ERASEBKGND発行(ここで先に描いたBitmapが上書きされる)→Bitmap描画→
となっている。


237 名前:232 :04/04/20 03:02
>>235
ありがとうございます。調べてみます。

238 名前:232 :04/04/20 03:07
リロードしてなかった。

>>236
詳しくありがとうございます。直してみます。

239 名前:232 :04/04/20 04:19
あっ、そもそも大きな勘違いをしていました。
StretchDIBitsの時に表示していると思っていました。
TextOutと違い、ShowBitmapなどの名前でないのは、
その場で表示するわけではないからですね。

240 名前:デフォルトの名無しさん :04/04/20 08:53
bigenPaint()したんだけどヘヤーカラーしか変わりません

241 名前:デフォルトの名無しさん :04/04/20 08:58
>>240
そうなる仕様でつ。

242 名前:232 :04/04/20 13:03
case WM_PAINT:
hdc = BeginPaint(hwnd, &ps);
for(y = 0; y < 10; y++)
for(x = 0; x < 10; x++)
ShowBitmap(hwnd, hdc, SHOW_BITMAP, y * 16, x * 16, 1, 1);
EndPaint(hwnd, &ps);
break;
こんな感じにしたら出来ました。

後、GetDCに変えてみると何回もWM_PAINTに行っているみたいで
CPU率がえらい事になっていましたが、return DefWindowProcを
defaultの所に書かずに関数の最後の所に書いたら直りました。
(どのイベントの時でもDefWindowProcを通るようにする)

しかし、ウィンドウズアプリケーションは難しすぎます。
いったいどのやり方でやるのが一番いいのでしょうか。

243 名前:デフォルトの名無しさん :04/04/20 13:44
>>242
こういうやり方をするなら、フレームバッファを構築してそっちで書き換えた方がいいと思われ。
WM_PAINT内は、フレームバッファの内容をBitBltなどで展開するのみに徹した方がいい。
あと、ここまでやりたいのかどうかは知らないけど、途中で画像を書き換えたい場合は、
WM_PAINTメッセージを起こすのではなくGetDCを取得して張り付ける方がいい。
これで、大分負担は減るんじゃないかな。

しかしながら、CPU使用率を考えるくらいなら、まずWindowsプログラムを覚えることを
優先した方がいいんじゃない?


244 名前:232 :04/04/20 14:30
>>243
ありがとうございます。
初心者なので何となくは分かるのですが難しいです。
仰るように基本の部分から勉強します。

245 名前:デフォルトの名無しさん :04/04/20 18:36
コールバックで特定のHWNDの時のみ処理したい場合どうすればいいのでしょう。
ウィンドウが一つのときは大丈夫だと思うのですが。

246 名前:デフォルトの名無しさん :04/04/20 18:38
分岐にはif文を使う

247 名前:245 :04/04/20 18:45
>>246
ええとそういう事ではなくて。説明不足ですね。
WinMainで"hoge"と"foo"という2つのウィンドウを作ったとき、
どちらのウィンドウにイベントが起こっても同じコールバック関数で
受け取るので、そのときHWNDが"hoge"のHWNDか"foo"のHWNDかを
判断したいのです。
例えばif(strcmp(CheckHWND(hwnd),"hoge")==0)みたいな感じです。

248 名前:デフォルトの名無しさん :04/04/20 18:52
HWNDじゃ無理です。

249 名前:デフォルトの名無しさん :04/04/20 18:53
>>247
ちょっと考えれば解ると思うが、あんたの方法だと、何らかの方法でイベントの発生したウィンドウのHWNDを得なければならない。

で、「イベント」とはなんだ?

250 名前:246 :04/04/20 19:01
>>247
SetPropとかすればいいんじゃに?

>>249
ウィンドウプロシージャがよばれるんだろ


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