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


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

Win32API質問箱 Build42
501 名前:デフォルトの名無しさん :2006/05/01(月) 09:05:52
ぶっちゃけ対応って何?
最近の日本語はおぢさんには難しい。

502 名前:デフォルトの名無しさん :2006/05/01(月) 09:15:32
CreateWaitableTimerA()にしてもだめかい?

503 名前:デフォルトの名無しさん :2006/05/01(月) 09:48:02
MSDNには
>Requires Windows Vista, Windows XP, Windows 2000 Professional, Windows NT Workstation 4.0, Windows Me, or Windows 98.
って書いてあるけどなあ。

504 名前:デフォルトの名無しさん :2006/05/01(月) 11:28:47
>>495
APIHookでできる

505 名前:デフォルトの名無しさん :2006/05/01(月) 12:46:26
>>499
最悪、LoadLibraryを用いてGetProcAddressで呼んでみる?
・・・など、いろいろあるお。



506 名前:デフォルトの名無しさん :2006/05/01(月) 12:54:02
ねぇ、ここにいる先輩方は、
日本語配列(109)キーボード?それとも、英語配列(101)キーボード?

教えて、みんな。


507 名前:デフォルトの名無しさん :2006/05/01(月) 12:56:59
101と109かよ!

508 名前:デフォルトの名無しさん :2006/05/01(月) 12:58:47
スレ違い

509 名前:デフォルトの名無しさん :2006/05/01(月) 13:50:02
>>499 です。
色々返答有難う御座いました。

>>503
オンラインのMSDN見ると確かに2k前に対応してると書いてますね。
HDDに入ってる2003、4月リリース版だとダメって書いてるのに!

>>502
>>505
色々手はあるようですね。
教えてもらった情報元にもう一度考え直して見ます。
CreateWaitableTimerA() は無いって言われます(調べ直ししてみます)。

他の作業にかまけて放置して後でハマるありがちなパターンだけは避けるよう
心がけます。ありがとう御座いました。

510 名前:デフォルトの名無しさん :2006/05/01(月) 13:55:18
>>499 です。
すいません。
サービスパックさえ当たってませんでした。
人に聞く前に環境整えからですね。


511 名前:506 :2006/05/01(月) 14:27:51
おまいら、新スレたてっぞ、こたえんかい!

512 名前:デフォルトの名無しさん :2006/05/01(月) 14:53:52
>>511=>>506
スレ違い

513 名前:デフォルトの名無しさん :2006/05/01(月) 14:55:52
>>511
ttp://pc8.2ch.net/test/read.cgi/tech/1143790424/l50

514 名前:デフォルトの名無しさん :2006/05/01(月) 15:11:43
ウィンドウの外枠を外す方法があった気がした。

CreateWindowExの引数弄るだけで出来る?
他になにかAPIが必要?

教えておくれ


515 名前:デフォルトの名無しさん :2006/05/01(月) 15:33:11
>>499
自分でヘッダ見ろよ。
winbase.hのCreateWaitableTimerA/Wの宣言の直前にこれがあるだろ。
#if (_WIN32_WINNT >= 0x0400) || (_WIN32_WINDOWS > 0x0400)


516 名前:デフォルトの名無しさん :2006/05/01(月) 17:32:02
>>514
スタイルのボーダー指定をしなきゃいいだけジャマイカ?

517 名前:514 :2006/05/01(月) 19:29:59
>>516
WS_SYSMENU だけでも表示される件

518 名前:デフォルトの名無しさん :2006/05/01(月) 19:32:51
そりゃそうだ

519 名前:デフォルトの名無しさん :2006/05/01(月) 19:55:13
>>504
hookでできました。
ピンボールが2倍速になって難しくなりました。

520 名前:デフォルトの名無しさん :2006/05/01(月) 20:54:09
>>519
オメ

521 名前:デフォルトの名無しさん :2006/05/01(月) 21:00:23
>>519
bmaxと入力すればボールが減らなくなる

522 名前:デフォルトの名無しさん :2006/05/01(月) 21:22:11
>>519
ソースちょうだい

523 名前:デフォルトの名無しさん :2006/05/01(月) 21:26:16
エリクサーちょうだい

524 名前:デフォルトの名無しさん :2006/05/01(月) 21:57:27
乙女のキッスクレ

525 名前:デフォルトの名無しさん :2006/05/01(月) 21:57:59
どうやったのかだけでも

526 名前:デフォルトの名無しさん :2006/05/01(月) 22:26:24
散々偉そうに意味のないレス書き散らしといて
今度はソースよこせかよwwww
>>525
見当がつかない物を見てもしょうがないよ。

527 名前:デフォルトの名無しさん :2006/05/02(火) 03:33:42
質問があります。
Cで作ったプログラムにインストーラをつけるにはどのようにしたらいいのでしょうか?
VisualBasicとかならやり方はみた気がするのですが、Cでは見たことがないような・・・
100%見逃している感がありますが、参考になるような分かりやすいサイトがあれば教えてください。
お願いします

528 名前:デフォルトの名無しさん :2006/05/02(火) 03:36:58
まあ取りあえずスレ違いだ

529 名前:デフォルトの名無しさん :2006/05/02(火) 03:43:23
>>528
えっ?
そうなの?
んじゃ、どこで聞いたらいいの?これ?

530 名前:デフォルトの名無しさん :2006/05/02(火) 06:15:32
>>529
Vector眺めて来い

531 名前:514 :2006/05/02(火) 11:22:32
age

ってだれか分からんですかー

532 名前:デフォルトの名無しさん :2006/05/02(火) 11:38:31
>>531
スタイルのボーダー指定をしなきゃいいだけジャマイカ?

533 名前:デフォルトの名無しさん :2006/05/02(火) 11:41:25
>>531
よく知らんけど、どういう風にやってうまくいってないのか
コード晒してみたら?

534 名前:デフォルトの名無しさん :2006/05/02(火) 12:33:48
ExtractIconでアイコンの数が取得できますが、それぞれのアイコンのリソースIDはどうやったら分かりますか?

535 名前:デフォルトの名無しさん :2006/05/02(火) 12:47:13
>>534
EnumResourceTypesじゃダメ?
いぢめる?

536 名前:デフォルトの名無しさん :2006/05/02(火) 13:04:02
スレ違いで申し訳ない。

みなさん、GIFファイルをLockBitsしてポインタでゴリゴリするとき、
画像内の任意のピクセルが黒かどうかを確認するときどうします?
ただし、GIFファイルは256色で保存されており、
GIFファイルのパレットには、ff000000がたくさんエントリーされているものとする。

みんなさん、よろしく!

537 名前:536 :2006/05/02(火) 13:05:29
private bool isBlack(Color color)
{
if (color.R == 0 && color.G == 0 && color.B == 0)
{
return true;
}
else
{
return false;
}
}

こんなのつくって、
if (!isBlack(bitmap1.Palette.Entries[*p1]))
こんなことすると、ものすごく遅いんです。

538 名前:536 :2006/05/02(火) 13:13:40
http://i-bbs.sijex.net/imageDisp.jsp?id=ups2&file=1146543159153o.jpg
カラーパレットを表示させました。
黒がいっぱい・・・。

539 名前:デフォルトの名無しさん :2006/05/02(火) 13:18:35
>>536
そんなときは私はAPIを使わず、適当なライブラリで読み込んだ画像をメモリ上で検索するが。
具体的な方法はスレ違いなんで割愛。
つーか、画像の大きさにもよるけど24ビット画像に変換した方が楽じゃね?

540 名前:デフォルトの名無しさん :2006/05/02(火) 13:25:42
つかおまい前にも来てたが、スレ違いだっつーの

541 名前:536 :2006/05/02(火) 13:27:08
>>539
もうちょい初心者にもわかりやすくお願いします・・・。

(ちなみに、GetPixelとかそういう遅い関数は遠慮したいです)

だいたい3000*3000ピクセル程度の画像を扱っています。

542 名前:536 :2006/05/02(火) 13:28:14
>>540
だって、ここのスレにいる方々が2chで一番知識豊富なんですもの・・・。
ほんとにごめんなさい。おねがいします。

543 名前:536 :2006/05/02(火) 13:30:18
GIFファイルを24bit配列にする方法ってあるのですか?
つまり、byte mybyte=new byte[bmp.Height*bmp.Width*3];
っていう配列を用意してってことですよね??
ごめんなさい、ほんとあほで。

544 名前:デフォルトの名無しさん :2006/05/02(火) 13:31:46
>>541
Palette.Entries[n]ってのを取ってきて isBlack で判定するのが遅いと感じたなら、
最初に0〜255までの各パレット値について、
bool _isBlack[] = new bool[256]; ってのに全部の結果を入れとけばいいでそ?
その関数を900万回も呼ぶより、256回だけ呼んで、あとは配列の参照の方が
速そうだな、とか思うデソ?

こういうことは Win32 API とも C# とも GDI+ とも関係なく、普段からちゃんとものを
考えて暮らしていればごく普通に考えればわかる。

だからスレ違いだといわれてるわけです。
でもまぁ懲りずにまた何か質問あったらここで聞いても良いと思う。
プログラミングの常識みたいなものも、そのうちだんだん解ってくるから頑張って。

545 名前:531 :2006/05/02(火) 13:32:54
>>532
WS_SYSMENU だけでも表示される件
ボーダー指定とかナニソレ

>>533
うまくいってないとかじゃなくて、そう言う方法があったと思うんだけどーって話。

もう一回書く

 ウィンドウの外枠を外す方法があった気がした。

 CreateWindowExの引数弄るだけで出来る?
 他になにかAPIが必要?

 教えておくれ

546 名前:536 :2006/05/02(火) 13:37:44
>>544
どうもありがそ。よく理解できました。

bool _isBlack[] = new bool[256]; ってのに全部の結果を入れとけばいいでそ?

確かにこれははやそうです!
ひょっとしたら、もっともっとスマートな所謂定石の方法が
他にあるんじゃないかとも感じたのです。

547 名前:デフォルトの名無しさん :2006/05/02(火) 13:53:57
だから初心者スレ辺りでやれよ。
そうしたらコードの添削もしてやれるしこっちのコードも提示できるから。

548 名前:536 :2006/05/02(火) 13:57:22
>>547
仰るとおりです。今度からそちらで質問させていたらきます。
どうもありがとうございました。


byte[] isBlack= new byte[Byte.MaxValue];
byte[] isWhite = new byte[Byte.MaxValue];
for (int i = 0; i < 256; i++)
{
isBlack[i] = false;
isWhite[i] = false;
Color color = bitmap1.Palette.Entries[i];
if (color.R == 0 && color.G == 0 && color.B == 0)
{
isBlack[i] = true;
}
if (color.R == 255 && color.G == 255 && color.B == 255)
{
isWhite[i] = true;
}
}


549 名前:デフォルトの名無しさん :2006/05/02(火) 13:59:34
質問です。
タブコントロールを扱っているのですが
タブコントロールが可視状態の時に
SendMessage(
 GetDlgItem(hWnd, IDC_TAB),
 TCM_DELETEITEM,
 (WPARAM)1,
 (LPARAM)0
);
とすると、タブの上にのっているコントロールが全て消えてしまいます。
SPY+でメッセージを見る限り
TCM_DELETEITEMが処理されるとWM_ERASEBKGNDが処理されるようです。

「なら、その後にWM_PAINTを送ればいいかな」
と思いTCM_DELETEITEMをSendした次の行で、WM_PAINTをSendしてみましたが状況は改善されず。

何故か
TCM_DELETEITEM
WM_PAINT
WM_ERASEBKGND
という順番で処理されてしまいます。

タブコントロールを動的に扱う時は、どうやってこのWM_ERASEBKGND問題を回避するのでしょうか。


550 名前:デフォルトの名無しさん :2006/05/02(火) 14:19:58
WM_PAINTはアプリケーションが送る物でないと(ry

551 名前:デフォルトの名無しさん :2006/05/02(火) 14:20:38
InvalidateRect(ry

552 名前:デフォルトの名無しさん :2006/05/02(火) 14:23:32
>>550-551
ありがとうございました。
WM_PAINTを送るかわりにInvalidateRectを使ったら即解決しました。

Javaから帰還して「ん、再描画はなんだっけ。repaint?違うな。UpdateWindowだっけ?」
とドツボにはまってましたorz

553 名前:デフォルトの名無しさん :2006/05/02(火) 14:30:37
猫でもわかるWINDOWSプログラミングを見ながら勉強しつつ
使う関数の意味合いや使った関数の意味をあいまいな説明
なままのでいらいらして、とりあえずWIN32APIオフィシャルリファレン
スを買った程度のレベルの猫以下の自分から質問さしてください。

・SelectObject()で選んだObjectは必ずDeleateObject()しない
 といけないんでしょうか?大きなプログラムになるともったいない
 ので、Create用に宣言した物を使い回す為にDeleateObject
 するんでしょうか?
・リソースはみなさん手描きなんでしょうか?
・LOWORD()等のマクロがあるという事を知るにはどうやって調べて
 いるんでしょうか?
・今VS2005SEを使ってるんですが、ソースの文字列を全部
 TEXT()で囲んでるんですが、VC++6だとだめでした。
 結局は、場所に応じてL""にしたりすべきなのでしょうか?

くずみたいな質問すいません。勉強にもどります。

554 名前:デフォルトの名無しさん :2006/05/02(火) 15:12:56
>>553
First, you d beter recognize ur words r unclear

555 名前:デフォルトの名無しさん :2006/05/02(火) 15:27:39
>>535
ありがとうございます。EnumResourceNamesというのでいけました。

556 名前:545 :2006/05/02(火) 16:25:36
WS_POPUP だけにしたら出来ますたorz

WS_POPUPが無い時点でタイトルバー、外枠とかは絶対ついてくるのね・・・
勉強になりますた

557 名前:デフォルトの名無しさん :2006/05/02(火) 16:46:19
VMWare + Windows98SE で↓な結果が出たんですけど仕様ですかね?


::PeekMessage(&msg, NULL, 0, 0, PM_REMOVE);
(ry
case TM_DESTROY:
  PostQuitMessage(-1);
  break;
case TM_QUIT:
  msg.wParam; // 0x0000ffff が入ってる

558 名前:デフォルトの名無しさん :2006/05/02(火) 17:01:09
>>556
>517->518に答えがあるのに。

559 名前:デフォルトの名無しさん :2006/05/02(火) 17:01:53
>>557
何か問題でも?

560 名前:デフォルトの名無しさん :2006/05/02(火) 17:16:19
>>553
●SelectObject()で選んだObjectは必ずDeleateObject()しない(ry
  ちょっと質問の意味がわかりませんが、GDIオブジェクトを生成するCreate〜に対し、
 GDIオブジェクトを破棄するのがDeleteObjectではないでしょうか?
  SelectObjectはデバイスコンテキストと、GDIオブジェクトを関連付けているのではないでしょうか?
●リソースはみなさん手描きなんでしょうか(ry
  アイコンとかは、ツールを利用した上で手書きじゃないでしょうか?
  私はフォトショップで加工して手書き補正です。
●LOWORD()等のマクロがあるという事を知るにはどうやって調べて(ry
  リファレンスを読む
  ファイルから検索で#defineを検索する。
  人に教えてもらう。
  神の啓示。
●今VS2005SEを使ってるんですが、ソースの文字列を全部(ry
汎用データマッピングを利用するには、
 #include <tchar.h>
 #include <clocale>// 必要に応じて
をソースの頭の記述しておく、
これにより汎用データマッピング用の関数を利用できる。
(実際はマクロ)
ex) 汎用データマッピング用書式付出力
_tprintf(_T("ゴルァ World!\n"));
これが、マルチ文字環境だと
printf("ゴルァ World!\n");
ワイド文字環境だと
wprintf(L"ゴルァ World!\n");
なる。

561 名前:デフォルトの名無しさん :2006/05/02(火) 17:32:21
>>556
WS_オーバーラップトだったかそのへんが0ってことで

562 名前:デフォルトの名無しさん :2006/05/02(火) 17:41:56
>>559
XPでは 0xffffffff なのに問題無いとでも?

563 名前:556 :2006/05/02(火) 17:44:00
>>558
ん?答えなんかあった?

>>561
そういえばそうだった。
てことはつまり WS_POPUP は WS_OVERLAPPED じゃないってこと?
いやその辺りは自分で調べてみます。

どうもですた

564 名前:デフォルトの名無しさん :2006/05/02(火) 18:29:46
>>562
終了ステータスは32ビットってどっかに書いてあった?
単に16ビットしか有効じゃないだけじゃないの?

>>563
WS_SYSMENUを指定したら枠がつく>そりゃそうだ

WS_SYSMENUを指定しない(≒WS_POPUPでも指定する)

565 名前:デフォルトの名無しさん :2006/05/02(火) 18:29:54
>>560
レスありがとうございます
まだ何がわかってて何がわかってないかさえ分かってない
レベルだとわかりました。
とりあえず、もっとゴリゴリ書いて経験積みます。

566 名前:デフォルトの名無しさん :2006/05/02(火) 18:43:12
デバイスコンテキストをバックバッファとして使いたいのですが

char * str = "foo";
HDC hdc2 = GetDC(hWnd);
TextOut(hdc2,x,y,(LPCSTR)str,strlen(str));

ってことをやったとして、これを画面に出力したいときは
BitBlt 使う以外に方法ありますか?
的外れな質問だったらスマソ

567 名前:デフォルトの名無しさん :2006/05/02(火) 18:52:22
まとはずれです。
メモリDCとかで調べてみてください。

568 名前:デフォルトの名無しさん :2006/05/02(火) 19:01:31
>>567
ありがとうございます

569 名前:557 :2006/05/02(火) 19:09:21
>>564
> 終了ステータスは32ビットってどっかに書いてあった?
> 単に16ビットしか有効じゃないだけじゃないの?

WinMainより
> WM_QUIT メッセージの wParam パラメータで受け取った値を返さなければなりません。


なるほど納得した
サンクス

570 名前:デフォルトの名無しさん :2006/05/02(火) 19:38:14
>>564
> 終了ステータスは32ビットってどっかに書いてあった?

でも、

> VOID PostQuitMessage(int nExitCode);
> nExitCode
> この値は、WM_QUIT メッセージの wParam パラメータとして使われます。

intもWPARAMも32ビットなのに、16ビットしか有効じゃないってのは・・・

571 名前:デフォルトの名無しさん :2006/05/02(火) 20:08:38
MSDNのexit()には、
>exit 呼び出しおよび _exit 呼び出しは値を返しませんが、待機中の呼び出しプロセスがある場合は、
>現在の呼び出しプロセスが終了した後で、待機中の呼び出しプロセスが status の下位バイトを利用できます。
>status の値は、オペレーティング システムのバッチ コマンド ERRORLEVEL を使用して、2 種類の定数で表すことができます。
>つまり、定数 EXIT_SUCCESS を値 0、定数 EXIT_FAILURE を値 1 として表します。
と書いてあるんだよね。
これだけ見ると、16ビットどころか8ビットしか使えない。

572 名前:デフォルトの名無しさん :2006/05/02(火) 20:26:19
GetExitCodeProcess関数の説明では、
 甲 - ExitProcess関数またはTerminateProcess関数の中で指定された終了コード
 乙 - プロセスのmain関数またはWinMain関数からの戻り値
 丙 - 処理されない例外のためにプロセスが終了した場合は、 その例外コード

573 名前:デフォルトの名無しさん :2006/05/02(火) 21:26:00
>>570
Win 9xは16ビット時代を引きずっているからそんなもんだろ。

>>571
どこかでプロセス内の最後のスレッドがExitThreadしたら、
そのスレッドの終了コードがプロセスの終了コードになると書いてあった覚えがある。

574 名前:デフォルトの名無しさん :2006/05/02(火) 22:09:35
こんばんは、
HFONT の fnWeight を取得するには、どうすればいいのでしょうか教えてください。
テキストの中を均等割付したいのですが、そう見せかけるだけで、
四角の枠の中に均等に文字が入るように、計算しようと思いす。
ので、フォントの幅で、計算すると出てくるかなと思いまして。

575 名前:デフォルトの名無しさん :2006/05/02(火) 22:10:55
>>574
GetObject

576 名前:デフォルトの名無しさん :2006/05/02(火) 22:13:09
一文字ずつ幅を計算していけばいい。

577 名前:デフォルトの名無しさん :2006/05/02(火) 22:14:06
>>574
fnWeight ってのが何なのかわからないけど、
フォントの幅・・というのが文字の幅のことなら、
文字によって違うから GetTextExtentExPoint とか
GetCharacterPlacement とか使ったほうが良い。

578 名前:デフォルトの名無しさん :2006/05/02(火) 22:27:10
>>574
均等割り付けと言えばSetTextCharacterExtraやSetTextJustificationもお忘れなく、一応ね。

579 名前:デフォルトの名無しさん :2006/05/02(火) 23:09:18
すいません、教えてください
下の定義したDlgPrc()でリンクのエラー
「_MyDlgProc@16 が関数 _WndProc@16 で参照されました」
がでたのですが、何のライブラリを
#pragma comment(lib, "・・・")
で読み込めば良いのでしょうか
DefDlgProcを返そうと思いましたが返る値がLRESULTなので
わけがからなくなりました。
どなたか教えてください

BOOL CALLBACK MyDlgPrc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp)
{
   static HWND hParent;
    switch(msg){
       case WM_INITDIALOG:
         return TRUE;
       case WM_COMMAND:
            switch(LOWORD(wp)){
               case IDOK:
                 ・
                 ・
                 ・
case IDC_CLOSE:
DestroyWindow(hDlg);
return TRUE;
}
return FALSE;
}
return FALSE;
}

580 名前:デフォルトの名無しさん :2006/05/02(火) 23:12:48
>>574です
>>575-578さんありがとうございます。
今いろいろ教えていただいたのを調べていますので、
また、結果かきます。ありがとうございました。

581 名前:デフォルトの名無しさん :2006/05/02(火) 23:16:22
キティ警報>>579

582 名前:デフォルトの名無しさん :2006/05/02(火) 23:39:18
>>579
MyDlgPrcをMyDlgProcに直せ。

583 名前:デフォルトの名無しさん :2006/05/03(水) 00:00:24
sendmessageにてマウスを上下にしか移動出来なくすることって出来ますか?

584 名前:579 :2006/05/03(水) 00:03:11
>>582さん
ありがとうございましった
アホでした

585 名前:デフォルトの名無しさん :2006/05/03(水) 00:10:59
>>583
SendMessage以外の方法なら知ってる。

586 名前:デフォルトの名無しさん :2006/05/03(水) 00:15:09
マウスを!?

587 名前:デフォルトの名無しさん :2006/05/03(水) 00:27:15
SendMessageは無理ですか?
LBUTTONDOWN中のみそうしたかったのですが・・・
して、そのSendMessageの方法とは?


教えてください、お願いします。

588 名前:587 :2006/05/03(水) 00:29:41
3行目に「以外」を付け忘れますた

589 名前:デフォルトの名無しさん :2006/05/03(水) 00:38:54
飲んでインザ終電の漏れに言わせればるとそれはクリップカーソーさ

590 名前:デフォルトの名無しさん :2006/05/03(水) 00:44:43
>>587
ClipCursor()を使って無理やり。

LRESULT WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
RECT rc;

switch (uMsg)
{
// 中略
case WM_LBUTTONDOWN:
rc.left = rc.right = LOWORD(lParam);
rc.top = 0;
rc.bottom = 768; // どうでもいい
ClipCursor(&rc);
break;

case WM_LBUTTONUP:
ClipCursor(NULL);
break;

// 中略
}


591 名前:デフォルトの名無しさん :2006/05/03(水) 00:56:32
たしかに無理やり出来そうですね。
戻し忘れたときが恐そうですけどね。

592 名前:デフォルトの名無しさん :2006/05/03(水) 16:04:07
戻し忘れたら、他のプログラムがClipCursor(NULL);するか再起動しない限り
マウスカーソルが上下にしか動かない。

593 名前:デフォルトの名無しさん :2006/05/03(水) 16:28:58
すみません

bool myWin::Message(){

if(!GetMessage(&msg, NULL, 0, 0))
        return FALSE;

TranslateMessage(&msg);
DispatchMessage(&msg);
return TRUE;
}

このようなクラスメンバ関数を作ったのですが
windowsから何もメッセージが送られてきていないとき、何かメッセージが送られてくるまでここで待機してしまってるみたいなんです。
何か対策はありますか?
よろしくお願いします。

594 名前:デフォルトの名無しさん :2006/05/03(水) 16:32:52
つ PeekMessage

595 名前:デフォルトの名無しさん :2006/05/03(水) 16:43:17
>>594
ありがとうございます。

でもPeekMessageだと期待したような動作をしてくれなかったので
いろいろ試した結果下のような変更で解決しました。

bool myWin::Message(){
        bool f;

f=GetMessage(&msg, NULL, 0, 0);
TranslateMessage(&msg);
DispatchMessage(&msg);

if(!f)
return FALSE;
else
return TRUE;
}

596 名前:593 :2006/05/03(水) 19:44:51
ごめん、すげー早とちりした
回線切って首つってきまつ

597 名前:デフォルトの名無しさん :2006/05/03(水) 19:57:53
このとおりだから許してあげて
     ∧||∧
>>596(  ⌒ ヽ
     ∪  ノ
     ∩∪∩
     (・∀・| |
      |     |
    ⊂⊂____ノ
         彡
___________


598 名前:デフォルトの名無しさん :2006/05/03(水) 20:00:55
だが、ゆるっさん!

599 名前:597 :2006/05/03(水) 20:12:53
許さないかぁ
それならさらに罰を与えましょう、そうしましょう。

600 名前:471 :2006/05/03(水) 22:37:42
>>471です。
お願い、だれか答えて

601 名前:デフォルトの名無しさん :2006/05/03(水) 22:41:12
>>600
多分WM_GETMINMAXINFOが関係してる。

602 名前:600 :2006/05/03(水) 22:51:58
ありがと、ほんまだ!
けど、
なんでEDITが0で、BUTTONが0じゃないのか?

603 名前:デフォルトの名無しさん :2006/05/03(水) 23:00:45
>>574です
こんばんは、いろいろ試してみた結果、
GetObject でHFONT を指定して、LOGFONT を取得すると、
HFONTに、高さのみ指定している場合は、幅がマイナス値になるようなのです。
(間違いかもしれませんが、)ので、GetTextExtentPoint32で、
SIZEを取得して、計算しました。
SetTextJustificationを使って表示させると、何回も呼び出した場合。
不具合が、発生しましたので、その後の表示は、一文字づつ呼び出し
TextOutでかきました。
どうも、文字全体をまとめて表示すると、文字化けになるので、
苦労します。

なお、GetObject はフォントダイアログ呼び出しの
初期値設定に使うことができ感謝してます。

それでは、みなさまありがとうございました。

604 名前:デフォルトの名無しさん :2006/05/04(木) 00:25:55
1文字ずつ書くとClearTypeかけたときに結構表示が汚くなることがあるから個人的にはやめてほしい。

605 名前:デフォルトの名無しさん :2006/05/04(木) 14:50:39
マルチバイト文字列を、全角文字を考慮して(全角文字で分割しない)
指定長さ(バイト数)以下に入るよう切り詰めるAPIってないですか?

例えば "あいう\0" を6バイトのバッファに入れる場合
単純に切り詰めると "あい(うの1バイト目)\0" となってしまうので
その場合は "あい\0" となるように。

606 名前:デフォルトの名無しさん :2006/05/04(木) 14:55:41
ShiftJISの頭のコードを判別してバッファに入れてやればいいだけ。

607 名前:デフォルトの名無しさん :2006/05/04(木) 15:00:06
それは分かってるんですが、API一発で出来たらいいなあと。

608 名前:デフォルトの名無しさん :2006/05/04(木) 15:05:13
探さなくてもあるけど

609 名前:デフォルトの名無しさん :2006/05/04(木) 15:06:35
>>607
たとえAPI一発でやれるとしても、それは内部で同じ事をやってくれるだけだろう?
自分でその機能を持った関数を作って、それを一発呼ぶ事の何が嫌なんだ?


610 名前:デフォルトの名無しさん :2006/05/04(木) 15:07:47
車輪の再発明はしたくない

611 名前:デフォルトの名無しさん :2006/05/04(木) 15:11:56
str系の関数、apiがあるだろ

612 名前:デフォルトの名無しさん :2006/05/04(木) 15:12:32
文字コードがShiftJISとは限らない

613 名前:デフォルトの名無しさん :2006/05/04(木) 15:21:32
考えるのが嫌なんだよ!!!

614 名前:デフォルトの名無しさん :2006/05/04(木) 15:29:09
考えるのが嫌なわけではなく、自分で書いた場合テスト・保守などの手間がかかり
十分テストされている(と思われる)APIでできるのならそれに越した事は無いな
と思っているのですが。

>>611
C標準のstrncpyだと全角文字考慮されていないようですが…

char buf[6];
strncpy(buf, "あいう", 5);
buf[5] = '\0';
// buf[4]に「う」の1バイト目が入っている

615 名前:デフォルトの名無しさん :2006/05/04(木) 15:31:59
質問の前にMSDNぐらい見よう

616 名前:デフォルトの名無しさん :2006/05/04(木) 15:34:51
他人が検証済みのロジックを、WEBなりで調べて実装するのは再発明では無い。
他人の作った設計図を元に、車輪を作ることを再発明だと思っているのか?
再発明の意味を分かっていないのに使う奴のあまりの馬鹿さかげんに涙が出てくる。

617 名前:デフォルトの名無しさん :2006/05/04(木) 15:35:35
>>615
見ていますが、lstrcpyn, StrCpyN, StringCbCopyN, StringCchCopyN
全てアウトだったのですが。

618 名前:デフォルトの名無しさん :2006/05/04(木) 15:38:49
>>614
文字コードを全てUTF16で表現すれば解決。
今後Win32APIを使っていくのならUNICODEが常識。
地域依存コードなど使えば,
>テスト・保守などの手間がかかり
問題が出る。

619 名前:デフォルトの名無しさん :2006/05/04(木) 15:40:21
ええと、仕様でマルチバイト対応でなければならないんです。

620 名前:デフォルトの名無しさん :2006/05/04(木) 15:42:47
>テスト・保守などの手間がかかり
>十分テストされている(と思われる)API
を使うため、仕様を変更すればいい。

621 名前:デフォルトの名無しさん :2006/05/04(木) 15:44:17
調べるのめんどくさいんだよ!!!

622 名前:デフォルトの名無しさん :2006/05/04(木) 15:46:14
だよな。ここで訊いて誰かが答えるの待ってた方が早いし。

623 名前:デフォルトの名無しさん :2006/05/04(木) 15:52:34
自己解決しますた。

624 名前:デフォルトの名無しさん :2006/05/04(木) 15:56:29
だからマルチバイト対応が仕様ならば、必要な機能を実現する上で
>テスト・保守などの手間がかかり
これが必要なわけだろ。その分の工数を見込んでいなかったのであれば
それは見積もりミスであって、APIのせいではない。

625 名前:デフォルトの名無しさん :2006/05/04(木) 16:00:26
>>605
APIがあるかないかが分かればいいのなら、無い。

626 名前:デフォルトの名無しさん :2006/05/04(木) 16:02:53
>>625
ありがとうございます。無いと分かっただけで十分です。

627 名前:デフォルトの名無しさん :2006/05/04(木) 16:10:09
>>617
でた情報小出し

628 名前:デフォルトの名無しさん :2006/05/04(木) 16:10:27
あるか無いかの質問なのに、的外れな回答が多いな。
かと思えば>>138-139みたいな素っ気無いやりとりがあったり
基準がよくわからん。

629 名前:デフォルトの名無しさん :2006/05/04(木) 16:10:55
>>619
ここにも小出し

630 名前:デフォルトの名無しさん :2006/05/04(木) 16:23:27
確かに>>614はダメみたいだが
lstrcpynで常識的なやり方でやったらできた。

631 名前:デフォルトの名無しさん :2006/05/04(木) 16:31:04
>617はlstrcpynでできなかったのか
できたぞ

632 名前:デフォルトの名無しさん :2006/05/04(木) 16:34:09
>>630-631
もしかして

char buf[6];
lstrcpyn(buf, "あいう", 5);
buf[5] = '\0';

で出来たとか言ってる?
"あいう"じゃなくて"aあい"だとダメだよ。

633 名前:デフォルトの名無しさん :2006/05/04(木) 16:46:54
lstrcpyn
指定された文字列を、指定した文字数分だけ、バッファにコピーします。
LPTSTR lstrcpyn(
LPTSTR lpString1,// バッファへのポインタ
LPCTSTR lpString2,// コピー元文字列へのポインタ
int iMaxLength// コピーするバイト数または文字数
);

解説
iMaxLengthパラメータで指定する値は、終端のNULL文字分も含みます。
たとえば、次のプログラムを実行すると、
"abc"と終端のNULL文字が、chBufferにコピーされます。

TCHAR chBuffer[512] ;
lstrcpyn(chBuffer, "abcdefghijklmnop", 4) ;
----------------

MSDN↑意味不明だけど
iMaxLength これはバッファの大きさだから5バイト分あれば十分
終端もコピーしたあとで自分で入れる必要ない

634 名前:デフォルトの名無しさん :2006/05/04(木) 16:55:28
結局lstrcpynはマルチバイト考慮せずぶった切るから駄目だな。

635 名前:デフォルトの名無しさん :2006/05/04(木) 16:55:36
だからlstrcpynは文字数じゃなくてバッファのサイズ指定な

636 名前:デフォルトの名無しさん :2006/05/04(木) 17:10:02
_mbsnbcpy で出来るんじゃねーのー♪
と思って試してみたら、NULL終端を入れてくれなかった。
CRTのソース追ってみたら確かに
buff[6];
"あいう"
だとNULL終端コピってくれない。
ただ、ウチの環境古いんで最新のP SDKで誰かやってみて。
あと、セーフバージョン *_s とか。

637 名前:デフォルトの名無しさん :2006/05/04(木) 19:35:48
>>632
aは、どこからきた?

638 名前:デフォルトの名無しさん :2006/05/04(木) 19:39:47
例を示しただけだろ

639 名前:デフォルトの名無しさん :2006/05/04(木) 19:52:46
小出し

640 名前:デフォルトの名無しさん :2006/05/04(木) 20:01:19
>>636
_mbsnbcpyの中で_ISLEADBYTE使ってるから
途中で切れることはない
終端は頭使えば何とかなる。

641 名前:デフォルトの名無しさん :2006/05/04(木) 20:34:38
wchar_tの使い方がいまいちわかりません。
char型からwchar_t型に変えたとき、
strlenなどをwcslenに変えなくてはいけないのはわかりました。
けど、引数がchar型の関数(MessageBox)を呼び出すときはどうしたらいいのでしょう?

642 名前:デフォルトの名無しさん :2006/05/04(木) 20:51:50
>>641
WideCharToMultiByte等で変換するかMessageBoxWを使う。

643 名前:デフォルトの名無しさん :2006/05/04(木) 21:01:23
MessageBoxWというのがあるのですね!!
もしかしてほかの関数も似たような命名規則でしょうか?

644 名前:デフォルトの名無しさん :2006/05/04(木) 21:16:46
>>643
ttp://msdn.microsoft.com/library/en-us/intl/unicode_8zzn.asp


645 名前:デフォルトの名無しさん :2006/05/04(木) 21:28:59
>618
サロゲートペアの後ろ半分だけ残る希ガス。

646 名前:デフォルトの名無しさん :2006/05/04(木) 23:39:50
>>636
mbだろうがなんだろうが、strncpy系の関数はバッファサイズ一杯まで
つめたときには末尾のゼロは入らない仕様。

buff[6] だとどうせ5バイトしか使えないわけだから、_mbdsbcpy では
バッファサイズ5を指定して自分で先にbuff[5]=0とするのが正しい使いかた。

647 名前:デフォルトの名無しさん :2006/05/05(金) 00:28:58
昔はAPIの日本語HELPがあったけど、今そういうのって無いんだね…
難儀な世の中になったもんだ。

648 名前:デフォルトの名無しさん :2006/05/05(金) 00:58:11
>>647は閉じた世界の住人。
世の中とは>>647の部屋の中。

649 名前:デフォルトの名無しさん :2006/05/05(金) 03:30:38
ListViewに表示されるスクロールバーのハンドルを得るにはどのようにすればいいのでしょうか?

650 名前:デフォルトの名無しさん :2006/05/05(金) 04:03:18
なにをどうやっても得られません。

651 名前:デフォルトの名無しさん :2006/05/05(金) 05:47:53
何がやりたいんだろうね?
自分でスクロールさせたいとか?

652 名前:デフォルトの名無しさん :2006/05/05(金) 07:47:26
>>647
Borland C++ 4.5J の win32api.hlp は今でも時々つかう

653 名前:デフォルトの名無しさん :2006/05/06(土) 01:10:12
ウィンドウを、タイトルバーをつかんだりシステムメニューから移動させたあと
移動が確定した時に発行されるメッセージってありますか?

WM_WINDOWPOSCHANGEDとかはドラッグ中もばしばし送られて来るのでちょっと違う…

WM_WINDOWPOSCHANGEDでフラグ立てて左マウス離された時とかも考えたけど
なんかスマートじゃない気が


654 名前:デフォルトの名無しさん :2006/05/06(土) 03:58:59
WM_EXITSIZEMOVE

655 名前:653 :2006/05/06(土) 07:32:00
あざ〜〜〜すっ!

656 名前:デフォルトの名無しさん :2006/05/06(土) 08:51:01
どうでもいいけど、文字で「あざ〜す」ってのは
他人を馬鹿にしているのかよっぽど自身が馬鹿なのかどっちかにしか見えないな。

657 名前:デフォルトの名無しさん :2006/05/06(土) 09:31:20
どうでもいいと言いながらレスするのは
馬鹿にしか見えないなw

658 名前:デフォルトの名無しさん :2006/05/06(土) 09:37:25
真剣に考えると、返事してくれて嬉しい

659 名前:デフォルトの名無しさん :2006/05/06(土) 09:44:33
>>656
なんか攻撃的だな
きっとカルシウム不足だぞw

660 名前:636 :2006/05/06(土) 15:47:36
>>646
なるぺそ、そうなのか。
strncpyの仕様確認してみます。サンクス。

661 名前:デフォルトの名無しさん :2006/05/06(土) 16:08:34
どうでもいいけど、カタカナで「サンクス」ってのは
他人を馬鹿にしているのかよっぽど自身が馬鹿なのかどっちかにしか見えないな。

662 名前:デフォルトの名無しさん :2006/05/06(土) 16:49:41
どうでもいいけど、言い出しが「どうでもいいけど」ってのは
他人を馬鹿にしているのかよっぽど自身が馬鹿なのかどっちかにしか見えないな。

663 名前:デフォルトの名無しさん :2006/05/06(土) 16:55:12
どうでもいいけど、言い出しが「どうでもいいけど」って言っておいて「どうでもいいけど」を批判するのは
他人を馬鹿にしているのかよっぽど自身が馬鹿なのかどっちかにしか見えないな。

664 名前:デフォルトの名無しさん :2006/05/06(土) 17:05:31
char header[]="どうでもいいけど、";
char core[]="言い出しが「どうでもいいけど」って言っておいて、";
char footer[]="「どうでもいいけど」を批判するのは他人を馬鹿にしているのかよっぽど自身が馬鹿なのかどっちかにしか見えないな。";
for(int i=1;;i++){
 printf("%s",header);
 for(int j=1;j<i;j++) printf("%s",core);
 printf("%s\n",footer);
}

665 名前:デフォルトの名無しさん :2006/05/06(土) 17:36:40
どうでもいいけど、「どうでもいいけど」を批判するのは他人を馬鹿にしているのかよっ
ぽど自身が馬鹿なのかどっちかにしか見えないな。
どうでもいいけど、言い出しが「どうでもいいけど」って言っておいて、「どうでもいい
けど」を批判するのは他人を馬鹿にしているのかよっぽど自身が馬鹿なのかどっちかにし
か見えないな。
どうでもいいけど、言い出しが「どうでもいいけど」って言っておいて、言い出しが「ど
うでもいいけど」って言っておいて、「どうでもいいけど」を批判するのは他人を馬鹿に
しているのかよっぽど自身が馬鹿なのかどっちかにしか見えないな。
どうでもいいけど、言い出しが「どうでもいいけど」って言っておいて、言い出しが「ど
うでもいいけど」って言っておいて、言い出しが「どうでもいいけど」って言っておいて
、「どうでもいいけど」を批判するのは他人を馬鹿にしているのかよっぽど自身が馬鹿な
のかどっちかにしか見えないな。




666 名前:656 :2006/05/06(土) 18:01:44
どうでもいいけど、喪前等大好きだv

667 名前:デフォルトの名無しさん :2006/05/06(土) 18:49:08
いや、俺は嫌いだけど。

668 名前:デフォルトの名無しさん :2006/05/06(土) 18:51:47
わしも小学生の頃は好きな子にわざと嫌いなふりをしてしまったものじゃ。

669 名前:デフォルトの名無しさん :2006/05/06(土) 19:11:09
あ〜ら、あたしもよ。

670 名前:デフォルトの名無しさん :2006/05/06(土) 20:16:21
さすがにうざいんでやめてくれよ

671 名前:デフォルトの名無しさん :2006/05/06(土) 23:26:06
つれない子ね

672 名前:デフォルトの名無しさん :2006/05/07(日) 12:46:56
サブクラス化したプロシージャ内で他のコントロールの値を取得するにはどうしたらいいのでしょうか
GetDlgItemText(hWnd, ID_hogehoge, (LPSTR)hogehoge, 20);
とやっても無理でした…orz

673 名前:デフォルトの名無しさん :2006/05/07(日) 13:38:07
>>672
ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/windowing/dialogboxes/dialogboxreference/dialogboxfunctions/setdlgitemtext.asp
第一引数の説明をよく読むんだ

674 名前:デフォルトの名無しさん :2006/05/07(日) 13:38:56
リンク間違ってた

ttp://msdn.microsoft.com/library/en-us/winui/winui/windowsuserinterface/windowing/dialogboxes/dialogboxreference/dialogboxfunctions/getdlgitemtext.asp


675 名前:デフォルトの名無しさん :2006/05/07(日) 14:34:13
こんにちは
HFONT について教えてください
HFONT を(中身の構造)保存して、呼び出したいのですが、
HFONTからLOGFONT を取り出して、その構造体をテキストファイルに書き出しているのですが、
ofstream of;
LOGFONT hont;
of.open(filename,ios::out);
of << dec << hont.lfHeight << endl;
of << dec << hont.lfWidth << endl;
of << dec << hont.lfEscapement << endl;
of << dec << hont.lfOrientation << endl;
of << dec << hont.lfWeight << endl;
of << hex <<hont.lfItalic << endl;
of << hex << hont.lfUnderline << endl;
of << hex << hont.lfStrikeOut << endl;
of << hex << hont.lfCharSet << endl;
of << hex << hont.lfOutPrecision << endl;
of << hex << hont.lfClipPrecision << endl;
of << hex << hont.lfQuality << endl;
of << hex << hont.lfPitchAndFamily << endl;
of << hont.lfFaceName << endl;
こんな感じで
テキストファイルにはlfItalic とlfUnderline lfStrikeOut
は空白です。それを読み込んで、LOGFONT として、
それをHFONT に一つ筒今度は渡しているのですが、
アンダーラインも取り消し先もすべて、ついてしまうのです。
どうすればフォントの保存ができるのでしょうか。教えてください。



676 名前:デフォルトの名無しさん :2006/05/07(日) 14:58:11
>>675です。
とりあえず力技で、空のときはFALSE としました。

677 名前:672 :2006/05/07(日) 15:27:04
>>674
自作関数にhWndを渡して、関数内でGetDlgItemTextでコントロールの値を取得できたので、
サブクラスのプロシージャでもGetDlgItemTextで出来るのかと思ってやったら出来なかったので…
取得したいコントロールのハンドルをグローバルにして
GetDlgItemText([グローバル変数にコントロールのハンドル], ID_hogehoge, (LPSTR)hogehoge, 20);
にすると取得できるのですが、グローバル変数を使わない方法はどうするのでしょうか…

678 名前:デフォルトの名無しさん :2006/05/07(日) 15:28:04
>>675
まずは、LOGFONTの構造から見直せ

679 名前:デフォルトの名無しさん :2006/05/07(日) 15:31:07
>>677
674ではないが、
findwindow

680 名前:デフォルトの名無しさん :2006/05/07(日) 15:53:23
猫でもわかるWindosプログラミングで勉強してる初心者だけど
やけに変数初期化してない所が多くて
グローバル変数は勝手に0で初期化されるとはいえ
やっぱ全部初期化した方が良いっすよね?
それとも、面倒な所はほっとけって感じで思っておいた方が
書いていくのは楽なんでしょうか

681 名前:デフォルトの名無しさん :2006/05/07(日) 15:56:48
>>680 きっちり初期化するべし
趣味ならいいが、仕事なら癖つけとけ

682 名前:デフォルトの名無しさん :2006/05/07(日) 15:58:35
猫はAPIの使い方を見るサイトなのであって、
その他すべてのことは一切参考すべきではない

683 名前:672 :2006/05/07(日) 16:19:10
>>679
FindWindowで出来ました、ありがとうございました
複数起動していてもアクティブの方で取得してくれるので便利な関数ですね

684 名前:デフォルトの名無しさん :2006/05/07(日) 16:50:44
WFP(Windows File Protection)で保護されているファイルを書き換えるにはどうすればいいのですか?
よくソフトのインストーラなどが再起動時にファイルを書き換えているみたいですが、これをやるにはどうすればいいのでしょうか?

685 名前:デフォルトの名無しさん :2006/05/07(日) 17:37:59
>>684

1. ファイルを書き換える。
2. ディスクキャッシュをフラッシュする。
3. 即座にリブート(2完了から5秒以内に)

参考
ttp://www.sysinternals.com/blog/2006/05/power-in-power-users.html

まあ確か、WFPを無効にする方法があったはず。
本当に書き換えることが必要ならば、無効にすればいい。
でも、それはXPまでしか動かない、腐った設計のプログラム。

Vistaでは、WFPはファイルの書き換え自体を拒絶するようになる。

参考
ttp://blogs.msdn.com/oldnewthing/archive/2006/03/21/556505.aspx

686 名前:デフォルトの名無しさん :2006/05/07(日) 19:29:14
>>675
とりあえず、デシマルとヘキサを読み出して、文字に変換した後に、これはどうだろ。
#include<stdio.h>
voidmain(void){
chara[100]={0};
charb[100]={0};
inti=0;
scanf("%[^_]",a);
scanf("_%s",b);
printf("%s%s",a,b);
}
例えばabc_defと入力するとabcdefと出力される。
ttp://www.microsoft.com/JAPAN/developer/library/vccore/_crt_scanf.2c_.wscanf.htm
ttp://www.microsoft.com/JAPAN/developer/library/vccore/_crt_format_specification_fields_.2d_.scanf_and_wscanf_functions.htm
ttp://www.microsoft.com/JAPAN/developer/library/vccore/_crt_scanf_width_specification.htm

687 名前:デフォルトの名無しさん :2006/05/07(日) 19:30:44
このケースだとsscanfかな

688 名前:デフォルトの名無しさん :2006/05/07(日) 21:32:45
質問さしてください
コントロールのリストボックスの初期化で
hList1 = GetDlgItem(hDlg, IDC_LIST2);として
ボックス内のリストを
ListBox_AddString(hList1, szListBirthYear[i]);
で加えていって
ListBox_SetCurSel(hList1, nBirtY);
[nBirtY はINT型グローバル変数で0として初期化]
で、ListBox_SetCurSel()の第二引数は
何を設定しているのかがわからず、一応入れてある
だけの状態です。
でダイアログプロシージャ内で
case WM_COMMAND:
switch(LOWORD(wp))内の
case IDC_LIST2:で
id = ListBox_GetCurSel(hList1);
wsprintf(szText[1], L"%sが選択されました",
szListBirthYear[id]);
InvalidateRect(hMain, NULL, TRUE);
nBirtY = id;
return TRUE;
としてるのですが、実行してみるとIDC_LIST2のボックスに
加えた文字列、及びスクロールバーが表示されないです。
ただ、そのリストボックスをクリックすると空表示ですが
リストに加えた最初の文字列はウィンドウに反映されます
これは、リソースのプロパティ設定の不備なのでしょうか
それとも、ソースで足りない処理があるのでしょうか
どなたか教えて下さい。


689 名前:デフォルトの名無しさん :2006/05/07(日) 21:43:36
>>688
もうちょっと読みやすく書く癖をつけましょう。

690 名前:688 :2006/05/07(日) 22:45:13
>>689
まだ初心者で、ソースも大したことない物だと思うので
一応ソースのリンク張らしてもらいます。ただ、まだ
ダイアログボックスのコントロールからウィンドウ反映される処理は
途中なので単純にIDC_LIST2にの部分での処理について
お願いします。
(出来れば、ここが良くない。ここはこうするべきだ等注意点が
あれば出来ればで結構なのでお願いします。)
http://mitty.jp/up/src/up1783.c
http://mitty.jp/up/src/up1784.rc

691 名前:デフォルトの名無しさん :2006/05/08(月) 00:25:21
>>690
ソースから解析するのだりぃから、まずexe実行して現象を見てみようと思って、
コンパイルしたらresource.hが見当たらないのでコンパイルできなくて断念です。

ソースで説明するのではなく、ある程度日本語で解説するよう心がけましょう。

692 名前:デフォルトの名無しさん :2006/05/08(月) 01:27:25
>>691
いや、いまやってる最中だが、resorce.h作って、
.rcからID〜を見つけては.hに
#define ID〜 番号//重複しない値
をふってくのは常識だよ。
後は、
#include <windows.h>
#include <stdlib.h>
#include <malloc.h>
#include <memory.h>
#include <tchar.h>
#include<resource.h>
の順にインクルードされるようにしてやる

693 名前:デフォルトの名無しさん :2006/05/08(月) 01:27:47
しゅんません
今からAPIやるのに適した言語なんでしょ?

694 名前:デフォルトの名無しさん :2006/05/08(月) 02:14:14
>>690
分かったよ。
hDlg = CreateDialogとせっかくメインウィンドウと別枠でハンドル作ってるのに、
BOOL CALLBACK MyDlgProc(HWND hWndとやってるからまずい。
MyDlgProcないのイベント処理は、hWndであるが為になんとメインウィンドウにメッセージが来たときの処理になってる。
BOOL CALLBACK MyDlgProc(HWND hDlgとすればいい。
あと、LISTBOX2のリソースのプロパティで垂直スクロールちぇきら!してやれば、そこまでの造りとしては思っているものと一致すると思うが。

695 名前:デフォルトの名無しさん :2006/05/08(月) 03:19:09
>MyDlgProc内のイベント処理は、hWndであるが為になんとメインウィンドウにメッセージが来たときの処理になってる。
もっと具体的に言うと、
IDCANCEL:IDOK:IDC_RADIO1:IDC_RADIO2:IDC_LIST2:がメインウィンドウへのメッセージとして処理するが、
各イベント処理でやってることは、MyDlgProcの処理になっている、さらにこれらのIDとメインウィンドウのIDが幸いぶつかっていない。
WM_INITDIALOG:が来てもメインウィンドウはすでに立ち上がっているので、おそらく処理しないのだろう。
したがって、この中でやるはずの
hMain = GetParent(hDlg);
はやらないことになるから、当然後ろのInvalidRectする相手hMainは存在しないから、ダイアログボックスのフォーカスも再描画されない。

696 名前:訂正 :2006/05/08(月) 03:21:14
メインウィンドウのID>WndProcのID

697 名前:もう一個訂正 :2006/05/08(月) 03:45:17
>WM_INITDIALOG:が来てもメインウィンドウはすでに立ち上がっているので、おそらく処理しないのだろう。
IDM_DLG:でダイアログボックスがすでに立ち上がっているので、その後WM_INITDIALOG:が来ても処理しないだろう。

698 名前:デフォルトの名無しさん :2006/05/08(月) 03:59:49
初歩的な質問でもうしわけないですが…。
バッチやWSHなどのスクリプトファイルをEditアクションに関連付けられている
アプリケーションで開くにはどのAPIをつかえばいいんでしょうか?
Editアクションの定義が無かったらエラー報告とします。
よろしくお願いします。

699 名前:デフォルトの名無しさん :2006/05/08(月) 10:00:30
>>698
シェルのなんかでそんな事出来た気が

あれ、Editアクション?シラネ

700 名前:デフォルトの名無しさん :2006/05/08(月) 10:08:26
既存のウィンドウクラスのインスタンスの外観を変える方法はありますか?
また、その方法はサブクラス化ですか?

701 名前:デフォルトの名無しさん :2006/05/08(月) 10:11:43
>>698
ShellExecute

702 名前:688 :2006/05/08(月) 10:11:45
>>691>>697さん
ありがとうございます。
ここまで丁寧に説明してもらって
何もお返し出来ないのが残念なくらいです
猫でもわかるwindowsと
W32APIのリファレンス本もみながら勉強してるんですが
猫でもわかるwindowsのソース打っても
なんか、つまらんので、自分なりにソースを作ってる感じです。
本当に、丁寧な説明ありがとうございました。
もっと勉強して、質問にたいして返答できるようにがんばります。
本当にありがとうございました。

703 名前:デフォルトの名無しさん :2006/05/08(月) 10:51:21
>なんか、つまらんので、自分なりにソースを作ってる感じです。

それで、ハマって他人に聞いてたら世話ねーな・・・

704 名前:デフォルトの名無しさん :2006/05/08(月) 11:21:08
こっち向きのネタだな

くだすれVisual C++(超初心者用)
http://pc8.2ch.net/test/read.cgi/tech/1141087248/

705 名前:デフォルトの名無しさん :2006/05/08(月) 12:23:39
SetPixelとBitBltってどっちが早いんですか?
自分敵にはSetPixelとは思いますが、自信が無くて・・・。

計測方法でも良いので教えてください。

706 名前:デフォルトの名無しさん :2006/05/08(月) 12:28:48
同じ回数呼ぶなら、SetPixelの方が早いんじゃない?

10万回SetPixel呼ぶよりは、1回BitBltした方が早いと思うよ

707 名前:デフォルトの名無しさん :2006/05/08(月) 12:31:42
おねーちゃんの言うことわかる?
画面サイズ800×600でも、480000回もSetPixel関数呼ぶの。
でも、BitBltなら1回でいいの。

708 名前:デフォルトの名無しさん :2006/05/08(月) 12:43:52
>>706
ソース先頭に以下のコードを記述すると、
timeGetTime関数が使えるようになる。

#include <mmsystem.h>
#pragma comment(lib, "winmm.lib")


んで、以下のようにしてmsexを計測すればいいじゃなーい。
(ちなみに一例)

DWORD dwTime;

// 開始時
dwTime = timeGetTime();

/* 計測する処理 */
 ・
 ・

// 終了時
dwTime = timeGetTime() - dwTime;



709 名前:708 :2006/05/08(月) 12:45:19
>>708で、正しくは705へのレスです。

>>706の人、ごめんね。

710 名前:デフォルトの名無しさん :2006/05/08(月) 12:52:02
>>705
目的が違うので、比べる意味がない。





ついでに、測定するならプロファイラ使えよ。

711 名前:デフォルトの名無しさん :2006/05/08(月) 13:26:44
>>698
ShellExecute

712 名前:デフォルトの名無しさん :2006/05/08(月) 13:46:16
>>706-710
ありがとう!

目的は一応1x1を描画することでした。
それをSetPixelするか、BitBltで1x1をどこかから取ってきて転送するかで迷ったんです。

一応自分でも計ってみましたが、SetPixelよりもBitBltの方が二倍近く遅かったです。
広範囲を書き出すにはBitBltが早かったです(当たり前)

>>705
BCCなのかどうかは知りませんがプロファイラはありませんでした
もしかしてフリーダウンロードとかが出来るようなものですか?


本当にありがとう!

713 名前:デフォルトの名無しさん :2006/05/08(月) 17:18:01
環境はVisual C++ 2005 Express Editon / WindowsXPです。

SetWindowTextをメッセージループの中で回すなどとアホなことしてたので
コメントアウトをしたんですが、コメントアウトをするとメッセージループに入る前に
予め読み込んだテキストファイルの一部が文字化けするという、謎の現象が起きていて困ってます。

メッセージループの中でSetWindowTextを呼んでる限りはそんなことないのですが、
常にウィンドウのタイトルがちらつくようになるのでどうにか修正したいです。

文字コード関係かなとも思うのですが、見当が付きません。。。

714 名前:デフォルトの名無しさん :2006/05/08(月) 17:21:09
他にもアホなことをしてるんだろうと思うが、さすがに検討つかんね

715 名前:700 :2006/05/08(月) 17:34:54
あげ〜

わかりませんかね?

716 名前:712 :2006/05/08(月) 17:36:33
うあ!

御礼の後者は >>710 に宛ててます っていう修正

717 名前:デフォルトの名無しさん :2006/05/08(月) 17:47:11
>>713
\n,\rとか大丈夫か?

718 名前:デフォルトの名無しさん :2006/05/08(月) 17:54:59
以前ほかで質問したのですが反応がなかったため

フォント名に対応するフォントファイルのファイルパスを取得する方法はありますか?
SHGetSpecialFolderPathでフォルダまでは取得できましたがファイル名がわかりません。

719 名前:デフォルトの名無しさん :2006/05/08(月) 18:17:12
>>718
フォントファイル(*.ttf)は[Fonts]ってフォルダにあるけど、
実際はデータ登録式じゃなかった?

AddFontResource, RemoveFontResourceで、
フォントテーブルにフォントデータをインストールして、
GDIとかそこへ問い合わせるんじゃなかったけ?

EnumFont〜はDC問い合わせで、システム問い合わせじゃない訳だし・・・

720 名前:デフォルトの名無しさん :2006/05/08(月) 18:21:40
>>718
そこで、フォントファイルヘッダを解析ですよ。

721 名前:デフォルトの名無しさん :2006/05/08(月) 19:01:00
HKLM\Software\Microsoft\Windows NT\CurrentVersion\Fonts
(NT系の場合)



722 名前:デフォルトの名無しさん :2006/05/08(月) 19:08:03
HKLM\Software\Microsoft\Windows\CurrentVersion\Fonts
(9x系の場合)

723 名前:デフォルトの名無しさん :2006/05/08(月) 19:10:42
>>721, >>722がいい事いった。

WMI叩くより簡単だ。

724 名前:688 :2006/05/08(月) 19:34:19
>>694>>695>>696>>697さん

非常に適切で親切な細かい返答ありがとうございました
こんどからは、くずたれの方で質問するようにします

725 名前:デフォルトの名無しさん :2006/05/08(月) 19:55:04
>>701
rundll32.exe shel32l.dll,shellexecuteXX ....ですかね?
XX ....の部分をもう少し調べてみます。

※おおむね察しがつくと思いますが、既存プログラムのパッチをしようとしています。
ありがとうございました。

726 名前:718 :2006/05/08(月) 21:03:37
みなさん感謝!!
テーブルの場所さえわかればこっちのもんです

727 名前:デフォルトの名無しさん :2006/05/09(火) 13:37:58
質問させてください。

Windowsでファイルシステムを介さずにバイナリデータをべたで
直接デバイスに書き込むには、普通、どんなふうにするんでしょうか。

例えば、USBメモリに書き込む場合、
Unix系だとデバイスを表すファイルが存在するので、
/dev/sda1
なんかをopenしてwriteしてしまえばよいような気がするのですが、
Windowだとどうなるのでしょうか?

もし、すれ違いでしたらすいませんが誘導してください。
よろしくお願いします。

728 名前:デフォルトの名無しさん :2006/05/09(火) 13:53:18
>>727
MSDNのCreateFile()を隅から隅まで読むことをお勧めする。
取り敢えずディスクであればセクタ単位でアクセスできる。
#それでも直接アクセスできるわけじゃないけどね。

729 名前:デフォルトの名無しさん :2006/05/09(火) 14:13:49
> デバイスファイル
ファイルシステムじゃん。
コレじゃ駄目?
http://www.microsoft.com/japan/whdc/device/storage/rem-stor.mspx

730 名前:デフォルトの名無しさん :2006/05/09(火) 14:29:24
BUTTONやEDITなどのウィンドウの外観を変える方法はあるんですか?

自分的にはサブクラス化してWM_PAINTの部分を頂いていくのかと思ってますが・・・

731 名前:デフォルトの名無しさん :2006/05/09(火) 14:32:12
EDITのWM_PAINTなんか頂いちゃったら、ほぼ全面的に
エディットコントロールを作るハメになるぞ。

732 名前:デフォルトの名無しさん :2006/05/09(火) 14:34:48
>>730
ボタンはオーナードローで良いんじゃないの?

733 名前:727 :2006/05/09(火) 14:51:45
僕のつたない説明から質問の意図を汲み取ってくださってありがとうございます。

>>728
読んでみました。隅から隅までちゃんと読むべきでした。 orz
呆れずに親切に教えて頂いて本当に感謝します。

>>729
僕にはかなり難しそうな気がするのですが、きっとこれから役に立つのでしょうね。
Bookmarkしておきます。
どうもありがとうございました。


734 名前:730 :2006/05/09(火) 18:16:08
>>731
あ、そっか。
例にと思って適当に出したけど、出すべきではなかったね。

>>732
あ、そっか。
単純だ。つか忘れてた・・・。


さすがにタブコントロールとかはサブクラス化しかないかな・・・。

735 名前:デフォルトの名無しさん :2006/05/09(火) 21:41:18
リンク切れしていますよ。

>>4
Win32 プログラミング入門
http://www7.plala.or.jp/keny01/windows/win32/


736 名前:デフォルトの名無しさん :2006/05/10(水) 12:46:38
>>735
kenyyyyyyyyyyyyyy!!!!

737 名前:デフォルトの名無しさん :2006/05/10(水) 13:21:15
http://www7.plala.or.jp/keny01/
これで

738 名前:デフォルトの名無しさん :2006/05/10(水) 16:14:05
ソースのない、圧縮されたDLLがあります。
このDLLをLoadLibraryしてDllMainが走る前にメモリ上でパッチを当てたいのですが、
どのような方法がありますか?

LoadLibraryExのDONT_RESOLVE_DLL_REFERENCESが近い動作なのですが、
ドキュメントを読んだ感じではインポートテーブルの解決等はしてくれないようなので・・・

739 名前:デフォルトの名無しさん :2006/05/10(水) 17:24:13
SetEndOfFile() の逆、つまり、ファイルの始端をずらしたいのですが、
やはり「別ファイルを開いてコピー」という方法をとるしかないのでしょうか?

740 名前:デフォルトの名無しさん :2006/05/10(水) 17:37:34
>>739
ReadFile, WriteFileのOVERLAPPEDを利用して、
同ファイルを読みながら書く事もできますが、
失敗や例外時を考えると別ファイルに転送するのが無難だと思います。



741 名前:sage :2006/05/10(水) 17:42:55
画像の高さと幅の情報だけを取得したいのですが、
そのような API はありますか

742 名前:デフォルトの名無しさん :2006/05/10(水) 17:58:35
ありません。

743 名前:デフォルトの名無しさん :2006/05/10(水) 18:05:27
ファイルを読み込むAPIだけでいける。
あとはヘッダ部分の調べれば完了。

744 名前:デフォルトの名無しさん :2006/05/10(水) 18:16:10
>>738
_

745 名前:デフォルトの名無しさん :2006/05/10(水) 19:11:07
>>741

>>743さんの追記で
BITMAPFILEHEADER構造体,BITMAPCOREHEADER構造体を
ビットマップファイルの先頭部分からReadFile関数で取得するの。


746 名前:デフォルトの名無しさん :2006/05/10(水) 20:15:39
アプリの実行者がAdmin権限かUser権限かを判定するにはどうすればいい?
Adminでログインしたユーザにだけ実行を許可するようにしたいんだけど。

747 名前:デフォルトの名無しさん :2006/05/10(水) 20:25:09
「'_tagNN ( *)[16]' 型は '_tagNN *' 型に変換できない」
って警告が出たんだけど、どうすれば回避できる?
(NN*)ってキャストすれば無理やりには出来るんだけど、その後の動作に支障が有りそうだし、
警告を避ける正しいやりかたが知りたいです。

教えてー

とりあえずソース
{
  NN* s;
  s = new NN[10][10];
  delete []s;
}

748 名前:デフォルトの名無しさん :2006/05/10(水) 20:26:53
Admin権限とは、プロセスのユーザがAdministratorsグループに
属していると考えればいいのか?それとも、セキュリティポリシーで
何らかのユーザ権利が割り当てられているものと考えるべきか。

749 名前:デフォルトの名無しさん :2006/05/10(水) 20:28:58
NN*s;を NN (*s)[10];にしろと言われている気がする。

750 名前:747 :2006/05/10(水) 20:35:00
うあ、ホントだ!
サンクス!

でもなんだこれは?
(NN[10])へのポインタってこと?
勉強不足だなぁ・・・
勉強します。頑張ります。


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