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


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

Win32API質問箱 Build18
501 名前:499 :04/05/01 00:35
>>500
ありがとうございました。そんなところだったとは。
で、今度は色がおかしくなったんですが、
lpBitmapInfo ->bmiColors->rgbBlue= 0;
lpBitmapInfo ->bmiColors->rgbGreen= 0;
lpBitmapInfo ->bmiColors->rgbRed= 0;
lpBitmapInfo ->bmiColors->rgbReserved= 0;
は、あってますか?

502 名前:デフォルトの名無しさん :04/05/01 01:03
>>501
パレットを使わないのなら、BITMAPINFOじゃなくてBITMAPINFOHEADERを使え。


503 名前:デフォルトの名無しさん :04/05/01 01:22
>>498
俺も知りたい。教えてください>>496

504 名前:499 :04/05/01 02:11
>>502
BITMAPINFOHEADER でうまくいきました。
ありがとうございます。

ところで、msdn には、
クリップボードの中身として、 CF_DIB を指定するときは
BITMAPINFO + ビットマップを中身にしろと書いてありますが、
いいんでしょうか?

505 名前:デフォルトの名無しさん :04/05/01 02:25
BITMAPINFO⊃BITMAPINFOHEADER

本来はBITMAPINFOのbmiColorsは[0]なんだけど、
C89の仕様によってサイズ0の配列が作れないから[1]となってるだけ。
パレットを使う場合は、必要に応じて動的確保でサイズを拡張するの。

506 名前:デフォルトの名無しさん :04/05/01 04:02
ものすごい問題外な質問かもしれませんが
関数名で検索して出てくるページにあるやつを
コピペするだけでその関数使えますか?
いまいち。何とかの値とか言われてもどうやって入れたり。。その関数呼び出したりするかわからない・・・

507 名前:デフォルトの名無しさん :04/05/01 04:20
>>506
一つ言っておくことがある。

分らない物を使うな

508 名前:デフォルトの名無しさん :04/05/01 04:33
ここまでくると逆におもしろい。
ウチの新入社員だったら笑えないけど。

509 名前:野次馬 :04/05/01 09:15
>>507-508
分からずに使って、バグが出たらどうするんでしょ。
楽しみ。ホント。

510 名前:デフォルトの名無しさん :04/05/01 09:17
>>506
http://msdn.microsoft.com/library/読むか
http://www.microsoft.com/msdownload/platformsdk/sdkupdate/を入れて同梱のドキュメント嫁



511 名前:デフォルトの名無しさん :04/05/01 10:55
GetSaveFileName()
で、保存するファイル名を取得して、
CopyFile()
で一時ファイルを保存したいのですが、

GetSaveFileName()
でディレクトリを移動させると、ファイルが保存されなくなります。
なぜでしょう。


512 名前:デフォルトの名無しさん :04/05/01 11:24
はらたいらに3千点


513 名前:デフォルトの名無しさん :04/05/01 12:06
>>511
何故って言われても普通はありえないので、動作しないコードをあげるべし。

514 名前:511 :04/05/01 12:27
よろしくお願いします。
memset(&ofn,0,sizeof(OPENFILENAME));
ofn.lStructSize = sizeof(OPENFILENAME);
ofn.hwndOwner = hWnd;
ofn.lpstrFilter = TEXT("Jpeg image [*.JPG, *.JPEG]\0*.jpg;*.jpeg\0\0");
ofn.nFilterIndex = 1;
ofn.lpstrFile = fn;
ofn.nMaxFile = MAX_PATH;
ofn.Flags = OFN_HIDEREADONLY;
if(GetSaveFileName(&ofn)) {
id = CopyFile("tmp.jpg", fn, TRUE);
}


515 名前:デフォルトの名無しさん :04/05/01 12:40
>>514
CopyFileの"tmp.jpg"という指定がカレントディレクトリのファイルを指すからだ。

516 名前:511 :04/05/01 12:54
コピー元、コピー先の両方が相対パス ---- ○
コピー元、コピー先の両方が絶対パス ---- ○
コピー元は絶対パス、コピー先は相対パス ---- ×
コピー元は相対パス、コピー先は絶対パス ---- ×

ということですか?

517 名前:デフォルトの名無しさん :04/05/01 12:59
違う。カレントディレクトリ(フォルダ)とパスの関係について考えてみると分かるが、
仮に、C:\TESTがカレントディレクトリだとして、"tmp.jpg"と書けば、
C:\TEST\tmp\jpgを指すが、GetSaveFileNameによってカレントディレクトリが
変更され、C:\DOCとなった場合、"tmp.jpg"と書くと
C:\DOC\tmp.jpgを指すからだ。

最も簡単で確実な解決法は、すべて絶対パスで表すことだけどな。

518 名前:デフォルトの名無しさん :04/05/01 13:17
狙ったようなtypoだな
C:\TEST\tmp.jpg

519 名前:511 :04/05/01 15:27
GetSaveFileName がカレントディレクトリを変えるとは思ってもみませんでした。

「カレントディレクトリ」ではなく、プログラムファイルが置いてあるディレクトリ
を取得する方法はありますか?

520 名前:デフォルトの名無しさん :04/05/01 15:32
>>519
argv[0]

521 名前:デフォルトの名無しさん :04/05/01 15:39
APIスレ的には
GetModuleFileName(NULL, &lpString, MAX_PATH);
argv[0]ってパス入ってないOSが無かったっけ。

522 名前:デフォルトの名無しさん :04/05/01 15:50
CreateProcessのやりかたによっては入ってなかったりするな

523 名前:デフォルトの名無しさん :04/05/01 15:51
>>521
少なくともUnixは起動したとおりに入っている。
パスはないかもしれないし、そもそも実行モジュール名と違う別名(alias)かもしれん。

524 名前:デフォルトの名無しさん :04/05/01 17:01
スレ違いだが

> 少なくともUnixは起動したとおりに入っている。

ダウト。

525 名前:デフォルトの名無しさん :04/05/01 17:02
要はカレントディレクトリなんか当てにするなってことですよ

526 名前:デフォルトの名無しさん :04/05/01 18:12
絶対パス指定でDLLを読み込むにはどうすればいいんですか?

527 名前:デフォルトの名無しさん :04/05/01 18:14
LoadLibraryに絶対パスを渡すだけだろ?

528 名前:デフォルトの名無しさん :04/05/01 18:17
>>527
それでも同名のDLLを同ディレクトリに置いておくとDLLオーバーライドによって勝手にそっちが読まれませんか?

529 名前:528 :04/05/01 18:20
In Win2K and higher, if there is a file called 'app.exe.local' in the same
directory as app.exe, then all dll's will be loaded from the app's load
directory -- even if its delay loaded with an absolute path that points
elsewhere. the .local. may also override the 'current directory' part of the
search order listed above, but I'm not sure.

というやつです。

530 名前:デフォルトの名無しさん :04/05/01 18:41
それならはじめからそう書いてくれよ

localファイルをユーザーに消させればいいだろ

531 名前:デフォルトの名無しさん :04/05/01 18:48
絶対パスでって指定は無視かいw
役に立たない質問箱だな

532 名前:528 :04/05/01 18:49
>>531
いえ、確かにlocalファイルが無くなれば絶対指定が効くようになるので解決策になっていると思います・・・

533 名前:デフォルトの名無しさん :04/05/01 19:13
わざわざ逃げ道を作るためにローカルがあれば読む仕様にしたんなら、
別にそれに逆らう必要も無かろう。
ユーザーがローカルに同名のDLLを置いたんなら
それなりの理由があるんだろうさ。


534 名前:デフォルトの名無しさん :04/05/01 19:24
こんばんわ

Excelのような多機能List操作APIって無いですかね?
ListControlでは貧弱すぎて、使い物になりません。

535 名前:530 :04/05/01 19:35
>>532
どーしてもいやならlocalがあるときは起動できないようにすれば?
localを消して新しく起動するっていうのも状況によっては可能なんじゃない


typedef int (WINAPI *GET)();
int main() {
char buf[1000];
::WIN32_FIND_DATA fd;

HANDLE h = ::FindFirstFile("load.exe.local", &fd);
if ( h != INVALID_HANDLE_VALUE) {
::CloseHandle(h);
::BOOL r = ::DeleteFile(".\\load.exe.local");
if (r) {
::MessageBox(0, "deleted exe.local", "", 0);
::ShellExecute(0, "", "./load.exe", "", "", SW_SHOW);
} else {
::MessageBox(0, "could not delete exe.local", "", 0);
}
} else {
HMODULE h = ::LoadLibrary("C:\\absolute\\dll.dll");
GET get = ::GetProcAddress(h, "get");
sprintf(buf, "%d\n", get ? get() : -1);
::MessageBox(0, buf, "", 0);
}
return 0;
}


536 名前:デフォルトの名無しさん :04/05/01 19:53
>>531
自分でファイルを読んでメモリ上に展開すれば良い
ハンドルの扱いなどの都合で関連APIをフックする必要があるかもしれない

537 名前:デフォルトの名無しさん :04/05/01 20:41
絶対パス指定してもlocalがあればローカルを読みます。

538 名前:デフォルトの名無しさん :04/05/01 21:20
MapAndLoad使え

539 名前:デフォルトの名無しさん :04/05/01 22:45
質問いいですか?

メモリDCに赤色でFillしたんですが、
その後、ウィンドウDCにBitBltで描画したんですが、
ウィンドウDCになぜか描画されません。
何かしらの間違いをしているはずですが、わかりますかね?


hdc = BeginPaint(hWnd, &ps);

RECT r;
HDC hmdc;

GetClientRect(hWnd,&r);

hmdc = CreateCompatibleDC(hdc);
FillRect(hmdc , &r , CreateSolidBrush(RGB(0xFF , 0 , 0)));
BitBlt(hdc, 0, 0, 300, 300, hmdc, 0, 0, SRCCOPY);

EndPaint(hWnd, &ps);//描画の終了

540 名前:デフォルトの名無しさん :04/05/01 23:08
ビットマップがない

541 名前:デフォルトの名無しさん :04/05/01 23:09
>>539
DCはただの製図道具。紙を用意しなきゃ何も描けん。
メモリDCの場合はビッマップをセットしてやれ。

542 名前:539 :04/05/01 23:17
>>540-541
失礼しました。

ただ、ウィンドウのコンテキストに直接描画すると、再描画のたびにフリッカーが発生するので、
オフスクリーンを用意して、初めにそちらに描画し終えてから、BitBltでウィンドウコンテキストに描画したいのです。
そのオフスクリーンがメモリDCだと思ってました。

オフスクリーンを使った描画方法って無いのですか?


543 名前:デフォルトの名無しさん :04/05/01 23:20
>>542
だからコンパチなビットマップを作れって。

544 名前:539 :04/05/01 23:30
表示されました。
Win32はこれまた回りくどいやり方ですね。

どうもでした。

545 名前:デフォルトの名無しさん :04/05/02 00:36
ダイアログとフォームの違いはなんですか?

546 名前:デフォルトの名無しさん :04/05/02 00:38
フォームとは?

547 名前:デフォルトの名無しさん :04/05/02 00:38
GDI+ならスッキリするよ

548 名前:デフォルトの名無しさん :04/05/02 00:38
すいません、ダイアログとフォームではなくて、
ダイアログとウインドウでした。

ウインドウ上に、コントロールはおけるの?

549 名前:デフォルトの名無しさん :04/05/02 00:41
全てはウィンドウであり、ウィンドウを適当にまとめあげて都合のいい形にでっちあげたのがダイアログ

550 名前:デフォルトの名無しさん :04/05/02 00:41
>>544 回りくどい

どういう仕様なら満足なんだろう。


551 名前:デフォルトの名無しさん :04/05/02 01:58
>>548
ウインドウの上にでも、CreateWindowでコントロールを置けます。
ダイアログは、(たいていの場合)コントロールも含めてあらかじめ
リソースとして作成しておいたウインドウです。
コントロールをたくさん持つウインドウなら、あらかじめ
リソースとして(ダイアログとして)持っておいたほうが便利。

552 名前:デフォルトの名無しさん :04/05/02 04:58
msdn に、CreateToolBarEx は obsolete なので、
代わりに CreateWindow を使えって書いてあったけど、
信じるべき?



553 名前:デフォルトの名無しさん :04/05/02 05:11
MSDNを信じないで何を信じるんだ

554 名前:デフォルトの名無しさん :04/05/02 05:18
KB

555 名前:デフォルトの名無しさん :04/05/02 05:31
CPU使用率を取得する関数はWinAPIにありますか?

556 名前:デフォルトの名無しさん :04/05/02 06:06
リソースエディタで作ったコントロールの集まりを
親ウインドウの上に乗せる方法を教えてください。

557 名前:デフォルトの名無しさん :04/05/02 06:12
>>555
RegQueryValueEx

558 名前:デフォルトの名無しさん :04/05/02 06:49
>>556
CreateDialog

559 名前:デフォルトの名無しさん :04/05/02 10:51
>>539
ps.rcPaintとrc={0,0,300,300}をIntersectRectしてFillRectしたら駄目?


560 名前:デフォルトの名無しさん :04/05/02 11:27
>>539
それよかCreateSolidBrush(RGB(0xFF , 0 , 0)はどこでDeleteObjectしてるんだ?

561 名前:デフォルトの名無しさん :04/05/02 11:27
CreateSolidBrush(RGB(0xFF , 0 , 0)

CreateSolidBrush(RGB(0xFF , 0 , 0))

OTZ

562 名前:デフォルトの名無しさん :04/05/02 13:40
どーでもいいが、矩形塗りつぶしならExtTextOutのほうが楽だぞ、と。

563 名前:デフォルトの名無しさん :04/05/02 14:03
CreateWindow( "BUTTON", "hogehoge",
WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
20, 20, 100, 30, hWnd, (HMENU)ID_MI, hInst ,NULL);
で、ボタンがウインドウ上に追加されるのと同じようなやり方で、
リソースファイル中のダイアログをウインドウ上に追加できますか?


564 名前:デフォルトの名無しさん :04/05/02 14:35
>>563
そのリソースが子ウィンドウならおK。


565 名前:デフォルトの名無しさん :04/05/02 14:43
mciSendCommandを使ってドライブのトレイを開閉させるとき、web上にある
ほとんどの例がMCI_WAITを指定して完了するまで制御を戻さないように
しています。

この場合にMCI_WAITを抜くのはあまりよろしくないのですか?

566 名前:デフォルトの名無しさん :04/05/02 14:46
>>564
リソースID が IDD_DIALOG だった場合、実際のコードはどうなりますか?

567 名前:デフォルトの名無しさん :04/05/02 15:13
>>566
リソースデータをハンドリングして
一つ一つCreateWindow

568 名前:デフォルトの名無しさん :04/05/02 15:37
>>565
MCI_WAITをはずした場合、処理が終了しなくてもmciSendCommandが返ってしてしまうので、
MCI_NOTIFYを使って処理終了を待ってから次のコマンドを送信するようにせなあかんくなる。

なので、再生時はともかく初期化処理しているときはいちいちNOTIFYを待つのはめんどいので、
WAITで呼び出したりする。


569 名前:デフォルトの名無しさん :04/05/02 15:41
続き。
トレイ開閉は、たとえば開いている最中に閉めるコマンドを送信した場合、
どういう状況になるか分からないから、安全策としてWAITしてるんじゃないかね。


570 名前:デフォルトの名無しさん :04/05/02 15:59
>>568 >>569
ご意見ありがとうございます。

それが目的であると思われそうですね。CDを入れた状態でトレイを閉めると
しばらく反応なしになるので何となくすっきりしませんでした。ほとんど自分用に
作っているので、SetTimerで開閉直後はしばらく受け付けないようにしようかと
思います。
どうもありがとうございました。

571 名前:デフォルトの名無しさん :04/05/02 16:10
スクロールバーを動かすと数字が増えていくサンプルを作りたいのですが、
矢印ボタンを押している間に数字がかわりません。
(離すと一気に数字が変わってしまう)
押しっぱなしにしてる間、絶えず数字が変化するようにするにはどうしたら良いでしょうか?
教えてください。

↓は上手くいかないソースコードです
case WM_HSCROLL:
switch(LOWORD(wp)) {
case SB_LINERIGHT:
if (scr.nPos < scr.nMax) {
scr.nPos++;
SetScrollInfo(hwnd , SB_HORZ , &scr , TRUE);
wsprintf(ch, "%d", scr.nPos);
TextOut(Back_DC, 300, 300, ch, strlen(ch));
}
break;
}

572 名前:デフォルトの名無しさん :04/05/02 16:14
>>566
CreateDialog で出来るって書いたじゃん。

IDD_DIALOG をリソースエディタ上で作るときに
ダイアログプロパティのスタイルタブで
スタイル:「チャイルド」
境界線:「しない」
にしとけば、

hChildDlg = CreateDialog(hInstance, MAKEINTRESOURCE(IDD_DIALOG), hWndParent, (DLGPROC)DlgProc);

BOOL CALLBACK DlgProc(HWN hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
return FALSE;
}

で hWndParent の上に貼り付く。
IDD_DIALOG 上のコントロールからのメッセージは全て DlgProc に行くから
後はそこで処理するなり、親ウィンドウに送りなおすなり好きにしな。


573 名前:デフォルトの名無しさん :04/05/02 17:12
GDI+でテキストのバウンディングボックスのサイズを正確に取得する方法
を教えてください。
ドキュメント上は
Gdiplus::Graphics::MeasureString()
で取れる仕様になってるんですが、実際に取得すると幅が若干広いので、
この情報を信用して描画すると、テキストの間が空きすぎてしまうのです。
試したところ、半角スペース一文字の幅を↑で取得して返ってきた
値を引いてやると、大体ちょうどいい感じになるようですが、こんなやり方で
いいのかという疑問があります。
Fontの色や属性を一部変えつつ描画するといった場合には必須だと
思われるのですが……

574 名前:デフォルトの名無しさん :04/05/02 17:25
MCIでmciSendString()を使ってゴリゴリやっているんですが、

↓自作クラス
C_MCI::open
C_MCI::saisei

っていうのが同じものを操作するとしても、
WNDCLASSAでオープンしてWNDCLASSBから再生すると、
オープンされていません
っていうエラーがでました
同じエイリアス名でも、WNDCLASSが違うと呼び出せない気がする・・・

なにか方法はありませんでしょうか?

575 名前:デフォルトの名無しさん :04/05/02 17:29
>>573
終端文字のサイズも計算してないか?

576 名前:デフォルトの名無しさん :04/05/02 17:40
>>575
終端文字とは?
仕様上、trailing spaceの幅はデフォでは計算しないようですが
一文字ずつ食わせると、はっきり「幅が広すぎる」ことが分かります。

577 名前:デフォルトの名無しさん :04/05/02 18:23
なんだ、フォントがプロポーショナルというオチか。

578 名前:デフォルトの名無しさん :04/05/02 18:52
>>577
は?
プロポーショナルフォントだからこそ、メトリックスをシステムに
図らせたいんですが?
Aという文字に続いてBという文字をレンダしたいときに、
Aの幅情報が必要でしょう。
別にカーニングやリガチャのような複雑な処理を求めている訳ではありませんよ。

579 名前:デフォルトの名無しさん :04/05/02 19:01
見た目の印象から言うと、Gdiplus::Graphics::DrawText()はどうも
左右に半角スペースの1/2程度の幅のマージンを入れたがるようなのですね。
で、Gdiplus::Graphics::MeasureString()はそのマージン含みの
バウンディングボックスを返してくる、という印象です。

GDIならば::GetTextExtentPoint32()を使うところでしょうが、
Gdiplusではどうやるのが正しいの?というのが質問内容です。
C#ではくくりつけのGraphics2DエンジンがGDI+ですから
同じ問題に遭遇するでしょうしね。


580 名前:デフォルトの名無しさん :04/05/02 19:02
×DrawText()
○DrawString()
ですた。

581 名前:デフォルトの名無しさん :04/05/02 19:11
ボタンの上にアイコンを描きたいのですが、どうしたらできるんでしょうか。

582 名前:デフォルトの名無しさん :04/05/02 19:11
おーなーどろー

583 名前:デフォルトの名無しさん :04/05/02 19:12
http://dobon.net/vb/dotnet/graphics/measurestring.html
こういう話か。

584 名前:デフォルトの名無しさん :04/05/02 19:14
>>574
WNCLASSが違うとって、何を言ってるのか分からんのですが、
別スレッド同士だとエイリアス名共有できないというのは体験したことある。
そのときは、Aスレッドでオープンした曲をBスレッドで操作したかったのですが、
結局Aスレッドのウィンドウにメッセージ送って制御させました。

あまり参考にならないかな。。。

585 名前:デフォルトの名無しさん :04/05/02 19:23
>>574
オープンしたデバイスを共有したいってこと?
mciSendCommandでMCI_OPENして、取得したデバイスIDをstatic宣言した領域に格納するとか。


586 名前:デフォルトの名無しさん :04/05/02 19:23
>579
http://www.codeproject.com/cs/media/measurestring.asp
> I found this technique through a GDI+ KB article (Q307208) at http://support.microsoft.com/default.aspx?scid=kb;EN-US;q307208
> Summary: to measure a string without resolution dependent effects and 1/6 em gaps you must use a GenericTypographic StringFormat.
> Something like:
> sfmt = StringFormat.GenericTypographic;
> size = graphics.MeasureString( m_Text, m_ActiveFont, 1000, sfmt );
> Although the article doesn't say it, I believe the GenericTypographic StringFormat sets some internal bits that are not available through the API any other way, at least I haven't found them (and I've been trying).

587 名前:デフォルトの名無しさん :04/05/02 19:39
>>583
>>586
Thx.
MeasureCharacterRange()を使え、ということですね。
ありがとうございました。

588 名前:デフォルトの名無しさん :04/05/02 20:12
MessageBox関数の戻り値は、いつの間にINT_PTRに変わったの?

589 名前:デフォルトの名無しさん :04/05/02 20:16
変わってないだろ

590 名前:588 :04/05/02 20:18
typedef _W64 int INT_PTR, *PINT_PTR;

591 名前:588 :04/05/02 20:21
INT_PTR DialogBox(HINSTANCE hInstance,
    LPCTSTR lpTemplate,
    HWND hWndParent,
    DLGPROC lpDialogFunc
);
だってさ。

VisualStudio.net 2003 Pro に付属のMSDNより。

592 名前:デフォルトの名無しさん :04/05/02 20:23
MessageBox関数とDialogBox関数は全く別のものですが。

593 名前:588 :04/05/02 20:29
ごめん、588が間違いだった。
正解は、
DialogBox関数の戻り値は、いつの間にINT_PTRに変わったの?
だった。

594 名前:デフォルトの名無しさん :04/05/02 20:38
何でそれが気になるの?

595 名前:デフォルトの名無しさん :04/05/02 20:38
たぶんWINVER==0x0500ぐらいから。

596 名前:588 :04/05/02 20:47
こないだVS.net買って、うれしくて昔作ったのをビルドしてみたら、
型違い警告が出てちょっといやな感じだから。
まぁ、正直あまり気にしてないけどVisualStudio買った記念カキコ
したかっただけ。

597 名前:デフォルトの名無しさん :04/05/02 21:37
休み厨の中でもGW厨が一番ひどいな

598 名前:デフォルトの名無しさん :04/05/03 00:17
telnet:// に割り当てられているアプリケーションのパスとかを
取得するにはどうしたらよいのでしょうか?

599 名前:デフォルトの名無しさん :04/05/03 00:18
HKCRを漁れ

600 名前:デフォルトの名無しさん :04/05/03 00:42
>>596
そんなおまいは、とりあえず警告レベルをあげろ

601 名前:デフォルトの名無しさん :04/05/03 08:12

hMemDC = CreateCompatibleDC(hDC);

で、画面を作成して、

WM_PAINT:

FillRect(hMemDC, &rect, CreateSolidBrush(RGB(100, 100, 128)));
〜中略〜
BitBlt(hDC, 0, 0, MEM_SX, MEM_SY, hMemDC, 0, 0, SRCCOPY);

で画面を塗りつぶしているんですが、
何秒か経過したところでFillRectが実行されなくなってしまいます。
(背景色が表示される)

安定して画面を塗りつぶすのにはどうしたらよいのでしょうか?
どなたかご教授お願いします。

602 名前:デフォルトの名無しさん :04/05/03 08:56
>>601
100,100,128のブラシDeleteObjectしてんのか?

603 名前:デフォルトの名無しさん :04/05/03 09:35
>>601
559あたりから読み直してください

604 名前:デフォルトの名無しさん :04/05/03 10:13
>>601
GDI Object大量生成(w

605 名前:デフォルトの名無しさん :04/05/03 10:42
>>602 >>603 >>604
ブラシ削除するの忘れてました。吊ってきます∧‖∧
ありがとうございました。

606 名前:601 :04/05/03 10:42
↑名前入れ忘れました、601です。

607 名前:ミナツキ サヤ ◆SAYAC2HJWE :04/05/03 10:48
607

608 名前:デフォルトの名無しさん :04/05/03 17:43
CreateWindowEx でツールバーを作っているのですが、アイコン描画されません。
なにが悪いんですか?

case WM_CREATE:
InitCommonControls();
hToolBar = CreateWindowEx(
0, TOOLBARCLASSNAME, (LPSTR) NULL,
WS_CHILD | CCS_TOP,
0, 0, 0, 0, hWnd, (HMENU) NULL, hInst, NULL);
SendMessage(hToolBar, TB_BUTTONSTRUCTSIZE,
(WPARAM)sizeof(TBBUTTON), 0);
tbarddbitmap.hInst = NULL;
tbarddbitmap.nID = (int) LoadBitmap(hInst, "IDB_BITMAP1");
SendMessage(hToolBar, TB_SETBITMAPSIZE,
0, (LPARAM)MAKELONG(32, 32));
SendMessage(hToolBar, TB_SETBUTTONSIZE,
0, (LPARAM)MAKELONG(32, 32));
SendMessage(hToolBar, TB_ADDBITMAP, 3, (LPARAM)&tbarddbitmap);
SendMessage(hToolBar,
TB_ADDBUTTONS, (WPARAM)3, (LPARAM)&tbb);
SendMessage(hToolBar, TB_AUTOSIZE, 0, 0);
ShowWindow(hToolBar, SW_SHOW);


609 名前:デフォルトの名無しさん :04/05/03 17:44
ダイアログ作ってGetDlgItemTextした文字を普通にウインドウに表示したいんですけど
GetDlgItemTextで得た文字をどうやってメインで使ったらよいのかわかりませぬ

610 名前:デフォルトの名無しさん :04/05/03 18:06
TextOutとか。

611 名前:デフォルトの名無しさん :04/05/03 18:58
メッセージループ関係の質問です。

PeekMessageの第四引数にPM_REMOVEを指定するのと、

PeekMessageの第四引数にPM_NOREMOVEを指定して次に
GetMessageを使用するのとでは何か違いがあるでしょうか?

例えば

if (PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE)){
  if(!GetMessage(&msg, NULL, 0, 0)) return msg.message;
  TranslateMessage(&msg);
  DispatchMessage(&msg);
}

と、

if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)){
  if(msg.message == WM_QUIT) return msg.message;
  TranslateMessage(&msg);
  DispatchMessage(&msg);
}

です。

612 名前:デフォルトの名無しさん :04/05/03 20:09
メッセージがないときにブロックするかどうか。

613 名前:デフォルトの名無しさん :04/05/03 21:22
LoadBitmap(hInst, "IDB_BITMAP1");
が、NULL を返します。どのような原因が考えられるでしょうか?
IDB_BITMAP1 は確かに存在します。

開発環境がWin98なため、GetLastErrorは使えません。

614 名前:デフォルトの名無しさん :04/05/03 21:30
GetLastError

対応情報
Windows NT: バージョン 3.1 以降
Windows: Windows 95 以降
Windows CE: バージョン 1.0 以降

まぁあとは
"IDB_BITMAP1" なんてのは無いんだろうなぁ。

とりあえず、MSDNライブラリをよく見るべし。

615 名前:デフォルトの名無しさん :04/05/03 21:41
リソースファイルは
IDB_BITMAP1 BITMAP DISCARDABLE "bitmap1.bmp"
となっています。もちろん、bitmap1.bmp もあります。

あと、MSDN には、
LoadBitmap
Windows NT/2000/XP: To get extended error information, call GetLastError.
と書いてありました。

616 名前:デフォルトの名無しさん :04/05/03 21:42
リソースをリンクしてないとか
>Windows NT/2000/XP: To get extended error information, call GetLastError.
Win98じゃ使えないとは書いてないね

617 名前:デフォルトの名無しさん :04/05/03 21:44
>>615
resource.hとかに
#define IDB_BITMAP1 xxxx
みたいに定義されてないか?
それならMAKEINTRESOURCE(IDB_BITMAP1)を使え

618 名前:デフォルトの名無しさん :04/05/03 21:45
そりゃそうだけど、普通に考えて対応してないだろ。

619 名前:デフォルトの名無しさん :04/05/03 21:45
昔、resource.hから #define IDB_BITMAP1 を削除して解決した猛者を見たことがあるが
普通はMAKEINTRya

620 名前:デフォルトの名無しさん :04/05/03 21:47
Win32APIよりもCに近い話なのかもしれませんが、質問させてください。
返り値無し(void)のAPIが色々ありますよね。これをGetProcAddress/LoadLibraryして呼び出し、
返り値をintに格納させると一定の値を返す事があるのですが、どのように実装されているのでしょうか?
関数からreturnで値を返していることはないと思うんですが、、、

621 名前:デフォルトの名無しさん :04/05/03 21:51
>関数からreturnで値を返していることはないと思うんですが、、、

たまたま EAXレジスタの値がそうだっただけではないかな?

622 名前:デフォルトの名無しさん :04/05/03 21:58
リソースは普通に作った場合自動的にリンクされますよね?
同じリソースファイル中のアイコンは読み出せます。

GetLastError は 87 (ERROR_INVALID_PARAMETER)が入ってました。

623 名前:デフォルトの名無しさん :04/05/03 22:02
MAKEINTRESOURCE で解決しました。こんなことに数時間もかけてしまうなんて……
ありがとうございました。

このマクロはいつごろ追加されたんですか?

624 名前:デフォルトの名無しさん :04/05/03 22:07
少なくともWindows95のときにはあった。

625 名前:デフォルトの名無しさん :04/05/03 22:14
See Also
Bitmaps Overview, Bitmap Functions, CreateBitmap, DeleteObject, LoadCursor, LoadIcon, LoadImage, MAKEINTRESOURCE

くらいみろよ。

626 名前:620 :04/05/03 22:16
>>621
そうですね、、一応不定の値ではなく一定値が返ってはくるようなんですが、同じ演算をした結果が返るわけですから
当然なのかもしれません。ありがとうございました。

627 名前:デフォルトの名無しさん :04/05/03 22:33
640x480ピクセルのビットマップを表示したいのですが、
どうしたらウインドウの大きさを調節できますか。

628 名前:デフォルトの名無しさん :04/05/03 22:33
>>623
私が3.1でプログラミングを始めた時にはすでにありました。

長老と呼ばせてください

629 名前:デフォルトの名無しさん :04/05/03 22:36
>>627
SetWindowPos

630 名前:デフォルトの名無しさん :04/05/03 23:04
>>627
AdjustWindowRect

631 名前:デフォルトの名無しさん :04/05/04 00:58
rect.top = 0; rect.left = 0;
rect.right = 640; rect.bottom = 480;
AdjustWindowRect(&rect, 0, TRUE);
SetWindowPos(hWnd, HWND_TOPMOST, 0, 0,
rect.right - rect.left, rect.bottom - rect.top, SWP_NOMOVE);

とすると、ウインドウの外枠を含めて 640x480 になってしまいます。
クライアント領域だけで640x480にしたいのですが、方法はありますか?

632 名前:デフォルトの名無しさん :04/05/04 01:01
>>631
ウインドウサイズとクライアントサイズの差分だけ広げろ
AdjustWindowRectはメニューの折り返しを自動で考慮してくれないし、
折り返し状況を取得する方法がないからだめ。

633 名前:デフォルトの名無しさん :04/05/04 01:47
#include <stdio.h>

int main(){
MessageBox(NULL, "Hello World!", "Caption", MB_OK);
return 0;
}

これがコンパイルできません。何故ですか?

634 名前:デフォルトの名無しさん :04/05/04 01:48
#include <windows.h>


635 名前:デフォルトの名無しさん :04/05/04 01:49
タワラ

-#include <stdio.h>
+#include <windows.h>

636 名前:デフォルトの名無しさん :04/05/04 02:01
-int main(){
+int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ){


637 名前:デフォルトの名無しさん :04/05/04 02:05
>>636
それはもんだいではない

638 名前:デフォルトの名無しさん :04/05/04 02:07
(ノ∀`)アチャー

639 名前:デフォルトの名無しさん :04/05/04 02:22
最近PCはじめたやつは>>633のような発想を平気でする。
もうPCにはウインドウしかなくコンソールやDOSなどというものは考えもしないのだろう。
だから>>633のようなコードを書いておいて平気で
「コンパイルできません」
のような発言をする。
たのむからLSI-C86の試食版あたりからプログラムの勉強をしてくれ。

640 名前:633 :04/05/04 02:24
ありがとうございました。

641 名前:デフォルトの名無しさん :04/05/04 02:27
>>639もコミュニケーションの勉強をした方がいいな

642 名前:デフォルトの名無しさん :04/05/04 02:29
釣れたw

643 名前:デフォルトの名無しさん :04/05/04 12:22
リソースファイルに項目を追加したときに、
自動的に resouse.h が書かれるようにするにはどうしたらいいですか。

644 名前:デフォルトの名無しさん :04/05/04 12:25
支援のあるIDE使ってるなら自動でやってくれるだろ
テキストエディタで弄ったら自動でってのなら、そんなキモイことして欲しくない。


645 名前:デフォルトの名無しさん :04/05/04 12:26
>>643
IDEかなんかの話か?
もちっと状況を説明しないとたたかれて終わるだけだぞ。

646 名前:デフォルトの名無しさん :04/05/04 14:58
>>643
禿しくスレ違い。



それに "resource.h" の間違いにちまいまい。

647 名前:デフォルトの名無しさん :04/05/04 15:02
いやもしかしてIDEを作ろうとしているのかもしれない
しかしAPIってかofstreamだな

648 名前:デフォルトの名無しさん :04/05/04 15:04
それはAPIと呼ぶのか

649 名前:デフォルトの名無しさん :04/05/04 15:07
ha?

650 名前:デフォルトの名無しさん :04/05/04 15:08
hi ?

651 名前:デフォルトの名無しさん :04/05/04 15:10
hu?

652 名前:デフォルトの名無しさん :04/05/04 15:10
中身はAPIだがAPIの話題ではないな

653 名前:デフォルトの名無しさん :04/05/04 15:20
レジストリや.iniならセーフってことか

654 名前:デフォルトの名無しさん :04/05/04 17:05
次のコードについて質問です。
hFile = CreateFile(TEXT("file.txt"),
strFile = (LPSTR)malloc(GetFileSize(hFile, NULL));
ReadFile(fh, strFile, GetFileSize(hFile, NULL), &wReadSize, NULL);
CloseHandle(fh);
filelist[wReadSize] = '\0';

1.このコードは安全(確保されたメモリ以外の場所に書き込みを行わない)ですか?
2.filelist[wReadSize] = '\0' が必要なのはなぜですか?

655 名前:デフォルトの名無しさん :04/05/04 17:07
filelist でなくて strFile でした。

656 名前:デフォルトの名無しさん :04/05/04 17:23
>>654
いいえ。

657 名前:デフォルトの名無しさん :04/05/04 17:33
>>654
1.
最後の行でぶち壊している。

2.
必要ではない。

658 名前:デフォルトの名無しさん :04/05/04 17:34


659 名前:デフォルトの名無しさん :04/05/04 17:36
1.いいえ。
 理由1:最後に埋める\0分のサイズが足りない
 理由2:該当ファイルが3.5GBとかあったらどうするのか。

660 名前:デフォルトの名無しさん :04/05/04 17:40
>>654
Cなの?C++ならmallocはやめてnewを使おうよ
1.1バイトリークしてる
2.strFile[wReadSize-1] = '\0';
とすべきでしょう。必要なのはprintf(strFile);とするときに文字列終端
であるNULLが無いと困るから

661 名前:デフォルトの名無しさん :04/05/04 17:42
>strFile[wReadSize-1] = '\0';
>とすべきでしょう。
正気か

662 名前:デフォルトの名無しさん :04/05/04 17:45
>>654
1. いいえ。2回目のGetFileSize()の戻り値が、最初のGetFileSize()の
戻り値より大きい可能性がある。

663 名前:660 :04/05/04 17:47
>>661 スマソ、ループさせてるのかとおもったヨ
CloseHandle()してるな。
リークしないけど1バイト壊すとこだった(w


664 名前:660 :04/05/04 17:50
hFile = CreateFile(TEXT("file.txt"));
strFile = (LPSTR)malloc(GetFileSize(hFile, NULL)+1);
ReadFile(fh, strFile, GetFileSize(hFile, NULL), &wReadSize, NULL);
CloseHandle(fh);
strFile[wReadSize] = '\0';
...
free(strFile);

665 名前:デフォルトの名無しさん :04/05/04 17:53
>>660
喩えファイルが短く、直接printf()したい場合であったとしても、
終端のナルキャラは必要ではない。
つーか、ちっとも困らない。

666 名前:デフォルトの名無しさん :04/05/04 17:57
というか、
FILE* fp = _tfopen(TEXT("file.txt"),TEXT("rb"));
char* pBuf = new char[nFSize+1];
memset(pBuf,0,nFSize+1);
fread(pBuf,1,nFSize);
pBuf[nFSize] = '\0';
fclose(fp);
...
delete [] pBuf;

のほうがいいな、俺は

667 名前:666 :04/05/04 17:58
> pBuf[nFSize] = '\0';
これ要らなかった(w

668 名前:デフォルトの名無しさん :04/05/04 17:59
>>666
freadの引数が足りない

669 名前:デフォルトの名無しさん :04/05/04 18:08
C++ならSTLコンテナなりスマートポインタ使おうや。

670 名前:デフォルトの名無しさん :04/05/04 18:22
>>668 あ、ほんまや(w

671 名前:デフォルトの名無しさん :04/05/04 18:26
ファイルポインタはどこ逝った。

672 名前:デフォルトの名無しさん :04/05/04 19:08
>665
nande?

673 名前:デフォルトの名無しさん :04/05/04 19:28
>>666
中途半端にC++使うのは好きじゃないなあ。

674 名前:デフォルトの名無しさん :04/05/04 20:00
>>672
printf("%.*s", nFSize, pBuf);
ってことでしょ。

675 名前:デフォルトの名無しさん :04/05/04 20:36
すいませんVC++6.0 でMFCを使用しないで開発を行ってるんですが
「PrintScreen」キーが押された際に送られてくるメッセージが判らないのです。

WM_KEYDOWN 時に VK_SNAPSHOT,VK_PRINTSCREEN 等調べてみてそれっぽいことをしても
巧くいきませんでした。
なにか良い方法はないでしょうか?

676 名前:デフォルトの名無しさん :04/05/04 21:31
675ですがすんませんです。
ホットキーというものを使ったところ思った処理ができるようになりました。
お騒がせしてすいませんでした。


677 名前:デフォルトの名無しさん :04/05/04 22:49
>>611-612
PeekMessageってメッセージが無ければ0を返すんだから
どちらもメッセージ無い時は条件入らないんじゃ?
あまり詳しくないんで、違ってたらスマソ。

678 名前:デフォルトの名無しさん :04/05/05 00:51
ACPI温度管理ゾーンをCreateFile()するところまで上手く行ったんだけど、DeviceIOControl()でアクセスエラーが帰ってきて何も取れない....

handle = CreateFile(
detail->DevicePath,
0,
0,
NULL ,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL );

THERMAL_INFORMATION thm;
ret = DeviceIoControl(
handle,
IOCTL_THERMAL_QUERY_INFORMATION,
0,
NULL,
&thm,
sizeof(thm),
&bsize,
NULL );

ひょっとして、根本的に間違ってるのかな?



679 名前:デフォルトの名無しさん :04/05/05 03:10
>>678
というか、CreateFile の第2引数が 0 なんですが。
DeviceIoControl で必要なアクセスタイプを指定する必要があるんじゃない?
DeviceIoControl 使ったこと無いが…


680 名前:678 :04/05/05 14:04
>>679

0がデバイス問い合わせアクセスとなっていたので0にしていた。
ひとまず、GENERIC_READを指定してみたけどやはり取得できない。。。

ただ、DeviceIoControlのエラーコードが0のときは”アクセスできません”で
GENERIC_READのときは"ファンクションが違います"になるようです。




681 名前:taro :04/05/05 14:16
他サイトで回答が得られないっぽいので、マルチポスターをお許しください
m(__)m

定額PHSパケット通信AirH"のVenturi Client(通称:竜巻)という圧縮プロキ
シを使用時に、自作アプリの通信が出来なくて困っています。
ttp://www.ddipocket.co.jp/customer/download/tornado/

SDKでWinSockを直接叩いて、同期ソケットで単純に
WSAStartup()して、gethostbyname()して、getservbyname()して、
socket()して、connect()して、send()して、recv()して
そこら辺の普通のHTTPサーバからHTML文書をダウンロードしているのですが
send()で「GET http://www.odn.ne.jp/index.html」などと送信してから
recv()で受信しようとするとrecv()から処理が戻ってきません。
send()ではちゃんと全バイト数の返り値が返ってくるので、送信は
たぶん出来ていると思うのですが(自信ありません。。)

竜巻を動かしていない時には一応ちゃんとダウンロード出来ているのですが
全くの初心者状態なので、プロキシサーバを間に入れて通信するには
どうしたらいいのかとかもわからないというような状態です。。
どなたかご存知の方がいましたら、アドバイスをお願い致しますm(__)m

申し遅れましたが環境は、Windows2000pro・VC++6.0pro・SDKです。
どうぞ宜しくお願い致します。

682 名前:デフォルトの名無しさん :04/05/05 14:24
Winsockスレで聞けば?
Sendは内部で処理されるため実際に送信されて無くても送信したことになってる。


683 名前:デフォルトの名無しさん :04/05/05 14:39
>>681
何となくだけど、プロキシーに規制がかかってるんじゃないのかな。
GETを飛ばすときにUser-Agentを騙す必要があるとか(w


684 名前:デフォルトの名無しさん :04/05/05 14:46
だいたいそのプロクシの仕様がわからないとどうしようもない。
ローカルで動いてるのか別のとこにあるのかポートはなにかとか。

685 名前:デフォルトの名無しさん :04/05/05 14:50
仕組み読んだけど全然わかんね。

686 名前:デフォルトの名無しさん :04/05/05 14:53
クライアント→圧縮プロクシ→サーバーって事なんだが
クライアントにもローカルプロクシが立つのかがわからない。

687 名前:デフォルトの名無しさん :04/05/05 15:27
こんにちは

リージョンをメモリDCに適用することはできないのでしょうか?
どうも、うまく適用されません。

hdc = GetDC(hWnd);
hMemDC = CreateCompatibleDC(hdc);

(略)

SelectClipRgn(hMemDC , hRgn);

688 名前:687 :04/05/05 15:52
すいません。
メモリDCにクリップリージョンが適用されました。
単純ミスでした。
すいません。

689 名前:デフォルトの名無しさん :04/05/05 17:57
Window内の任意の場所にスクロールバーを配置したいのだが
どのライブラリーを使えばいいのか教えてほしい

690 名前:689 :04/05/05 18:04
解決しました。
すいません。

691 名前:デフォルトの名無しさん :04/05/05 18:44
GWはもうすぐ終わりだ!みんながんばれ!

692 名前:689 :04/05/05 19:13
ごめん。
もう一回。
CreateWindowsExで作成したスクロールバー(単独)のものを操作するには
何のAPI使えばいいの?

スクロールバー内の情報をセットしたいのです。
ただ、SetScrollInfo(hwnd , SB_VERT , &scr , TRUE);だと、ウィンドウ内にある両端のスクロールバーを操作するものですよね?
私が作ったスクロールバーは、単独のものです。

         CreateWindowEx(
0L,
"SCROLLBAR",
(LPSTR) NULL,
WS_CHILD | WS_VISIBLE | SBS_VERT,

693 名前:デフォルトの名無しさん :04/05/05 19:21
SetScrollInfoの説明をよく見よう。
SB_HORZとSB_VERT以外に何がある?

694 名前:689 :04/05/05 19:45
>>693
解決しました。
本当にすいませんでした。

695 名前:taro :04/05/05 21:28
すみません、鈴木亜美ちゃんの復活スレ見てたので遅レスすみません。。

POP3通信をしてみたら普通に動いたので、もしやと思い、今までHTTP0.9形式で
リクエストしてたのを、HTTP1.0or1.1風味でやってみたら無事通信できました。
レスくれた方々ありがとうございましたm(__)m

696 名前:デフォルトの名無しさん :04/05/06 03:13
Win 2000/XP だけが通知してくるメッセージを処理する
コードを書いた場合、そのプログラムは Win 9x でも
(メッセージ処理用のコードを除いて)動作しますか?



697 名前:デフォルトの名無しさん :04/05/06 03:51
ソフトウェア仕様云々より、むしろ使用しているAPIで決まる。

698 名前:デフォルトの名無しさん :04/05/06 12:55
>>682
Winsockスレってどこにありますか?
教えてください。

699 名前:デフォルトの名無しさん :04/05/06 13:47
後方互換性意識してDLL作るときはDEFファイルで序数指定するもんだって
思ってたし、MSDNにもそんなこと書いてあるんでそうしてたんですが、
それって過ちじゃないかと今日気づきました。

DependencyWalkerで見ると、序数指定つきで作られたインポートライブラリ
からインポートしているプログラムは、当然のように序数でインポート
してるんですね。ところが、__declspec(dllexport)、あるいは
序数指定無しのDEFファイルで指定されたシンボルは、
名前でインポートしてるのが分かる。あくまでやってみて気づいた
経験則であって、どこにもそんなことは書いてないですけどね。
これ、どっちがいいかっつったら勿論後者ですよね。スタブコードが
ちゃんと名前でGetProcAddress()してくれるなら、
バージョンアップの際にいちいち序数管理する必要ないから。

で、面白くなって色々調べてみると、MS謹製のライブラリでも、ものに
よってまちまちなんですよ。kernel32, user32, msvcrtのような奴は
名前エクスポートなんだけど、mfc42, oleaut32, wsock32あたりは
序数エクスポートになってる。
いったん序数エクスポートにしちゃうと、後方互換性のためにはそれを
維持しなきゃいけないからそうなってるのかなあ、とか思ったりしました。

皆さんは、この辺、どうやってますか?

700 名前:デフォルトの名無しさん :04/05/06 14:01
CD-R にデータをベタで書き出したいのですが、特別な API があるのでしょうか。

701 名前:デフォルトの名無しさん :04/05/06 18:43
開こうとしているファイルが他のプログラムによって
開かれている(WriteOpen)ことを検知するAPIはありますか?

702 名前:デフォルトの名無しさん :04/05/06 19:23
>>699
互換性維持っていうほど簡単じゃないと思う
俺はすっかり放棄

703 名前:デフォルトの名無しさん :04/05/06 19:51
>>699

昔は序数リンクしかできなかったんじゃなかったっけ?

序数リンクのほうがリンクがごく僅かに速いだろう、というのはあるけ
ど、互換性目的以外で今の時代にわざわざ序数リンクを使う理由なんて
ない。


704 名前:デフォルトの名無しさん :04/05/06 19:54
OS板のK&Lキチガイさんたちなら僅かなファイルサイズ・メモリ節約のために序数リンクするかもなぁ。

705 名前:699 :04/05/06 20:17
>>703
その「昔」というのはWin16時代のDLLですか?
kernel32が名前エクスポートになってるということは、Win32は最初からそれを
サポートしていたということになりますね。
ていうかGetProcAddress()が名前でDLLのシンボルをfetchできる
以上、できないはずがないのだけれど。

>>704
ご丁寧にNONAMEまでつけてしまうということですか。Unixでstripをかけるのと同じ
感覚なのだろうか。

序数つきで作成したimport library(NONAME指定無し)にも、ちゃんと名前シンボル
は入ってるんですよ。で、私には序数「無し」で作成したものとの違いがlibファイル
だけでは分からないのですが、MSのリンカは不思議なことにこれを区別する
んですよね。
序数指定無しの場合はlibが勝手に序数を指定するだけだと思ってました。ていうか
ドキュメントにそう書いてあるし。


706 名前:デフォルトの名無しさん :04/05/06 21:55
メッセージループについてなんですが、

時間のかかる処理をしている最中にも、
ウィンドウ操作ができるようにと、
PeekMessageを定期的に呼び出すようにしたのですが、
その時に、メニューとかの操作を行うとその処理が終わるまで、
呼び出し元(=ここでは「時間のかかる処理」)が止まってしまいます。

呼び出し元を止めずに処理することはPeekMessageでは出来ないのでしょうか?

707 名前:デフォルトの名無しさん :04/05/06 21:58
>>706
そこでマルチスレッド。

708 名前:デフォルトの名無しさん :04/05/06 21:59
>>706
処理の流れは常に一元的だ。

709 名前:デフォルトの名無しさん :04/05/06 22:12
>>707
>>708
頑張ってマルチスレッドに取り組んでみます。
レスありがとうございました。


710 名前:デフォルトの名無しさん :04/05/06 22:33
>>709
地獄に片足つっこんだな・・・

711 名前:デフォルトの名無しさん :04/05/06 22:41
きっちりセマフォ仕込めば地獄でもないっしょ。

712 名前:デフォルトの名無しさん :04/05/06 22:45
>>711
片足だから。
でも原因がすぐにわからないバグがあったときなんか
あってるのにものすごいスレッド部に自信がなくなる・・・

713 名前:デフォルトの名無しさん :04/05/06 23:41
UIと処理で2スレッドだけならそれほど複雑ではないけどなあ。

714 名前:デフォルトの名無しさん :04/05/07 00:26
勝負は三スレッド目からと言うじゃないですか


715 名前:デフォルトの名無しさん :04/05/07 00:35
4つめ以降は結構楽かなw

716 名前:デフォルトの名無しさん :04/05/07 00:51
五つめ以降でテンション高くなってきます。

717 名前:デフォルトの名無しさん :04/05/07 00:54
6つを超えると仕様に疑問を抱き始めます。

718 名前:デフォルトの名無しさん :04/05/07 00:56
7つ目に達するともはや思考停止して黙々とコーディングします。

719 名前:デフォルトの名無しさん :04/05/07 01:01
管理スレッドとワーカスレッドなら一時的にどれだけ走ってても気にならんけどな。
3スレッドで大丈夫なら桁が変わっても大丈夫。
…パフォーマンス以外は。

720 名前:デフォルトの名無しさん :04/05/07 01:07
128つも稼動させると、Win9xとともに昇天できます

721 名前:デフォルトの名無しさん :04/05/07 01:11
9xは「リソース不足です」っていうメッセージを表示するために
最後のリソースを使い切ってあぼーんすることが多すぎる。

722 名前:デフォルトの名無しさん :04/05/07 01:13
あるイベントごとにスレッドを起動する処理を書いた。
あるときイベント処理が滞った。
気付いたらスレッドが爆発していた。
#ありがちではある。

723 名前:デフォルトの名無しさん :04/05/07 01:16
単純に並列作業ならかまわないがいろいろ関係してくると複雑になる。
Deadlockとか。
マルチスレッドはデバッグしづらいからなぁ・・・

724 名前:デフォルトの名無しさん :04/05/07 01:20
スレッドがどう動いてるかリアルタイム&レジューム付きでグラヒィカルに
表示してくれるツール無いかなぁ・・・
イベント、クリティカルセクション対応で依存まで表示してくれる。

725 名前:デフォルトの名無しさん :04/05/07 01:21
一言だけ言わせて貰う。

クソスレ立てんな。

726 名前:デフォルトの名無しさん :04/05/07 01:24
盛大な誤爆乙。

727 名前:デフォルトの名無しさん :04/05/07 01:35
>>726
ちょっと寒いが>>725のギャグを理解してやろうな?

728 名前:デフォルトの名無しさん :04/05/07 01:38
ギャグなの?

729 名前:デフォルトの名無しさん :04/05/07 01:40
あー、2chのスレ/スレッドとプロセス/スレッドのスレをかけたのか。


わかるかヴォケ

730 名前:デフォルトの名無しさん :04/05/07 01:54
>>724
インテルがスレッドのデバッグ&プロファイルツール出してるよ。

731 名前:デフォルトの名無しさん :04/05/07 02:02
スレッド数管理スレッドなんてのはあり?

732 名前:デフォルトの名無しさん :04/05/07 02:10
スレッド数管理スレッドってか、GUI回りやイベント処理、スレッド生成なんかは
それ用のスレッドで管理せんとダメだろ。

733 名前:デフォルトの名無しさん :04/05/07 02:11
むやみやたらにスレッドを増やすのはオススメできない。
きちんと管理できるように体系立ててやってるうちはいいけど、特定のパターンで沈黙したら困るからここスレッドね、
ってなことを繰り返してるとVer.2で総つくり直しなんて目にあいかねない。

734 名前:デフォルトの名無しさん :04/05/07 02:47
スレッドは終わらせるときが一番難しい…
穴だらけの終了処理をみると目を覆いたくなる。
ワーカーより先にメインスレッドが終わるケースをまったく考えて無い奴とか。


735 名前:デフォルトの名無しさん :04/05/07 13:16
>>730
リアルタイムじゃない。
あと、スレッド間の依存とかグラヒィック表示も弱いし。
体験版使ったが英語でよくわからない・・・・
まあ、あれ使って一カ所バグ発見できたが。

736 名前:デフォルトの名無しさん :04/05/07 18:48
>>729
あんたの突っ込みで笑えた。

737 名前:デフォルトの名無しさん :04/05/07 18:56
>>736
やっぱり、ツッコミはボケを引き立てるからな。セットでないと。

738 名前:デフォルトの名無しさん :04/05/07 23:18
>スレ/スレッド
って何?

739 名前:デフォルトの名無しさん :04/05/07 23:20
>>738
今いるところ。

740 名前:デフォルトの名無しさん :04/05/07 23:35
>>738
マトリックスしてる状態じゃないかな

741 名前:デフォルトの名無しさん :04/05/07 23:37
スレ・スレッドってPG

742 名前:デフォルトの名無しさん :04/05/07 23:48
助言をお願いします。
SetDIBitsToDeviceをつかってPNGファイルを読み込もうとしているのですがうまくいきません。
とりあえず640*480のPNGを読もうとしているのですが、SetDIBitsToDeviceの戻り値が0になって、GetLastErrorが「パラメータがただしくありません」になります。
もう、どこを修正していいのか分かりません。
分かる方、アドバイスお願いします。

//memDC,PngFileSize,pPngFileDataは設定済み。
//OSはMeです
BITMAPINFOHEADER binfo;
binfo.biSize=sizeof(BITMAPINFOHEADER);
binfo.biWidth=640;
binfo.biHeight=480;
binfo.biPlanes=1;
binfo.biBitCount=0;
binfo.biCompression=BI_PNG;
binfo.biSizeImage=PngFileSize;
binfo.biXPelsPerMeter=0;
binfo.biYPelsPerMeter=0;
binfo.biClrUsed=0;
binfo.biClrImportant=0;

SetDIBitsToDevice(memDC,0,0,640,480,0,0,0,480,pPngFileData,(BITMAPINFO*)&binfo,DIB_RGB_COLORS);

743 名前:デフォルトの名無しさん :04/05/08 00:08
BI_PNGは使えないと思っとけ。いじょ。

744 名前:742 :04/05/08 00:44
PNGは読めないってことでしょうか?
MSDNには98以上で使えると書いてあったので大丈夫と思っていたのですが・・・
無理ならSusieプラグインを使ってみます。

745 名前:デフォルトの名無しさん :04/05/08 00:45
まぁお前らド素人は、libpng拾ってきて、ライブラリでも使ってなさいってこった。

746 名前:デフォルトの名無しさん :04/05/08 00:53
Windows 98/Me, Windows 2000/XP: If the driver cannot support the JPEG or PNG file image
passed to SetDIBitsToDevice, the function will fail and return GDI_ERROR. If failure does
occur, the application must fall back on its own JPEG or PNG support to decompress the
image into a bitmap, and then pass the bitmap to SetDIBitsToDevice.



747 名前:デフォルトの名無しさん :04/05/08 04:04
俺はプロだからGDI+を使う。

748 名前:デフォルトの名無しさん :04/05/08 05:39
WinXPを対象にするなら、そろそろGDI+でもいいかもね。
他OSだと、GDI+のインストールを促さないとあかんので、面倒なことになりそうだけど。

749 名前:デフォルトの名無しさん :04/05/08 08:10
ウィンアプリでDefWindowProcはswitchのdefaultの所に書いてありますが、
returnの所に書いても大丈夫なのでしょうか。WM_PAINTなどを実行した後に
DefWindowProcを実行しても大丈夫かという意味です。

750 名前:デフォルトの名無しさん :04/05/08 09:08
あんまりよくない。


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