Win32API質問箱 Build75

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
スレ立てるまでもない、Win32APIのついての質問はこちらへどうぞ。
やさしいお兄さんやお姉さんたちが答えてくれるかも。
「知らないならレスしないで下さい。ウザイだけです。 」なんて言わないでねっ!

過去スレ、関連リンクは>>2-10くらい。

■注意
・質問する前にMSDNライブラリやPlatformSDK、Google等で検索しましょう。
・日本語版MSDN Online Libraryは不完全です。英語版(http://msdn2.microsoft.com/library/)の利用推奨。
・APIフックなど高度な事をしたい場合はできるだけAdvenced Windowsを読みましょう。
・言語特有の問題やIDE、MFCやVCLなどの質問はそれぞれの言語や開発環境スレで

- Win32API質問箱 wiki
http://wiki.livedoor.jp/program1/d/FrontPage

Win32API質問箱 Build74
http://pc11.2ch.net/test/read.cgi/tech/1229239827/
2デフォルトの名無しさん:2009/01/08(木) 23:07:00
3デフォルトの名無しさん:2009/01/08(木) 23:07:11
- Google 聞く前に検索
http://www.google.com/

下記サイトは、違っている事もあるので参考程度にしよう!
流れを参考にしながら、APIの仕様を読めば使えるはず。

- 猫でもわかるプログラミング
http://www.kumei.ne.jp/c_lang/
- Win32 API入門
http://wisdom.sakura.ne.jp/system/winapi/
- Win32 プログラミング入門
http://www7.plala.or.jp/keny01/
●Win32API(C言語)
http://www.geocities.jp/ky_webid/win32c/
- Advanced Windows 第5版(書籍)
http://www.amazon.co.jp/dp/4891005920
4デフォルトの名無しさん:2009/01/08(木) 23:07:50
5デフォルトの名無しさん:2009/01/08(木) 23:08:07
6デフォルトの名無しさん:2009/01/08(木) 23:08:18
7デフォルトの名無しさん:2009/01/08(木) 23:08:49
ガソリンの味がするコーヒーを飲み干しながら立てましたわ
8デフォルトの名無しさん:2009/01/08(木) 23:13:00
9デフォルトの名無しさん:2009/01/09(金) 00:26:05
下記サイトは、違っている事もあるので参考程度にしよう!
流れを参考にしながら、APIの仕様を読めば使えるはず。

- 猫でもわかるプログラミング
http://www.kumei.ne.jp/c_lang/
- Win32 API入門
http://wisdom.sakura.ne.jp/system/winapi/
- Win32 プログラミング入門
http://www7.plala.or.jp/keny01/
●Win32API(C言語)
http://www.geocities.jp/ky_webid/win32c/
- Advanced Windows 第5版(書籍)
http://www.amazon.co.jp/dp/4891005920


Advanced Windowsってダメダメなの?
10デフォルトの名無しさん:2009/01/09(金) 00:30:30
NTFSに特化したやり方でいちいちルートからファイルリストを舐めていかないで
超高速にHDDのファイルリストを取得する技があるって聞いたんですが
具体的にどうやればいいんでしょうか?
11デフォルトの名無しさん:2009/01/09(金) 00:31:15
NTFSを自前で読む
12デフォルトの名無しさん:2009/01/09(金) 02:09:30
>>1
13デフォルトの名無しさん:2009/01/09(金) 05:17:11
>>1
14名無し募集中。。。:2009/01/09(金) 05:51:23
     /:.:.:.:.l:.:.:.:.:.:.:.:.:.:l:.:lヽ.:.:.:.:.:ハ:.:.:l:――‐--――ヘ
    ,':.:.:.:.:.:l、:.:.:.:.:.:.:.:.ト、!ハト、:.:.:.:',:.:l:.:..: : : : : : : :: : : : 〉
   /:l:.:.:.:.:.:.l ヽト、:.:.:.:.l /ィ云ミl:.:.:.:.l:.:ト――――ァ´:./
   ,':.:.l:l:.:.:.:N,≧z-ヽ、l ゛弋ィリ l:.:.:.:.:l/      /: :/
   !:.:.:l:l:.:.:.:l〈弋ィ}       lイ:.:.:.l     /: : : /     ,、
   !:.:.:N:.:.:.:ヽ、´    、      !:.:ハ!     /: : : /     }: :ヽ
.  l:.:.:.:.:lヽ、:ヘヽ    r‐、  ,イ:./  __ /: : : 〈___/: : : 〉
.  l:.:.:.:.:l  ヽ、 ` - ...__  ̄ ./ l:.ムィ    \: : : : : : : : : : : : /
.  !:.:.:.l:.!   `ヽ{   !  ̄  _..イ−{      ` ̄ ̄ ̄ ̄ ̄
  l:.:.:.:.l:l    _, -ィ}  / /−ム-    / これは>>1乙じゃなくて
  l:.:.:.:.l:l  /  /-/‐    /,−く-、    l  ツインテールなんだからな!
  l:.:.:.:.l:l /   /−{    / {   }, ヽ.  l  勘違いするんじゃないよ!
15デフォルトの名無しさん:2009/01/09(金) 12:45:34
>>9
10スレぐらい過去スレ眺めてみたけどAdvancedWindowsは誰一人叩いてないのにな
誰だよ
16デフォルトの名無しさん:2009/01/09(金) 13:03:37
     ::|
     ::|    ____
     ::|.  ./|=|    ヽ.    ≡三< ̄ ̄ ̄>
     ::|. / |=|  o  |=ヽ     .≡ ̄>/
     ::|__〈 ___  ___l   ≡三/ /
     ::|、ヽ|.|┌--、ヽ|/,-┐|    ≡/  <___/|
     ::|.|''''|.\ヽ--イ.|ヽ-イ:|  ≡三|______/
     ::|.ヾ |.::. .. ̄ ̄| ̄ /
     ::|  ';:::::┌===┐./
     ::| _〉ヾ ヾ二ソ./       こ、これは>>1乙じゃなくてスラッガーなんだから
     ::||ロ|ロ|  `---´:|____    変な勘違いしないでよね!
     ::|:|ロ|ロ|_____/ロ|ロ|ロ,|`ヽ
     ::| |ロ|旦旦旦旦旦/ロ/ロ|旦,ヽ
     ::|ロヽ 旦旦旦旦旦./ロ,/|::旦旦)
     ::|ヾ旦旦旦旦旦旦,,,/::::|、 旦旦|
17デフォルトの名無しさん:2009/01/09(金) 13:53:37
>>9>>15
●がついてるサイトの事だろ
18デフォルトの名無しさん:2009/01/09(金) 14:41:07
VC8では、pdbを生成せずにイメージにデバッグ情報を付加することはできますか?
19デフォルトの名無しさん:2009/01/09(金) 14:41:56
VCスレへどうぞ
20デフォルトの名無しさん:2009/01/09(金) 14:48:25
どもです。そうします
21デフォルトの名無しさん:2009/01/09(金) 15:43:51
イメージにデバッグ情報を付けてると公開する時カコワルイぞw
22デフォルトの名無しさん:2009/01/09(金) 16:33:17
アプリケーション上から、マルチCPUのON/OFFを制御したいのですが、そのようなAPIをご存知の方教えて頂けないでしょうか?具体的には、

タスクマネージャ - プロセス - 関係の設定(プロセッサの関係)

にて、できる操作と同様に、あるプロセスに対して、CPUを1つにしたり、2つにしたりしたいのですが、方法が分かりませんでした。
23デフォルトの名無しさん:2009/01/09(金) 16:36:33
セットプロセスアフィニティマスク
24デフォルトの名無しさん:2009/01/09(金) 16:39:53
なんでカタカナ?
25デフォルトの名無しさん:2009/01/09(金) 16:48:00
test
26デフォルトの名無しさん:2009/01/09(金) 16:50:05
なんのtest?
27デフォルトの名無しさん:2009/01/09(金) 16:52:22
test
28デフォルトの名無しさん:2009/01/09(金) 16:58:19
何でお前存在してるの?
29デフォルトの名無しさん:2009/01/09(金) 17:08:08
         / ̄ ̄\
       / _ノ ヽ_ \
       | ミ(⌒)(⌒)彡                                / ̄ ̄ ̄\
      | *(__人__)*:|                                /  ⌒  ⌒ \
       |   ` ⌒´  |                               / ミ(>)   (●)彡 ((\
        |        |                                 |     (__人__)   |゙)〈〈ヽ、
         ヽ    ノ                              \    ` ー ´   /と'  ; )
     /⌒<>★<>、                                   `>        <´  `i 〜|
     /  /    o  )l            /  ̄ ̄ ̄\            /⌒ヽ<>★<>⌒ヽ /  .|
    / / |   o  |. |         /   ⌒  ⌒ \              |   |    o  )  ソ   /
   _/ ,,/ ノ       ヽ.|           / ミ(●)  (●)彡              |   |.   o  |\   ,/
 rと二ソ ノ'〜'〜'〜'〜ゞっァ     |  ::⌒(__人__)⌒:|           ノ   ノ       |   ̄
      ん'〜'〜'〜'〜ゝ         \    `ー'  /          〆  /          \
        |   ィ /           /⌒<>★<>ヽ           `〜"〜ヽ〜ヽ〜ヽ〜ヽ
        |  / /               /  ソ   o   \\               |    ィ  |
         |=|=/           r;と_,ノ〜'〜'〜'〜'〜、_゙っァ          |    /   /
.         |   |  |                ⌒(   Y  ノ~´                  |   ノ  丿
        |   |,  |                  丿=/=/                 |==|==|
.      |,___)__`)              ヘ__ハ_)                 |"___) __)
30デフォルトの名無しさん:2009/01/09(金) 17:09:58
貼ろうと思っても躊躇するだろ…常識的に考えて…。
31デフォルトの名無しさん:2009/01/09(金) 18:35:52
常識的に考えるなってこった
32デフォルトの名無しさん:2009/01/09(金) 20:06:20
常識の枠に囚われてはいけないのですね、わかります
33デフォルトの名無しさん:2009/01/09(金) 20:19:37
>>1乙なんです ゚。, ☆ ゚. + 。 ゚ ,。・ .
      (;><)   .  +。 . 。゚.・ o.゚ *。 ゚.+
    l^ヽ'"'"~/^i'ツ'∧ ∧
  ヾ        'ミω‘ * ) )) もふもふぽ・・・♪
  ミ  ´ ∀ `  と,   ヽ
  ッ       _   "ミ__)。 . ゚. ☆。゚.・ o.゚
 (´彡,.     (,,_,ノ  _ヽ_)_) ゚. 。゚.・ o *
       ゚。, ☆ ゚. + 。 ゚ ,。・ . 。  ,.。
34デフォルトの名無しさん:2009/01/10(土) 03:54:37
MultiByteToWideCharってバッファが小さいと失敗するのか
_TRUNCATEみたいなフラグ用意しとけばいいのに、使えねーなもう
35デフォルトの名無しさん:2009/01/10(土) 04:29:33
予めサイズ0で呼び出して、必要なバッファを確保するのが作法だろ。

/*
 * caller must free()
 */
wchar_t *SjisToUnicode(const char *str)
{
    int size = ::MultiByteToWideChar(CP_OEMCP, 0, str, -1, NULL, 0);
    if(!size) return NULL;
    wchar_t *p = (wchar_t *)malloc(sizeof(wchar_t)*size);
    if(!p) return NULL;
    ::MultiByteToWideChar(CP_OEMCP, 0, str, -1, p, size);
    return p;
}
36デフォルトの名無しさん:2009/01/10(土) 04:52:20
作法とかじゃなくてさ、エラーメッセージに使う場合なんかだと256文字程度で十分だろ
そのSjisToUnicodeとやらで100万文字のバッファが確保されると馬鹿でかいメッセージボックスが出る羽目になる

そもそも、バッファが小さいと失敗するAPIもあれば途中までコピーしてくれるAPIもあったり統一性無さすぎ
37デフォルトの名無しさん:2009/01/10(土) 05:02:58
嫌なら使うなボケ
38デフォルトの名無しさん:2009/01/10(土) 05:05:23
逆に「失敗してくれよ!」と思うAPIもあるよ。ファイルパス関係とか。

例えば、GetModuleFileNameなんて、バッファが小さいと
お節介にもバッファに収まる範囲までコピーしてくれて、
しかも終端のnullを付けないというおバカ仕様
おまけにサイズ0で呼び出しても必要なサイズが得られないしw

こういう糞APIを目の当たりにするとMSのプログラマって頭悪いなーって思う。
39デフォルトの名無しさん:2009/01/10(土) 05:11:24
何から何に変換するかわかってるんだから、元のサイズから最大でいくつになるかわかるだろう。
40デフォルトの名無しさん:2009/01/10(土) 05:12:09
>>38
msdn見たらvista以降では直ってるみたい
まさに「仕様という名のバグ」
41デフォルトの名無しさん:2009/01/10(土) 05:17:26
>>39
元のサイズがわからない事だってあるよ
頭悪いねキミ
42デフォルトの名無しさん:2009/01/10(土) 05:36:29
SHAnsiToUnicodeはtruncateするらしいよ
シェル開発チームの中の人も不便に感じたのだろうなあ
43デフォルトの名無しさん:2009/01/10(土) 06:13:41
そもそもWin32はWin16からも仕様を引きずってきちゃってるわけで
今更なに言ってんだかって話だなw
44デフォルトの名無しさん:2009/01/10(土) 07:16:47
>>43
知らないならレスしないでください。ウザイだけです。
45デフォルトの名無しさん:2009/01/10(土) 07:21:18
>>43
ゆとり臭が物凄いんですが・・・
46デフォルトの名無しさん:2009/01/10(土) 08:14:43
.net使うという選択肢は出てこないんだな
47デフォルトの名無しさん:2009/01/10(土) 08:32:53
ネットなら毎日使ってるが。
48デフォルトの名無しさん:2009/01/10(土) 11:18:09
小回りが利かない.netはパス
49デフォルトの名無しさん:2009/01/10(土) 12:27:43
たいてい、そんな小回りは必要なくないか?
50デフォルトの名無しさん:2009/01/10(土) 12:45:05
EnumWindowsで躓くから嫌です
51デフォルトの名無しさん:2009/01/10(土) 16:17:59
.netってウィンドウのサブクラス化がやたら面倒じゃないか?
スーパークラス化は継承だけでできるけど
52デフォルトの名無しさん:2009/01/10(土) 16:21:25
ドトネトがわかってない素人なのはわかった
53デフォルトの名無しさん:2009/01/10(土) 16:23:55
>>51
リストコントロールのItemChangedでメッセージが3連発くるとか無駄に面倒な部分は
.netで改善されたの?
54デフォルトの名無しさん:2009/01/10(土) 16:29:11
逆汗、逆コンパイルが簡単にできすぎ
シェアウエア作ったら一時間でクラックされそうw
55デフォルトの名無しさん:2009/01/10(土) 16:30:07
大丈夫
君のプログラムはクラックしたくなる程の魅力が無いから
56デフォルトの名無しさん:2009/01/10(土) 16:32:46
<STOP> スレ違い ここまで <STOP>
57デフォルトの名無しさん:2009/01/10(土) 16:34:19
<RESTART> スレ違い ここから <RESTART>
58デフォルトの名無しさん:2009/01/10(土) 16:34:27
>.netってウィンドウのサブクラス化がやたら面倒じゃないか?
>スーパークラス化は継承だけでできるけど

>.netってウィンドウのサブクラス化がやたら面倒じゃないか?
>スーパークラス化は継承だけでできるけど

>.netってウィンドウのサブクラス化がやたら面倒じゃないか?
>スーパークラス化は継承だけでできるけど
59デフォルトの名無しさん:2009/01/10(土) 16:36:54
とりあえず、サブクラス化と継承は関係なくね?
60デフォルトの名無しさん:2009/01/10(土) 16:38:18
.netの方法でできないって意味で言ったんだけど
Win32でWindowProc書くのと大差無い方法でできてもねぇ・・・
61デフォルトの名無しさん:2009/01/10(土) 16:41:55
サブクラス化を知らないならレスしないでください
62デフォルトの名無しさん:2009/01/10(土) 16:43:49
>>60
NativeWindowクラス継承すれば一発
10行で書けるが?
63デフォルトの名無しさん:2009/01/10(土) 16:45:27
>>62
馬鹿?その先が面倒だろ
WM_〜や構造体を定義しなくてはならないしポインタへのアクセスだってあるだろ
素直にWin32で作った方が楽だよ
64デフォルトの名無しさん:2009/01/10(土) 16:47:11
派生クラスでWndProcオーバーライドするだけなのにWinAPIと大差無いとか言われてもねえ
65デフォルトの名無しさん:2009/01/10(土) 16:48:27
<STOP> スレ違い ここまで <STOP>
66デフォルトの名無しさん:2009/01/10(土) 16:50:36
話を理解してない馬鹿が多くて困るぜ
67デフォルトの名無しさん:2009/01/10(土) 16:52:35
<STOP> スレ違い ここまで <STOP>
68デフォルトの名無しさん:2009/01/10(土) 16:53:38
凝った事をしようとすると低レベルAPIの方が楽なのは当然じゃん。
これだから頭固いオッサンは困るんだよ。
69デフォルトの名無しさん:2009/01/10(土) 17:00:01
<STOP> スレ違い ここまで <STOP>
70デフォルトの名無しさん:2009/01/10(土) 17:01:29
スレ違いだからやめろというのは分かるが1レス置きに書かなくてもなぁ・・・
71デフォルトの名無しさん:2009/01/10(土) 17:02:07
ageちゃったごめん
72デフォルトの名無しさん:2009/01/10(土) 17:02:24
お、盛り上がってるなw

MAX_PATH vs 長いファイル名
Win32 vs .NET

この辺りはもはや定番だな
73デフォルトの名無しさん:2009/01/10(土) 17:04:09
もうだめだこのスレ
74デフォルトの名無しさん:2009/01/10(土) 17:08:40
ファイルサイズだけを取得したい場合
GetFileSizeを使うよりFindFirstFileを使った方が効率的なのでしょうか?
75デフォルトの名無しさん:2009/01/10(土) 17:10:09
もうだめだこのスレ
76デフォルトの名無しさん:2009/01/10(土) 17:11:27
もうだめだこのスレ
77デフォルトの名無しさん:2009/01/10(土) 17:13:12
>>74
何を効率化したいの?実行時間?コードサイズ?書く手間?
実際に両方やってみりゃいいじゃん
78デフォルトの名無しさん:2009/01/10(土) 17:15:01
>>77
実行時間です
7974:2009/01/10(土) 17:42:42
とりあえず、API呼ぶ回数が少なくて済むFindFirstFile使うことにしました
80デフォルトの名無しさん:2009/01/10(土) 17:50:30
呼ぶ回数が少なくても遅くなったら意味なし

実際どうかは知らんが
81デフォルトの名無しさん:2009/01/10(土) 17:50:41
というか共有違反でオープンできない可能性を考慮するとFindFirstFileが妥当なんだが。
82デフォルトの名無しさん:2009/01/10(土) 18:07:38
>>80
そこが知りたくて質問してみたんだ
誰か知っている人いないかな

>>81
ファイルサイズを知るって事だけが目的妥当そうですね
今作っているのはサイズ取得後そのファイルをMoveFileするので
先に共有違反とかがわかるのも良いかもしれない
まあ、自分で使うツールを作っているので細かいのはどっちでも良いか
83デフォルトの名無しさん:2009/01/10(土) 18:10:19
ケースバイケースか。普通はFindFirstFileだろうが、こんな落とし穴が。
ttp://support.microsoft.com/kb/961110
84デフォルトの名無しさん:2009/01/10(土) 18:10:31
コーディングの手間を考えたらFindFirstFile()一択だな

手間=バグの入る余地が増える
85デフォルトの名無しさん:2009/01/10(土) 18:13:34
>>83
そんな問題があるのか!
これから使うときは気をつける必要があるな
8674:2009/01/10(土) 18:19:05
>>83
NTFSログファイルのサイズを増やすと発生しにくくなるって書いてあるけど
HDD残り500Mくらいで使ってるから発生しやすいのかな
とりあえず、ファイルサイズがつじつま合わなくなったらこれを疑ってみます
87デフォルトの名無しさん:2009/01/10(土) 18:36:12
>>86
>>83のリンク先にあるように、コマンドプロンプトから
chkdsk C: /L
で現在/最大のログサイズが分かる
88デフォルトの名無しさん:2009/01/10(土) 18:44:21
また「仕様という名のバグ」か。
8974:2009/01/10(土) 18:46:45
>>87
現在のログ ファイル サイズは 65536 KB です。
このボリュームの既定のログ ファイル サイズは 65536 KB です。
と言われた俺はこの現象出る可能性大!?
90デフォルトの名無しさん:2009/01/10(土) 18:50:39
逆にどんな風に出るか動作確認が出来る

と考えればおk!

うちのDドライブもそうなってたけど<満タン
9183:2009/01/10(土) 18:50:42
いや、単なるバグだろ。まったくなにやってんだっての。
92デフォルトの名無しさん:2009/01/10(土) 18:52:04
>>89-90
規定=初期設定(パーティション作成直後)だろ。
自分でchkdsk /Lで変えない限り規定のままだったはず。
93デフォルトの名無しさん:2009/01/10(土) 19:00:32
FindFirstFileはファイル時刻の更新で時差が出るから
現在の正確な情報はGetFileInformationByHandleで取れ
って結構前からMSDNに載ってたはずだが
邦訳MSDNには載ってない謎
94デフォルトの名無しさん:2009/01/10(土) 19:03:32
ごめん時刻に限らず全部だった
9590:2009/01/10(土) 19:04:24
>>92
残念、うちのCドライブは
現在のログ ファイル サイズは 54512 KB です。
このボリュームの既定のログ ファイル サイズは 65536 KB です。
と出てる
96デフォルトの名無しさん:2009/01/10(土) 20:38:06
>>95
何らかのソフトがログファイルのサイズを変えたのだろ
市販のデフラグソフトとか
97デフォルトの名無しさん:2009/01/10(土) 20:41:30
あと、パーティションの空き領域が不足したらMFTやメタファイルの予約領域が縮小されるから
それも関係してるかもな
9890:2009/01/10(土) 20:42:35
>>96
mjd!?

うわぁ、分かりづらい仕様だな・・・
てか、それならchkdskのあの表示は意味無いじゃん

結局GetFileSize()の方が安全ってことだな
99デフォルトの名無しさん:2009/01/10(土) 20:57:49
パーティションサイズの0.5%と65536KBの小さい方が既定のサイズになってる気がする。
100デフォルトの名無しさん:2009/01/10(土) 23:00:31
fseek(mF,0,SEEK_END);
mSize = ftell(mF);
fseek(mF,0,SEEK_SET);

でやあああああああああああ!
101デフォルトの名無しさん:2009/01/10(土) 23:06:04
フォルダの監視を行う処理を作ろうと思っているのですが、
ファイルが削除されたのはプログラム内でフォルダの直前の情報を保存しておいて
比べるしかないですか?
102デフォルトの名無しさん:2009/01/10(土) 23:11:58
なんかあったぞ、と俺の記憶が言っているが
それが何を使えばいいかは覚えてないw
103デフォルトの名無しさん:2009/01/10(土) 23:14:40
FindFirstChangeNotification
これかなぁ?
おかしい・・・たしかあった気がするがまるで記憶がないw
104デフォルトの名無しさん:2009/01/10(土) 23:15:59
ReadDirectoryChangesAだろ
105デフォルトの名無しさん:2009/01/10(土) 23:22:47
A なんかないだろ
106デフォルトの名無しさん:2009/01/10(土) 23:26:45
検索したら7件でてきたw
Aとったら3件www

Wがデフォなのか。
107デフォルトの名無しさん:2009/01/10(土) 23:36:52
WがついてるくせにAが無いという変なAPI
実はWatchの略なのか?
108デフォルトの名無しさん:2009/01/10(土) 23:40:40
知らレス
109デフォルトの名無しさん:2009/01/10(土) 23:52:20
W=(笑)にきまってるだろjk
110デフォルトの名無しさん:2009/01/11(日) 00:10:08
知らないならレスしないでください。ウザイだけです。
111デフォルトの名無しさん:2009/01/11(日) 00:11:50
知らレスウザです。
112デフォルトの名無しさん:2009/01/11(日) 00:13:11
srud
113デフォルトの名無しさん:2009/01/11(日) 00:14:19
srud( >>109 )
114デフォルトの名無しさん:2009/01/11(日) 00:16:20
std::srud(const Res& uza);
115デフォルトの名無しさん:2009/01/11(日) 00:30:08
新規APIのうち、かつて9xと共通だったコンポーネントはWのみで、
最初からNTのみのコンポーネントはWが無くてLPCWSTRとかキメ打ちなんだよ。
今俺が考えたんだけどね。
116デフォルトの名無しさん:2009/01/11(日) 00:32:05
srud( >>115 )
117デフォルトの名無しさん:2009/01/11(日) 00:40:15
何か面白そうなのが来た。

Microsoft Windows SDK for Windows 7 and .NET Framework 3.5 SP1: BETA
http://www.microsoft.com/downloads/details.aspx?FamilyID=A91DC12A-FC94-4027-B67E-46BAB7C5226C&displaylang=en
118デフォルトの名無しさん:2009/01/11(日) 00:44:09
マイクロソフトCEO、次期OSは「最高のウィンドウズ」と
http://www.cnn.co.jp/science/CNN200901090016.html
> 現行OS「Vista」の改良は中止する方針のもようだ。
119デフォルトの名無しさん:2009/01/11(日) 00:45:44
Vista厨涙目\(^o^)/
120デフォルトの名無しさん:2009/01/11(日) 01:08:45
っていか新機能は新しいバージョンにしか載せないというのはいつも通りのことだろ。
121デフォルトの名無しさん:2009/01/11(日) 01:10:29
GetPrivateProfileStringって大きすぎるバッファを指定すると読み込めなくなるの?
98seで動かしてたら0x000000ffの大きさのバッファなら受け入れてくれたのに0x00010000の大きさのバッファ指定したら値をバッファに格納してくれなくなった……

16の遺産だからだろうか?
122デフォルトの名無しさん:2009/01/11(日) 01:13:11
レジストリエントリは最大サイズがあった気がするが
123デフォルトの名無しさん:2009/01/11(日) 01:25:31
多分、0x000100ffなら動くと思うよ。w

http://support.microsoft.com/kb/78346/EN-US/
If an application uses the standard Windows application program
interface (API) calls to access the .INI files, the limit is 64K.
Examples of these standard API calls are GetPrivateProfileString()
and WritePrivateProfileString().
124デフォルトの名無しさん:2009/01/11(日) 01:25:32
今時GetPrivateProfileなんて使うなよ
125デフォルトの名無しさん:2009/01/11(日) 02:28:59
そんな制限9xだけだろ
126デフォルトの名無しさん:2009/01/11(日) 02:31:45
MoveFile("\\\\remote\\file.txt", "\\\\remote\\file2.txt");
ってやった場合remoteから一回実行したPCにファイルデータが送られて
その後またremoteに書き込むの?
127デフォルトの名無しさん:2009/01/11(日) 11:16:47
でかいファイルで試してネットワークトラヒックでも監視すれば?
128デフォルトの名無しさん:2009/01/11(日) 13:17:48
トラヒック
129デフォルトの名無しさん:2009/01/11(日) 13:29:52
ディジタル
130デフォルトの名無しさん:2009/01/11(日) 13:32:41
>>128
あなたは知らないのだろうけど
通信業界では、トラヒックという言葉を使うのだそうですよ。
131デフォルトの名無しさん:2009/01/11(日) 13:34:23
ヒューズ
132デフォルトの名無しさん:2009/01/11(日) 13:39:10
>>127-131
黙れ
133デフォルトの名無しさん:2009/01/11(日) 13:42:06
知らレスウザです。
134デフォルトの名無しさん:2009/01/11(日) 13:46:22
srud(>>130);
135デフォルトの名無しさん:2009/01/11(日) 14:36:04
もうだめだこのスレ
136デフォルトの名無しさん:2009/01/11(日) 14:42:31
元からだろ。
137デフォルトの名無しさん:2009/01/11(日) 15:01:21
知らないならレスしないでください。ウザイだけです。
138デフォルトの名無しさん:2009/01/11(日) 16:48:52
>>132.LifeState = Life::DEATH;
139デフォルトの名無しさん:2009/01/11(日) 17:01:40
srud( mdks ){
mkdr();
}
140デフォルトの名無しさん:2009/01/11(日) 18:27:38
デスクトップのタスクバーを除いた作業領域の大きさを求めるのにはどのようにすればいいのでしょうか。
画面サイズを求めるのは簡単にできたのですが・・・
141デフォルトの名無しさん:2009/01/11(日) 18:33:30
polygonを利用したいのですが、ベクターで動的配列として確保を行って渡したところ変換できない。
というエラーが出てしまうのですがVectorで動的に確保した物は配列として渡す事はできないのでしょうか?
142デフォルトの名無しさん:2009/01/11(日) 18:33:37
教えてあげないよっ!ジャン!
143デフォルトの名無しさん:2009/01/11(日) 18:34:47
>>140
タスクバーのサイズも取得して引けばいいじゃない
144デフォルトの名無しさん:2009/01/11(日) 18:37:20
>>141
先頭が大文字だからSTLのvectorとは違うんだろうな。
Vectorとやらの仕様による。
145デフォルトの名無しさん:2009/01/11(日) 18:41:18
>>144
C++の標準ライブラリの方のvectorです。。。
先頭大文字にしちゃうの癖なんです、すいません。。。
146デフォルトの名無しさん:2009/01/11(日) 18:41:43
>>140
SystemParametersInfoとSPI_GETWORKAREAのことかな。
147デフォルトの名無しさん:2009/01/11(日) 18:42:19
>>141
&v[0]のようにする
148デフォルトの名無しさん:2009/01/11(日) 18:43:35
>>146
なに教えてんだよ!
このスレは教えちゃいけないんだぞ!
149デフォルトの名無しさん:2009/01/11(日) 18:44:40
>>147
できました、ありがとうございます
150デフォルトの名無しさん:2009/01/11(日) 18:48:29
>>148
さすがの俺もその発言は引くわぁ
151デフォルトの名無しさん:2009/01/11(日) 18:56:41
>>148
それはないわ
152デフォルトの名無しさん:2009/01/11(日) 18:58:32
.NETに移行させようと必死になってないでどんどん教えろカス
153デフォルトの名無しさん:2009/01/11(日) 18:59:19
うんこに餌を与えないで下さい
154デフォルトの名無しさん:2009/01/11(日) 19:08:08
スレ違いを咎めるならむしろvectorの方だと思うけどw
155デフォルトの名無しさん:2009/01/11(日) 19:12:09
今時SystemParametersInfoなんかで手抜きするな。
ちゃんとEnumDisplayMonitors+GetMonitorInfo使え
156デフォルトの名無しさん:2009/01/11(日) 19:29:07
>>155
Windows95で動かないので却下
157デフォルトの名無しさん:2009/01/11(日) 19:33:13
今時、WIndows 95かよ。。。
158デフォルトの名無しさん:2009/01/11(日) 19:33:44
Iにつっこむの禁止
159デフォルトの名無しさん:2009/01/11(日) 20:30:48
Iをつっこむのは?
160デフォルトの名無しさん:2009/01/11(日) 20:31:36
>>156
両方作っておいて、環境によってどっちかを選ぶようにすればいい。
161デフォルトの名無しさん:2009/01/11(日) 20:31:43
Wii ndows 95
162デフォルトの名無しさん:2009/01/11(日) 20:43:12
( ゚∀゚)アハハ八八ノヽノヽノヽノ \ / \/ \
163デフォルトの名無しさん:2009/01/11(日) 21:49:51
お前ら脱線しすぎ!

いいぞもっとやれw
164デフォルトの名無しさん:2009/01/11(日) 22:00:32
まぁ、WiiでWindows動かすのは誰かがやるだろうな
ガワだけだろうけど。
165デフォルトの名無しさん:2009/01/11(日) 22:32:16
退屈じゃのう
166デフォルトの名無しさん:2009/01/11(日) 22:35:52
>>165
お前が引き篭もってるからだろ
働けクズ
167デフォルトの名無しさん:2009/01/11(日) 22:41:58
質問いいですか?
CopyMemoryとmemcpyが同じように思えるのですが、どちらを使うのがいいの?
168デフォルトの名無しさん:2009/01/11(日) 23:09:45
少なくともWin32/Win64では同じだから好きにしろ
169デフォルトの名無しさん:2009/01/11(日) 23:17:52
同じですか!ありがとうございました!
170デフォルトの名無しさん:2009/01/11(日) 23:31:46
知ってるならレスしないで下さい話が終わってしまいます
171デフォルトの名無しさん:2009/01/11(日) 23:45:17
じゃあ・・・
同じ内容の関数がなぜ二つあるのですか?初心者が混乱してしまいます。
172デフォルトの名無しさん:2009/01/11(日) 23:49:50
初心者がどちらかを発見できれば使えるだろ
173デフォルトの名無しさん:2009/01/11(日) 23:52:08
memcpy_s使えよ
174デフォルトの名無しさん:2009/01/12(月) 00:03:03
どうでもいい話としては環境とかランタイムライブラリによって
CopyMemoryとmemcpy の実行速度が違うことがあるね。
コピーのループ内で一度にmovされるデータ長が違うとか
そんなもんだろか?よくわからん。
175デフォルトの名無しさん:2009/01/12(月) 00:05:18
ベンチマークしたら差はなくなると思うよ
176デフォルトの名無しさん:2009/01/12(月) 00:08:30
そもそも
#define CopyMemory RtlCopyMemory
#define RtlCopyMemory(Destination,Source,Length) memcpy((Destination),(Source),(Length))
なんだけどな。
177デフォルトの名無しさん:2009/01/12(月) 00:10:54
>>176
MS以外のCだと、また違うことがあるのさ
178デフォルトの名無しさん:2009/01/12(月) 00:13:02
へえ、どれ?
179デフォルトの名無しさん:2009/01/12(月) 00:17:21
SDKで定義されてるのに違うとかw
180デフォルトの名無しさん:2009/01/12(月) 01:36:32
#define RtlCopyMemory memcpy
#define CopyMemory RtlCopyMemory

ちなみにMinGWでも同じ
181デフォルトの名無しさん:2009/01/12(月) 19:25:26
VBなんかだと実体をRtlMoveMemoryとしてCopyMemoryと宣言しているものをたまに見かける。
182デフォルトの名無しさん:2009/01/12(月) 19:54:37
VBはC++と違って、本当にAPIを呼ばざるを得ないからな。

って、今気づいたのだが、
もしかして、Windows7用のSDK付属のDocumentExplorerには
ページ単位でのホイールスクロールバグの修正が入った?
何か普通に落ちなくなってる。
183デフォルトの名無しさん:2009/01/12(月) 20:05:36
VBなんて糞言語どうでもいいよ
それより、違うことがあるMS以外のCマダー?>>177
184デフォルトの名無しさん:2009/01/12(月) 20:11:07
>>183
Borland C++ Compiler は ifdef になってるから別のものになる可能性があるかも

こんなの
#define CopyMemory RtlCopyMemory

NTSYSAPI
VOID
NTAPI
RtlCopyMemory (
VOID UNALIGNED *Destination,
CONST VOID UNALIGNED *Source,
SIZE_T Length
);
185デフォルトの名無しさん:2009/01/12(月) 20:13:22
VCでも、Alpha だか MIPS ではそうじゃなかったっけ?
186デフォルトの名無しさん:2009/01/12(月) 20:23:42
alignが必要なCPUではRtlCopyMemoryが用意されている
x86はそんなの必要無いからCRTのmemcpyと等価になっている
187デフォルトの名無しさん:2009/01/12(月) 23:01:55
ツールバーのTBSTYLE_LISTスタイルの有無を動的に切り替えたいんだけど
反映させるにはどうしたらいい?
全然うまくいかない、教えてエロイ人

//D
void SetTextPosition(HWND hToolbar, bool ListStyle) {
auto style=GetWindowLongPtr(hToolbar, GWL_STYLE);

if(ListStyle) {
style |= TBSTYLE_LIST;
} else {
style ^= TBSTYLE_LIST;
}

SetWindowLongPtr(hToolbar, GWL_STYLE, style);
SetWindowPos(hToolbar, null, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED);
}
188デフォルトの名無しさん:2009/01/12(月) 23:04:57
autoなんて型あるんだ
189デフォルトの名無しさん:2009/01/12(月) 23:07:27
>>188
コメントでD言語と言っているじゃないか。
190デフォルトの名無しさん:2009/01/12(月) 23:08:56
あくまで Win32API のスレでしかないから
言語は不問なんだな。
今まで気にした事もなかったけど。
191デフォルトの名無しさん:2009/01/12(月) 23:16:36
C++はautoとまともなfor eachを早く導入しる!

・・・後者はVC2005の独自拡張で使えるけどw
192デフォルトの名無しさん:2009/01/12(月) 23:18:06
>>191
前者はC++0xを待て。もうそろそろのはずだ。
193187:2009/01/12(月) 23:37:57
自己解決しました
みんな、反応してくれてありがとう

// 報告と参考までに
// 参照 ttp://books.google.com/books?id=8LSjRRGcXqgC&pg=PA175&vq=TBSTYLE_LIST&dq=TBSTYLE_LIST+SetWindowLong&as_brr=3&hl=ja&source=gbs_search_s&cad=0
void SetTextPosition(HWND hToolbar, bool ListStyle) {
auto style=GetWindowLongPtr(hToolbar, GWL_STYLE);

if(ListStyle) {
style |= TBSTYLE_LIST;
} else {
style &= ~TBSTYLE_LIST;
}

SendMessage(hToolbar, TB_SETSTYLE, 0, style);
}
194デフォルトの名無しさん:2009/01/13(火) 00:20:57
言語というか演算子の問題だから本当はスレ違いだけどな

まあ初心者の頃は if(style & TBSTYLE_LIST) style ^= TBSTYLE_LIST; なんて書いてたがw
195デフォルトの名無しさん:2009/01/13(火) 14:26:40
srud(>>194);
196デフォルトの名無しさん:2009/01/13(火) 17:29:20
質問です。

ウインドウの上をドラッグしたイベントをもらおうと思い

WM_LBUTTONDOWN にて、SetCapture + ドラッグ開始と解釈
WM_LBUTTONUP にて ReleaseCapture + ドラッグ終了と解釈
とやっています。

これで基本的にはウインドウ外にマウスポインタが行ってしまっても作動し、満足なのですが、
どうやらドラッグ中にAlt+Tabなどでアクティブなウインドウを変えられてしまうと、WM_LBUTTONUPが届かないようです。

これに対処するには、WM_ACTIVEなどにも対処しなければならないのでしょうか?
197デフォルトの名無しさん:2009/01/13(火) 19:19:15
>>196
ReleaseCaptureされるから当然メッセージは来なくなる。
問題になるならWM_CAPTURECHANGEDで処理する。
198デフォルトの名無しさん:2009/01/13(火) 21:33:00
ショートカット作るとアイコンにショートカットのマークがつくんですが、
このアイコンを自分で作ろうと思ったらどうしたらいいんでしょうか。

199デフォルトの名無しさん:2009/01/13(火) 22:31:53
SetParentでトップレベルのボタンコントロールを同プロセス内のウィンドウを親に設定したいんですが、
どうも関数実行後も親ウィンドウをNULLで返してきます。実際表示などもされてません。
こういうことはできないんですか?
200デフォルトの名無しさん:2009/01/13(火) 22:52:01
InterlockedExchangeAdd関数の日本語版ドキュメントを見て
「加数じゃなくて被加数じゃないのか?」「原子加算って何だ?」と突っ込んでいたが
それ以上にInterlockedExchange関数のドキュメントが突っ込み所満載だった件
201デフォルトの名無しさん:2009/01/13(火) 22:54:11
>>198
IShellLinkでググレ。
202デフォルトの名無しさん:2009/01/13(火) 23:00:44
>>201
ショートカットを作りたいんじゃなくてアイコンを作りたいんです><
203デフォルトの名無しさん:2009/01/13(火) 23:12:37
アイコンエディタってこと・・・? 違うよな・・・
204デフォルトの名無しさん:2009/01/13(火) 23:15:12
>>199
ヘルプのSetParentのとこに一杯書いてある注意書きは全部読んだ?
205デフォルトの名無しさん:2009/01/13(火) 23:18:09
>>202
ICONDIR、ICONDIRENTRYでググれ
206デフォルトの名無しさん:2009/01/13(火) 23:48:42
>>204読みました。スタイルもその通り変更するようにしてるんですが・・・

HWND Hoge::handleがある。

HWND Hoge::setParent(HWND neo){
  if(handle == NULL)return NULL;
  LONG flag = ::GetWindowLongPtr(handle,GWL_STYLE);
  HWND old;
  HWND DESKTOP = ::GetDesktopWindow();
  if( neo == NULL && ::GetAncestor(handle,GA_PARENT) != DESKTOP ){//子をトップレベルにする
    old=::SetParent(handle,NULL);
    ::SetWindowLongPtr(handle , GWL_STYLE , (flag&~WS_CHILD)|WS_POPUP );
  }else
  if( neo != NULL && ::GetAncestor(handle,GA_PARENT) == DESKTOP ){//トップレベルを子にする
    ::SetWindowLongPtr(handle , GWL_STYLE , (flag&~WS_POPUP)|WS_CHILD );
    old=::SetParent(handle,neo);
  }else
  {
    old=::SetParent(handle,neo);
  }
  return old;
}
207デフォルトの名無しさん:2009/01/13(火) 23:50:12
>>202
矢印アイコンはシェルが自分のリソースを表示してるものなのでWin32APIでは
変更できず、該当の機能をサポートするツールではshellの内部リソースを無理やり
書き換えるとかしてるらしい
(shell32.dllの30番あたり)

しかもどこのタイミングかの Windows のセキュリティアップデートで、今では
それもままならないとかの噂がある
208デフォルトの名無しさん:2009/01/13(火) 23:52:56
C:\Windows みたいなパスを
\\?\C:\Windows の形式に変換するAPIってありませんでしたっけ?
なんか前見かけた記憶があるんだけど、今探すと見つからない。
気のせいだったのだろうか。
209デフォルトの名無しさん:2009/01/13(火) 23:54:18
>>208
なんだそれ
正規表現使えばいいんじゃね?
210デフォルトの名無しさん:2009/01/14(水) 00:28:01
_stprintf(str,_T("\\\\?\\%s"),path);
でいいだろ
211デフォルトの名無しさん:2009/01/14(水) 00:30:06
いや、ちゃんとネットワークパスの場合は UNC 付けたりとか
してくれたんじゃないかと思って。
_stprintf(str,_T("\\\\?\\%s"),path); これで決め打ちしちゃっていいのかな?
212デフォルトの名無しさん:2009/01/14(水) 01:25:16
InterlockedCompareExchange関数の日本語版ドキュメントに至っては
引数の型、戻り値の型、引数の要約すら大嘘

日本語版ドキュメントがダメなのって資料不足だけを指してたわけじゃないのね
誇張された話だとばかり思ってたが反省するわ
213デフォルトの名無しさん:2009/01/14(水) 01:46:32
.NET Frameworkの方の翻訳は意外とまとも。
以前英語版と比べてみたが遜色なかったので日本語版読んでる。
Win32APIは英語版しか信用できん。
214デフォルトの名無しさん:2009/01/14(水) 01:54:17
>>212
昔はPVOIDで宣言されてたんだよ
そんな事も知らないゆとりは黙っててね
215デフォルトの名無しさん:2009/01/14(水) 02:01:13
>>212
ばーかw
216デフォルトの名無しさん:2009/01/14(水) 02:14:23
ていうか日本語MSDNは基本的にWin98時代から更新止まってるので
その時代の英語版が間違っててそのままになってるのも結構ある

そもそも.NET関係しか翻訳のメンテしないのがおかしい
217デフォルトの名無しさん:2009/01/14(水) 06:40:57
大人の事情です
218デフォルトの名無しさん:2009/01/14(水) 08:05:20
嘘だらけのMSDNで日本の生産性を下げる→アメリカ人ウハウハ
219デフォルトの名無しさん:2009/01/14(水) 08:17:01
MSKKが仕事しないのは有名な話
いや日本語版をMSKKが管理してるかどうかは知らんがMSKKが悪いって事にしとけ
220デフォルトの名無しさん:2009/01/14(水) 08:23:59
MSKKは単なる商社ですから
221デフォルトの名無しさん:2009/01/14(水) 09:12:28
VS2008スレにあったけど、アンケートやってるぞ
http://c2.microsoft.fr/49ae54c30ecc4382aeba1841073ee06b/?elng=1041

最後のほうにドキュメントについての項目がある
俺はフリーエリアに中途半端なドキュメントは有害って書いたよ
222デフォルトの名無しさん:2009/01/14(水) 09:26:54
>>202
SHGetFileInfoとSHGFI_LINKOVERLAYでなんとかならんか
223デフォルトの名無しさん:2009/01/14(水) 10:13:10
>197
ありがとうございました。
無事できました
224デフォルトの名無しさん:2009/01/14(水) 11:33:01
>>221
VS2008なんて使ってねーし・・・
225デフォルトの名無しさん:2009/01/14(水) 16:16:55
>>206分かる人いませんか・・・?
226デフォルトの名無しさん:2009/01/14(水) 16:30:16
neoって何?
227デフォルトの名無しさん:2009/01/14(水) 17:44:15
#ifdef _WIN32

って、32bitOS用としてコンパイルするときは、って意味ですか?
64bitOS用としてコンパイルするときはここは通らないと思ってOK?
228デフォルトの名無しさん:2009/01/14(水) 17:50:14
>>227
64でも通る

以下MSDNより
_WIN32 Defined for applications for Win32 and Win64. Always defined.
229デフォルトの名無しさん:2009/01/14(水) 17:52:55
>>227
64ビットでもコンパイルの対象にされる。
_WIN32は(UnixやMacではなく)Windowsであるという意味だと捉えるんだ。
Win64を除外してWin32のみを対象にしたければ、#ifndef _WIN64とすること。
http://msdn.microsoft.com/en-us/library/aa489554.aspx
230デフォルトの名無しさん:2009/01/14(水) 17:55:13
互換性考えると仕方ないが、いろいろともにょもにょ来るな。
231デフォルトの名無しさん:2009/01/14(水) 17:57:16
>>228
>>229
ども。
もひとつおねがいします。

#ifdef _WIN32
#include <pshpack1.h>
#endif

typedef struct tagHogestruct
{
...
}

#ifdef _WIN32
#include <poppack.h>
#endif

この場合、32bitでも64bitでもパッキングは1でいいんですか?
232231:2009/01/14(水) 18:03:47
ぐえ、こんなのもあった

#if !defined(_WIN64)
#include <pshpack1.h>
#endif

↑これは32bitだけですよね……
233デフォルトの名無しさん:2009/01/14(水) 18:06:43
>>226新しい親ウィンドウハンドルです。
234デフォルトの名無しさん:2009/01/14(水) 20:39:27
現在フック処理がいくつ走っているか調べることは可能でしょうか?
235デフォルトの名無しさん:2009/01/14(水) 23:10:46
ツールバーとステータスバーをウィンドウ上部に付けたいのですが、
そのままだと重なって表示されてしまいます。

ツールバーの直下にステータスバーが付いて2段になるような
回避法などありますでしょうか。

APIはCreateToobarExとCreateStatusWindowを使い
属性にはCCS_TOPを指定してウィンドウ上部にくるようにしています。
236デフォルトの名無しさん:2009/01/14(水) 23:48:04
どっちを上に置くべきかプログラム書く人にしかわからんのだから、おとなしく座標で指定する。




と俺は思う。
237デフォルトの名無しさん:2009/01/15(木) 01:25:10
無駄な改行ウザイ
238デフォルトの名無しさん:2009/01/15(木) 01:28:48
srud(236,237);
239デフォルトの名無しさん:2009/01/15(木) 08:49:24
srud関数にそんなオーバーロードがあるとは
240デフォルトの名無しさん:2009/01/15(木) 09:08:02
srud(>>239);
241デフォルトの名無しさん:2009/01/15(木) 11:38:56
スレッドが自然死した時に
GetExitCodeThread()で得られる終了コードは何になりますか?
242デフォルトの名無しさん:2009/01/15(木) 11:43:59
ExitThreadで設定した終了コード、もしくはスレッドプロシージャの返した値のいずれか
243241:2009/01/15(木) 11:57:31
>>242 ありがとうございます。 MSDNを見ても分かり辛かったので。
244241:2009/01/15(木) 12:05:02
あっ 詳細に聞きたいことを忘れてました。
スレッドプロシージャの戻り値がvoidでreturnした時に
勝手にExitThread()が呼ばれるらしいのですが
その時の終了コードは何になりますか?
度々すみません。
245デフォルトの名無しさん:2009/01/15(木) 12:05:13
自分で調べろと言おうとしたけど、そう言うなら何もう言うまい。
246デフォルトの名無しさん:2009/01/15(木) 12:08:49
_beginthreadで作成したスレッドってこと?
スレッドが終了した瞬間に、そのハンドルが再利用されて、
GetExitCodeが呼ばれる前に違うものを示す可能性があるからやめろと言いたい。
247デフォルトの名無しさん:2009/01/15(木) 13:28:02
_beginthread廃止すればいいのにねぇ
248デフォルトの名無しさん:2009/01/15(木) 13:37:18
_beginthreadの実際のTHREAD_START_ROUTINEである_threadstartの通常の戻り値は0
CreateThreadに無理矢理渡した場合は不定
249デフォルトの名無しさん:2009/01/15(木) 14:44:41
_threadstartの戻り値じゃなくて_endthreadでExitThread(0);してる
250デフォルトの名無しさん:2009/01/15(木) 16:43:45
CreateDialogParam() の第4引数で,作成先ダイアログボックスの WM_INITDIALOG メッセージ
でツリービューウィンドウのハンドルを渡そうと思うのですが,以下のようにしてハンドルを
渡せません? HWND 型(32ビット符号なし整数)を LPARAM (32ビット符号付き整数)にキャストして
逆のキャストをすると値が失われるのですか?

CreateDialogParam(hInst,"IDD_DLOG",hWnd,dlogProc,(LPARAM)hwndTreeView);

dlogProc(…,…,…,LPARAM lp)
{
  HWND hTreeView;
  switch(msg){
    case WM_INITDIALOG:
      hTreeView = (HWND)lp;
      ………
    case …
}

調べると呼び出した時点では"-2"とかの値なのに、呼び出し側では"0"になってます。
第4引数で HWND をわたせないのでしょうか??
251デフォルトの名無しさん:2009/01/15(木) 17:03:05
>呼び出した時点では"-2"
252250:2009/01/15(木) 17:07:05
ちなみに、そのツリービューはうまく表示されてるのですが…
253デフォルトの名無しさん:2009/01/15(木) 17:10:32
多分値の確認方法が間違ってて、ちゃんと渡せてるか、最初から間違った値渡してる。
254デフォルトの名無しさん:2009/01/15(木) 18:12:02
>>236
ダイアログに付けるステータスバーやツールバーの位置を
座標単位でずらすのは現時点まで調べた知識では無理のようです。
ステータスバーにMoveWindowなどは効かないようです。

2種類のバーがCCS_TOPで干渉するのは解消できそうにないので
別の方法を考えてみます。
本当にありがとうございました。
255デフォルトの名無しさん:2009/01/15(木) 19:19:32
>>250
CreateDialogParam(hInst,"IDD_DLOG",hWnd,dlogProc,(LPARAM)&hwndTreeView);

dlogProc(…,…,…,LPARAM lp)
{
  HWND hTreeView;
  switch(msg){
    case WM_INITDIALOG:
      hTreeView = (HWND)(*lp);
256デフォルトの名無しさん:2009/01/15(木) 20:40:12
ファイルを出力するプログラムとして以下のソースがあります。

ofstream fout;
string str = "Hello";
string file_name = "a.txt";
wchar_t fn[MAX_PATH];
MultiByteToWideChar(0, 0, file_name.c_str(), -1, fn, MAX_PATH);
fout.open(fn);
fout<<str;
fout.close();

ソースを読んだ限りではofstreamは入力としてUnicodeでないといけないというのは感じますが、
MultiByteToWideCharをなぜ使うかが分かりません。

この関数を使わなければエラーが出るというような場面を教えてください。
257デフォルトの名無しさん:2009/01/15(木) 20:46:35
ウィンドウの外に●を描画したいんですがどうすればできますか?
透明のウィンドウ作ってそこに描画するしかない?
258デフォルトの名無しさん:2009/01/15(木) 20:57:10
>>256
C++のString↓

typedef basic_string<char> string;

見れば分かるがunicodeじゃない
これ以上はC++スレで頼む
259250:2009/01/15(木) 20:59:16
>>255 さすが!値で渡さずにアドレスで渡すわけですね。初心者には思いも
つきませんでしたが、、、、やっぱりダメ (TT)とほほ。
ファイル単位の外部変数で渡すと通るんです。Borland C++ なんですが…
260デフォルトの名無しさん:2009/01/15(木) 21:00:41
>>250
dlogProc(HWND hWnd,…,…,LPARAM lp)
{
  HWND hTreeView = (HWND)GetWindowLongPtr(hWnd, DWL_USER);
  switch(msg){
    case WM_INITDIALOG:
      hTreeView = (HWND)lp;
      SetWindowLongPtr(hWnd, DWL_USER, (LONG_PTR)hTreeView);
      ………
    case …
}
こうですかわかりません
261デフォルトの名無しさん:2009/01/15(木) 21:01:37
…値渡しか参照渡しかの問題じゃないと思うよ…
262デフォルトの名無しさん:2009/01/15(木) 21:06:43
>>250
>呼び出した時点では"-2"

32bitだとして0xFFFFFFFE って値のウィンドウハンドルってなくね?
263250:2009/01/15(木) 21:20:37
>>260 ありがとうございます。すげ〜〜〜〜〜〜!!! 260で出来ましたよ!!!

でも、最近 Win32API プログラミング始めた自分には分けが分かりません (T^T)
とほほ、先は長い。よろしければ、ごく簡単に解説をお願いできれば?
264デフォルトの名無しさん:2009/01/15(木) 21:23:55
>>262 snprintf(buf,sizeof(buf),"hwndTV-RECV:[%d]",lp);
で強引に出力すると、”919128”でした。(^^;;
265デフォルトの名無しさん:2009/01/15(木) 21:26:49
static HWND hTreeView;
にしなさいとかそういうはなしだったんですか?
266デフォルトの名無しさん:2009/01/15(木) 21:35:36
まさか、WM_INITDIALOG以外のとこでhTreeViewの値を
利用しているというオチか?
267250:2009/01/15(木) 21:47:26
>>266 あらら? プロシージャ内変数で WM_INITDIALOG の hTreeView値 を
保存して、case WM_COMMAND: 内で利用しちゃダメなんですか?
268デフォルトの名無しさん:2009/01/15(木) 21:57:14
>>267
だめです。
void f(int x, int y)
{
  int i;
  switch(x){
  case 1: i=y; // 保存
    break;
  case 2: printf("%d", i); //つかう
    break;
  }
}
int main()
{
  f(1,2);
  f(2,0);
}
ってしてるのと同じことです。
269デフォルトの名無しさん:2009/01/15(木) 22:00:13
これ以上はC/C++のスレでお願い。
270デフォルトの名無しさん:2009/01/15(木) 22:08:42
>>269 ?!
ということは、「いったん作られたウィンドウのハンドルは変化し得る」ってことですか?
271デフォルトの名無しさん:2009/01/15(木) 22:10:29
>>270
スコープを抜けたら変数の内容が飛ぶってことをC/C++初心者スレで勉強してからまたこい
272デフォルトの名無しさん:2009/01/15(木) 22:10:46
Windowsの問題ではなくて、C/C++の特質として値が変わりうるので、その理由はC/C++スレで聞いてください。
273デフォルトの名無しさん:2009/01/15(木) 22:18:25
最後に、static 変数にしてもダメなんですか?
274デフォルトの名無しさん:2009/01/15(木) 22:19:48
いいけど本質を理解しないと同じ目に合うぞ
275デフォルトの名無しさん:2009/01/15(木) 22:20:07
>>273
しつこい奴は相手にされなくなるぞ
276デフォルトの名無しさん:2009/01/15(木) 22:29:58
>「いったん作られたウィンドウのハンドルは変化し得る」ってことですか?
ある意味、こういう発想ができるところが怖い。
277デフォルトの名無しさん:2009/01/16(金) 00:53:29
質問
Windowsでマルチスレッドのプログラムを作成しています
複数のスレッドから、int型の値を読み込み&書き換えるときにクリティカルセッションでロックしたほうがいいでしょうか?
int型なので大丈夫だったりしますか?
278デフォルトの名無しさん:2009/01/16(金) 01:01:33
しろ
.netで予めスレッドセーフになってるとかでなければどの型だからとか関係無い
279デフォルトの名無しさん:2009/01/16(金) 01:04:24
>>277
カウンタみたいな単純な加算とかだけなら
InterlockedIncrementとかInterlockedExchangeAddみたいな専用のAPIがある
280デフォルトの名無しさん:2009/01/16(金) 01:04:37
その程度ならInterlocked系で事足りる気もするが、まあした方が無難だろうなあ。
Out-of-orderとか気にしだしたら頭が痛くなるし。
281デフォルトの名無しさん:2009/01/16(金) 01:12:03
>>278-280
レスありがとうございます
Interlocked系関数は初めて知りました。これは便利ですね
282デフォルトの名無しさん:2009/01/16(金) 06:31:09
>>278
.netだってlockとかInterlockedとかあるだろ
283デフォルトの名無しさん:2009/01/16(金) 09:26:28
>int型なので大丈夫だったりしますか

そのint型とやらは何ビットだと思ってるんだ
284デフォルトの名無しさん:2009/01/16(金) 10:15:57
ビット数は関係ない。
285デフォルトの名無しさん:2009/01/16(金) 10:31:53
atomic性が必要かどうかは本人にしか判断できない
volatileだけで十分な場合もある
286デフォルトの名無しさん:2009/01/16(金) 10:59:43
ところで、

lpOldProc = (WNDPROC)GetWindowLongPtr(hwnd,GWLP_WNDPROC);
SetWindowLongPtr(hwnd,GWLP_WNDPROC,(LONG_PTR)SubclassProc);



lpOldProc = (WNDPROC)SetWindowLongPtr(hwnd,GWLP_WNDPROC,(LONG_PTR)SubclassProc);

ってどっちがいいの?
前者だとアトミック性が保証されないし、
後者だと SetWindowLongPtr から返ってくるまでに SubclassProc が呼ばれると破綻しそう
287デフォルトの名無しさん:2009/01/16(金) 11:53:40
そのウィンドウが所属するスレッドで呼び出す場合は、両方とも問題ない。
他スレッドのウィンドウなら後者を使って、lpOldProcが有効になるまでSubclassProcを待機させとけばいい。
288デフォルトの名無しさん:2009/01/16(金) 12:13:02
Win32APIのアトミック性って何処に記述されてんの?
289デフォルトの名無しさん:2009/01/16(金) 13:08:53
てか、他スレッドのウィンドウってサブクラス化できたっけ?
290デフォルトの名無しさん:2009/01/16(金) 17:03:00
できるが
291デフォルトの名無しさん:2009/01/16(金) 17:11:07
できます
292デフォルトの名無しさん:2009/01/16(金) 17:17:21
>>290-291
知らないならレスしないでください。ウザイだけです。
293デフォルトの名無しさん:2009/01/16(金) 17:20:23
srud(>>290, >>291);
294デフォルトの名無しさん:2009/01/16(金) 17:33:33
できるかどうかを聞いてるだけじゃんwwwwwwwwwwwwww
295デフォルトの名無しさん:2009/01/16(金) 17:42:58
srud( srud( >>294 ) );
296デフォルトの名無しさん:2009/01/16(金) 17:46:38
sort( srud.begin(),srud.end() );
297デフォルトの名無しさん:2009/01/16(金) 19:56:57
>>292-293
>>295-296
この辺に必死さを感じるw
298デフォルトの名無しさん:2009/01/16(金) 20:02:48
人生にterminateprocessされて死ね
299デフォルトの名無しさん:2009/01/16(金) 20:08:01
TerminateProcessってI/O処理が終わるまで終了できないんだよな
たまにタスクマネージャで殺せないプロセスができて強制リブートする羽目になる
300デフォルトの名無しさん:2009/01/16(金) 21:02:01
すいませんお知恵をお貸し下さい

特定の形式のクリップボードのデータをクリアしたいのですが
EmptyClipboard()だと全部消えてしまうみたいで、例えばCF_TXTのみをクリア
するにはどうすればよいでしょうか?
301デフォルトの名無しさん:2009/01/16(金) 21:33:55
全部持ってきて特定のだけはずして登録しなおすとか?
302デフォルトの名無しさん:2009/01/16(金) 21:36:25
特定の形式だけクリアしたいなんて発想が間違い
例えばCF_TEXTをセットするとOSによって自動的にCF_UNICODETEXTやCF_OEMTEXTなどもセットされる
303デフォルトの名無しさん:2009/01/17(土) 00:37:48
>>277
パフォーマンスは出ないと思うけど、
MethodImplOptions.synchronizedをプロパティのget/setメソッドに付けるのが一番手っ取り早い
304デフォルトの名無しさん:2009/01/17(土) 00:49:34
スレッド的にはスゲー頓珍漢なこと言ってるような
305デフォルトの名無しさん:2009/01/17(土) 00:55:01
P/Invokeもあるしアリかな
306デフォルトの名無しさん:2009/01/17(土) 01:21:56
volatileで十分
307300:2009/01/17(土) 08:32:07
>>301
なるほど その手がありましたね。 それでやってみます。
>>302
ありがとう

情報Thanksでした!
308デフォルトの名無しさん:2009/01/17(土) 20:00:40
フォーカスがあたると枠線がでてくるボタンを
ダイアログに書きたいのですがいい方法ありませんでしょうか?
(ツールバーとかによくあるボタン)

枠線くらいなら自前で書けるのですが、
押されたときの窪みとか背景色が変更された時の事を考えると
自前では辛いので何か案があればよろしくお願いします。

こういうの↓
ttp://upload.fam.cx/cgi-bin/img-box/3wj90117195648.jpg
309デフォルトの名無しさん:2009/01/17(土) 20:08:56
押された状態の絵を用意して
表示する絵を変えればいいだけ。
310デフォルトの名無しさん:2009/01/17(土) 20:10:11
なんて頭がいいんだ!
311デフォルトの名無しさん:2009/01/17(土) 20:56:22
テーマ描画用のAPIかね。
312デフォルトの名無しさん:2009/01/17(土) 22:52:19
ボタンの絵を描くAPIがあったはずだけど、そういう話ではないのかも
313デフォルトの名無しさん:2009/01/17(土) 23:40:56
DVI で接続されているモニタの入力切替をコンピュータから行うことってできますか?
314デフォルトの名無しさん:2009/01/18(日) 00:06:38
>>312
んー、BMP用意するのも考えたんですが、
それだと背景の色が変わったら
ボタンの背景色も変えないといけないわけで・・・
もっと賢い方法ないですかなぁ・・・
315デフォルトの名無しさん:2009/01/18(日) 00:15:28
>>314
8bppカラーで良いなら、LoadImageのLR_LOADMAP3DCOLORSを利用する手がある。
316デフォルトの名無しさん:2009/01/18(日) 00:18:51
317デフォルトの名無しさん:2009/01/18(日) 00:21:11
いっそのことツールバーをボタンの代わりにつかったら?
318デフォルトの名無しさん:2009/01/18(日) 07:38:09
ボタンを描くんじゃなくてButtonコントロール使えばいいだろ
319デフォルトの名無しさん:2009/01/18(日) 13:04:32
質問です。
よくテキストエディタなんかであるマウスのドラッグによる画面スクローリングは
どのように実現してるのでしょうか。
320デフォルトの名無しさん:2009/01/18(日) 13:36:45
ドラッグしたらスクロールするようにしている
321デフォルトの名無しさん:2009/01/18(日) 18:07:23
CreateDialogParam() で作ったダイアログ・ウィンドウのエディットボックス・プロシージャを
サブクラス化して、リターンキーが押されたら同じウィンドウの [実行] ボタンにメッセージを
送って動かしたいのですが、動きません。

自分自身にメッセージを送っても動かないのでしょうか?
322デフォルトの名無しさん:2009/01/18(日) 18:32:56
ダイアログはなー
323デフォルトの名無しさん:2009/01/18(日) 18:54:56
その [実行] ボタンとやらのコントロールIDを IDOK にしとけばEnterに反応するだろ
324デフォルトの名無しさん:2009/01/18(日) 22:42:58
メニューにサブメニューがある時の▲を描画するための
APIとかあれば教えてください
今のところ自分で▲のアイコン作って描画してます
325デフォルトの名無しさん:2009/01/18(日) 22:44:15
326デフォルトの名無しさん:2009/01/18(日) 23:03:27
素直に文章を解釈するなら、DrawFrameControlじゃないかなあ。
DFCS_MENUARROW辺りを使えば描画できそう。
327デフォルトの名無しさん:2009/01/18(日) 23:19:52
Marlettフォントあたりにあるからそれで描画しとけ
328324:2009/01/19(月) 02:07:19
>>326
それです。サンクス!!
329デフォルトの名無しさん:2009/01/19(月) 22:16:12
Vista+IMAPI v1を使用してディスクアットワンスで書込む
方法はあるでしょうか?
※最終的にXPで使いたいためv1を使用しています
330デフォルトの名無しさん:2009/01/20(火) 01:29:02
FindFirstChangeNotification
でファイルを検地して遊んでるんですけど
一回のファイル変更で2度検知に引っかかっているようなんですが
どんな場合にありえるのでしょうか?
331デフォルトの名無しさん:2009/01/20(火) 01:31:35
何のフラグ指定してんの?
332デフォルトの名無しさん:2009/01/20(火) 01:51:49
FILE_NOTIFY_CHANGE_FILE_NAME|FILE_NOTIFY_CHANGE_SIZE
333デフォルトの名無しさん:2009/01/20(火) 11:12:42
firefoxとかのブックマークメニューって
ドラッグでメニュー項目移動できるよね
あれどうやってるのかな?
334デフォルトの名無しさん:2009/01/20(火) 11:19:13
MNS_DRAGDROP
335デフォルトの名無しさん:2009/01/20(火) 11:57:27
func("http://www.abcd.com/efg/hij/", "../") → "http://www.abcd.com/efg/"
func("http://www.abcd.com/efg/hij/", "/") → "http://www.abcd.com/"
func("http://www.abcd.com/efg/hij/", "/xyz/") → "http://www.abcd.com/xyz/"

みたいなやつが欲しいのですけど、もしご存知て゜したら教えてください。
よろしくお願いします。
336デフォルトの名無しさん:2009/01/20(火) 12:08:20
>>334
おーこんなのがあるのか
さんくす
337デフォルトの名無しさん:2009/01/20(火) 12:14:29
>>335
> もしご存知て゜したら

どこの国の言葉?
338デフォルトの名無しさん:2009/01/20(火) 12:15:43
知らないならレスしないて゜下さい。ウサ゜イた゜けです。
339デフォルトの名無しさん:2009/01/20(火) 12:16:51
やて゜す
340デフォルトの名無しさん:2009/01/20(火) 12:17:15
srud(>>335);
341デフォルトの名無しさん:2009/01/20(火) 12:46:49
>>340
srudってググってもわからないです…

>>337
拝復 貴殿のレス、正に拝見いたしました。
ご無音に打ち過ぎておりますこと、まことに申し訳ございません。
さて、お申し越しの誤字に関する件、ご迷惑のほどお察し申し上げます。
当方においては、かな打ちであるためこのようなことになってしまいました。
ただ、1文字間違えただけで「どこの国の言葉?」との貴殿の発言は
少々行き過ぎではないかと感じる所存であります。
まずは、とりあえず事情を申し上げ、もってご返事といたします。
   敬 具
342デフォルトの名無しさん:2009/01/20(火) 12:57:46
APIでやるよーなこっちゃねーだろ
正規表現でいいんじゃねーの?
343デフォルトの名無しさん:2009/01/20(火) 13:01:27
ネタで書いてんじゃない?
344デフォルトの名無しさん:2009/01/20(火) 13:01:43
>>341
どこの国の言葉?
345デフォルトの名無しさん:2009/01/20(火) 13:38:31
パス系のAPIあったよな
なんか使えんかね
346デフォルトの名無しさん:2009/01/20(火) 13:40:46
>>344
インギンブレー語
347デフォルトの名無しさん:2009/01/20(火) 13:46:13
実は、
http://pc11.2ch.net/test/gomidir/../read.cgi/tech/1231423602/
でもちゃんとアクセスできるのだなこれが。
まあ今はリダイレクトされるか。
http://pc11.2ch.net/test///read.cgi/tech/1231423602/
でも。
348デフォルトの名無しさん:2009/01/20(火) 13:49:58
>>335
UrlCombine
349デフォルトの名無しさん:2009/01/20(火) 13:50:31
Apache httpdでも苦労してやっている。
特にwin32は別方面(ストリーム指定)からの攻撃もあるので、念入りにやらないといけない。
350デフォルトの名無しさん:2009/01/20(火) 14:26:46
Url系はINTERNET_MAX_URL_LENGTHを超えると正しく処理できないからなあ
IEとかどうしてるんだろ
351デフォルトの名無しさん:2009/01/21(水) 11:31:14
GDIの質問です。
DCに線を引く場合、GDIで用意されるAPIより高品質な線を引きたいとします。
こういった場合、どういった方法が常とう手段となるのでしょうか?
たとえば、GDI+はどうやって描いているのでしょう?
352デフォルトの名無しさん:2009/01/21(水) 11:41:15
何をもって高品質とするのか、定義を明確にせよ。
353デフォルトの名無しさん:2009/01/21(水) 11:45:03
もしDCがプロッタなら余計なことをしない方が高品質だと思うよ
354デフォルトの名無しさん:2009/01/21(水) 11:52:19
よけいなことすんなよ?
355デフォルトの名無しさん:2009/01/21(水) 11:57:00
ウィンドウメッセージの送信元を知る方法は?
356デフォルトの名無しさん:2009/01/21(水) 11:58:39
知る方法はありますよ。
357デフォルトの名無しさん:2009/01/21(水) 11:59:17
srud(>>356);
358デフォルトの名無しさん:2009/01/21(水) 12:01:35
>>356
どうやって?
359デフォルトの名無しさん:2009/01/21(水) 12:10:18
またフックか
360デフォルトの名無しさん:2009/01/21(水) 12:17:01
手紙の差出人を特定するにはどうするか考えれば、自ずと答えが出るだろう。
361デフォルトの名無しさん:2009/01/21(水) 14:37:45
郵便局に潜入するんですね!なるほど!
ありがとうございました
362デフォルトの名無しさん:2009/01/21(水) 14:38:47
>>360
馬鹿はレスしないで下さい。ウザイだけです。
363デフォルトの名無しさん:2009/01/21(水) 14:48:16
>>352-353
ありがちなシチュエーションだと思うのだが。
364デフォルトの名無しさん:2009/01/21(水) 15:15:38
そもそもどこのDCに高品質な線を描きたいんだよ
365デフォルトの名無しさん:2009/01/21(水) 15:38:06
あきらかに説明足らずだけど
どうせアンチエイリアスの掛かった線を描きたいとかそんな所じゃねーか?
もし当たってるなら「GDI以外で」って事なんで
聞きたいであろう事はほぼスレ違いなんだけどな
366デフォルトの名無しさん:2009/01/21(水) 15:47:24
適当にでかいサイズの画像に描画しといて縮小。
367デフォルトの名無しさん:2009/01/21(水) 16:55:48
おそらく誰も答えられないであろうことは想像していたがw
368デフォルトの名無しさん:2009/01/21(水) 17:00:10
まあ今は冬休みだしお前らに最初から期待してなかったよw
369デフォルトの名無しさん:2009/01/21(水) 17:01:30
>>366
APIの縮小処理の品質は微妙だが
370デフォルトの名無しさん:2009/01/21(水) 17:06:05
>>360
アドレス・・?
371デフォルトの名無しさん:2009/01/21(水) 17:19:41
> まあ今は冬休みだし

372デフォルトの名無しさん:2009/01/21(水) 18:51:35
Linux板から俺様登場!
何でも質問してくれw
373デフォルトの名無しさん:2009/01/21(水) 19:04:17
>>372
何しに来たんですか?
374デフォルトの名無しさん:2009/01/21(水) 19:09:24
まぁ一年中休みな人もいるわけで
375デフォルトの名無しさん:2009/01/21(水) 19:14:44
>>372
Wineってどんな感じ?
376デフォルトの名無しさん:2009/01/21(水) 19:21:09
>>372
知らないならレスしないで下さい。ウザイだけです。
377デフォルトの名無しさん:2009/01/21(水) 19:27:40
srud(>>372);
378デフォルトの名無しさん:2009/01/21(水) 19:48:09
srudとはスラッシュドットという意味です。
わからない人はhttp://slashdot.jp/を見て勉強しましょう
ドザには難しすぎるかもしれませんがw
379デフォルトの名無しさん:2009/01/21(水) 19:51:25
ああ、またアカヒか
ああ、またゲンダイか
ああ、またsrudか
380デフォルトの名無しさん:2009/01/21(水) 19:54:51
いまさら犬糞デビューか?少し落ち着けよ
いずれBSDの素晴らしさに気付いて捨てると思うけど
381デフォルトの名無しさん:2009/01/21(水) 20:03:25
GDIといえば、インストールした後の一回だけgdiplus.dllがエラーするって現象知ってる人いない?
イベントログに出てたからこのDLLで発生したのはほぼ間違いないんだけど、
再現しないし、イベントログも手元になくて詳細忘れたし\(^o^)/オワタ
382デフォルトの名無しさん:2009/01/21(水) 20:18:54
「エラーする」

日本語崩壊はここまで来たか
383デフォルトの名無しさん:2009/01/21(水) 20:34:43
しょせんドザですからw
384デフォルトの名無しさん:2009/01/21(水) 20:36:27
アーする
385デフォルトの名無しさん:2009/01/21(水) 23:15:17
HANDLEを返すAPIではINVALID_HANDLE_VALUEを返す場合と、NULLを返す場合があるように思うのですが、
リファレンスで確認するしか方法がないでしょうか。
たとえば(handle == NULL || handle == INVALID_HANDLE_VALUE)でチェックした場合、
不都合が生じる可能性はあるのでしょうか
386デフォルトの名無しさん:2009/01/21(水) 23:29:42
無い
387デフォルトの名無しさん:2009/01/21(水) 23:33:30
一応、16ビット自体にもあったAPIは失敗値が非NULLで、
32ビット以降に作成された関数はNULLを返すという背景はあるけど、
リファレンスで確認するしかないだろうね
それを面倒くさがるようではプログラミングはできないよ

だから、たとえば(handle == NULL || handle == INVALID_HANDLE_VALUE)でチェックしたコードを見た場合、
こいつのコードは危ないぞって気になる

あとは、ありえない仮定かもしれないけど、機械的に書いていて
↓みたいな状況になるかもしれないね
HANDLE handle = MyGetCurrentProcess(pid); // カレントプロセスなら -1 を返す
(handle == NULL || handle == INVALID_HANDLE_VALUE)
388デフォルトの名無しさん:2009/01/21(水) 23:36:57
なるほど、わかりました。今後はちゃんと戻り値を調べたり覚えるようにします。
ありがとうございました。
389デフォルトの名無しさん:2009/01/21(水) 23:38:40
>>387
GetCurrentProcessの返値チェックは不要だからそれは絶対にありえないと思う
390デフォルトの名無しさん:2009/01/21(水) 23:44:44
イェア すまん
MyGetProcess(pid) と書きたかったがGetCurrentProcessが頭にあって間違った

べき論で答えるならドキュメント嫁と
その上でどうするかはもちろん知ったことじゃないけどね
391デフォルトの名無しさん:2009/01/21(水) 23:48:49
MyGetProcessはOpenProcessを呼んでるつもりなのか?

だとすると-1を返すなんて有り得ないと思うが。
392デフォルトの名無しさん:2009/01/22(木) 00:04:46
そもそもGetCurrentProcessがINVALID_HANDLE_VALUEと同じ-1を返すのもどうかと思うが
-2以下を使っとけばいいのに
しかもCreateFileMappingなんて第一引数で有効な値としてINVALID_HANDLE_VALUEが使えるし

このあたりの設計の悪さは(HBRUSH)(COLOR_WINDOW+1)の+1と同じく間抜けだな
393デフォルトの名無しさん:2009/01/22(木) 00:04:55
ATL::CHandleみたいなものを作っているなら、両方チェックするのもありだと思う。
(ちなみにATL::CHandleはNULLしか見ないけど)
394デフォルトの名無しさん:2009/01/22(木) 01:14:28
なんか色々いじってたらウィンドウを作っても、その後、枠とかすら描画されない症状になっちゃったんですけど、
原因エスパーできる人いますか?もしくは作成後どのメッセージを発行すれば描画してもらえるのか教えてもらえんでしょうか?
395デフォルトの名無しさん:2009/01/22(木) 01:15:02
あ、ちなみに最大化とかすれば再描画されるんですよ。
396デフォルトの名無しさん:2009/01/22(木) 01:39:01
UpdateWindowが抜けてる
397デフォルトの名無しさん:2009/01/22(木) 12:45:14
結局メッセージの送信元(ウィンドウハンドルとか)を特定する方法はない?
398デフォルトの名無しさん:2009/01/22(木) 12:47:59
srud(>>397);
399デフォルトの名無しさん:2009/01/22(木) 13:57:55
>>397
送信元がウインドウを持っていなかったらどうするんだ?
アホにも程がある。
400デフォルトの名無しさん:2009/01/22(木) 14:01:47
それはNULLとかIsWindowで判別できるじゃん
401デフォルトの名無しさん:2009/01/22(木) 14:04:06
ウインドウがあるか無いかではなく、送信元の指標として利用できないだろ。
なんでそんなに頭が弱いんだ?
402デフォルトの名無しさん:2009/01/22(木) 14:05:51
じゃprocessハンドルならば?
403デフォルトの名無しさん:2009/01/22(木) 14:22:45
送るときに付けるか、メッセージ送信用のAPIを監視するか
後者ならフックに該当し、スレが荒れるのでこれ以上の話は禁止
404デフォルトの名無しさん:2009/01/22(木) 15:18:11
Linuxならそんな問題はないのにw
馬鹿だからWindowsに固執する
405デフォルトの名無しさん:2009/01/22(木) 15:28:34
Win32スレでLinux云々言い出すやつって、
リアルでコミュニケーションがとれずに誰にも相手にされないんだろうな
406デフォルトの名無しさん:2009/01/22(木) 15:35:46
いつもの人工無能がs/\.NET/Linux/gしただけだろ
407デフォルトの名無しさん:2009/01/22(木) 15:35:58
問題以前にメッセージを送る共通の方法が無い
D-BUSとか使わない限り
408デフォルトの名無しさん:2009/01/22(木) 16:57:48
>>396いたるところに入れたんですがやっぱりダメでした。うーん。。。
409デフォルトの名無しさん:2009/01/22(木) 17:11:18
>>408
InvalidateRect+UpdateWindow
410デフォルトの名無しさん:2009/01/22(木) 17:12:18
>>409
RedrawWindowだけで出来るだろ
411デフォルトの名無しさん:2009/01/22(木) 17:15:18
RedrawWindowってそのままの名前なのに知名度低いよねw
412デフォルトの名無しさん:2009/01/22(木) 17:46:30
問題の本質を理解するにはInvalidateRectをおぼえた方が良いキリッ
413デフォルトの名無しさん:2009/01/22(木) 18:27:27
非クライアント領域の再描画はInvalidateRectでは無理
414デフォルトの名無しさん:2009/01/22(木) 19:18:17
GDIリソース不足に陥ったとか
415デフォルトの名無しさん:2009/01/22(木) 19:19:39
>>409-413全部やってましたが、ダメでした。それともウィンドウ作ってすぐだとダメとか?そんなの無かったですよね・・・
416デフォルトの名無しさん:2009/01/22(木) 19:46:35
根本的なところでウィンドウスタイル
417デフォルトの名無しさん:2009/01/22(木) 19:49:59
MNS_DRAGDROPの使い方がわかんねー
英語でも資料無いしそもそもWM_MENUDRAGとかとれないし
もちろんSetMenuInfoはしている。。
418デフォルトの名無しさん:2009/01/22(木) 19:52:42
と思ったらいけた・・
サブメニューにSetMenuInfoやってもだめなのね・・
419デフォルトの名無しさん:2009/01/22(木) 21:05:43
>>394
>なんか色々いじってたら
break付け忘れて別のcaseに突入してるとか、その手のミスだろ
ソース晒せないなら、捨てて1から同じもの作り直せ。それで直る
420デフォルトの名無しさん:2009/01/22(木) 22:14:02
そういやvistaってdwm.exeがウィンドウの枠を描いてるんだっけ
てことは、dwm.exeを殺しつづけるプログラム書いたら・・・
421デフォルトの名無しさん:2009/01/22(木) 22:30:47
>>420
VistaベーシックテーマになってXP互換のドライバモデルによる描画になるはず。
422デフォルトの名無しさん:2009/01/23(金) 16:35:31
すいません、質問してイイ?
423デフォルトの名無しさん:2009/01/23(金) 16:36:59
srud( >>424 );
424デフォルトの名無しさん:2009/01/23(金) 16:45:37
srud( >>423 );
425デフォルトの名無しさん:2009/01/23(金) 16:53:21
それ毎日やってる奴って流行らせようとしてるんだろうなw
426デフォルトの名無しさん:2009/01/23(金) 17:23:14
TrackPopupMenuつかって表示したメニューってDestroyMenuしたほうがいいの?
427デフォルトの名無しさん:2009/01/23(金) 17:26:32
>>425
え?何いってんの?君
428デフォルトの名無しさん:2009/01/23(金) 17:36:04
何?悔しかったの?w
429デフォルトの名無しさん:2009/01/23(金) 17:40:16
>>427ワロスwwwwwwwwwwwwwwwwwww
430デフォルトの名無しさん:2009/01/23(金) 17:46:10
>>426
TrackPopupMenuに渡したメニューハンドルはどこから来たんだ?
431デフォルトの名無しさん:2009/01/23(金) 18:02:26
>>430 CreatePopupMenuで作ったハンドルです。現状は作った後放置です。
432デフォルトの名無しさん:2009/01/23(金) 18:44:58
「アプリケーションを終了する前に、DestroyMenu 関数を使って、どのウィンドウにも割り当てられていないメニューを破棄しなければなりません。」
433デフォルトの名無しさん:2009/01/23(金) 19:20:29
知らないならレスしないだけです。
434デフォルトの名無しさん:2009/01/23(金) 19:25:51
ポップアップメニューがウィンドウと関連がなくなるのってどのタイミングなんでしょう?
例えばTrackPopupMenuで表示している間は関連があるから削除しなくていいとか?
435デフォルトの名無しさん:2009/01/23(金) 19:52:47
PC新調したのを期に64bitとも整合が取れるようにコードを直そうと思っているのですが、
WinAPIの場合、ポインタと整数をキャストしている関数を新しいものと入れ替えるだけでいいのでしょうか?

またwindowsはLLP64ですけど、x64CPUを使っている場合
32bitOSと64bitOSで64bit長のデータを扱うと、前者はどこかネックになったりするのでしょうか?
436デフォルトの名無しさん:2009/01/23(金) 20:14:02
ume
437デフォルトの名無しさん:2009/01/23(金) 20:14:49
誤爆った
438デフォルトの名無しさん:2009/01/23(金) 20:15:29
>>434
面倒だからここを一通り読んでくれ
ttp://msdn.microsoft.com/en-us/library/ms674660.aspx
439デフォルトの名無しさん:2009/01/23(金) 20:29:21
>>438
面倒だからあなたが答えてくれませんか?
440デフォルトの名無しさん:2009/01/23(金) 22:28:18
>>435
そうだよ。それだけで64ビットに対応できると謳われている。

32ビットOSでは64ビットに拡張されたレジスタを使えないので、
64ビットデータを扱うには32ビットレジスタ2つかSSEレジスタを使わなければならない。
441デフォルトの名無しさん:2009/01/23(金) 22:49:37
SSEに64bit整数演算命令なんかあったっけ?
442デフォルトの名無しさん:2009/01/23(金) 23:06:24
SSEレジスタ = XMMレジスタって意味だろ

SSE命令の話なんてしてねーよ馬鹿
443デフォルトの名無しさん:2009/01/23(金) 23:25:52
そもそも整数とも言ってないな
444デフォルトの名無しさん:2009/01/23(金) 23:33:18
まあ32ビット環境でも一部のx86命令はedx:eaxで64ビット扱えるけどね
445デフォルトの名無しさん:2009/01/24(土) 00:26:47
メニューを決定したときWM_COMMANDでIDだけ分かりますが、決定時にメニューハンドルまで分かるメッセージってありますか?
446デフォルトの名無しさん:2009/01/24(土) 01:28:53
WM_COMMAND_MENU_HANDLE_WAKARU
447デフォルトの名無しさん:2009/01/24(土) 01:38:47
>>445
WM_MENUCOMMAND
たぶん。使ったこと無いけどそれっぽい。
MENUINFO.dwStyleでMNS_NOTIFYBYPOSを立てておくと、
WM_COMMANDの代わりに飛んでくると書いてある。
448デフォルトの名無しさん:2009/01/24(土) 12:01:04
>>447ありがとう!大好きだよ!チュッチュッ
449デフォルトの名無しさん:2009/01/24(土) 16:39:04
キメェ
450デフォルトの名無しさん:2009/01/24(土) 17:44:06
質問です。

オーディオデバイスから出ている音声信号をキャプチャして画面効果を出すようなアプリが作りたいんですが
どうすれば良いか分かりません。
詳細は自分で調べますので、大まかなキーワードや考え方の方針だけでも教えてください。
451デフォルトの名無しさん:2009/01/24(土) 18:47:39
>>450
キーワード
オーディオデバイス,音声信号,キャプチャ,画面効果
452デフォルトの名無しさん:2009/01/24(土) 19:23:18
ループバックの録音デバイスが存在するかどうかが要だな。
なけりゃほぼどうしようもないかと。
453デフォルトの名無しさん:2009/01/25(日) 09:43:07
以下のようにダイアログボックスのエディットウィンドウをサブクラス化しようとして
ますが、動きません(コンパイルは通る)。同じような形で CreateDialogParam() では
できたのですが、ダイアログボックスは基本的にサブクラス化できないのですか?

  ret = DialogBox(g_hInst,"IDD_ADD_ITEM", hWndOwner, (DLGPROC)addItemProc);
  ………

BOOL CALLBACK addItemProc( hAddTvItemDlg, msg, wp, lp){
  ………
  case WM_INITDIALOG:
    ………
    editboxAddItemProc = (WNDPROC)(LONG_PTR)GetWindowLong(GetDlgItem(hAddTvItemDlg,IDC_EDT_EDBX),GWL_WNDPROC);
    SetWindowLong(GetDlgItem(hAddItemDlg,IDC_EDT_EDBX)
           ,GWL_WNDPROC,(LONG)(LONG_PTR)editboxAddItemSUBproc);
    ………

static BOOL CALLBACK editboxAddItemSUBproc( hAddItemDlg, msg, wp, lp){
  switch(msg){
    case WM_KEYDOWN:
      if(wp==VK_RETURN){
        PostMessage(hAddTvItemDlg,WM_COMMAND,(WPARAM)IDC_EDT_OK,0);
        return 0;
      }else if(wp==VK_ESCAPE){
        EndDialog(hAddTvItemDlg,0);
        return 0;
      } // wp==VK_TAB はデフォルトで動くようです
      break;
  }
  return CallWindowProc(editboxAddItemProc,hAddItemDlg,msg,wp,lp);
454デフォルトの名無しさん:2009/01/25(日) 10:30:27
>>453
editboxAddItemSUBprocは呼び出されてる?

それとは別に、
>    editboxAddItemProc = (WNDPROC)(LONG_PTR)GetWindowLong(GetDlgItem(hAddTvItemDlg,IDC_EDT_EDBX),GWL_WNDPROC);
>    SetWindowLong(GetDlgItem(hAddItemDlg,IDC_EDT_EDBX)
>           ,GWL_WNDPROC,(LONG)(LONG_PTR)editboxAddItemSUBproc);

windowsx.hをインクルードして、
 editboxAddItemProc = SubclassWindow(GetDlgItem(hAddItemDlg,IDC_EDT_EDBX), editboxAddItemSUBproc);
の方がいいだろう。変なキャストもしなくていいし。
455デフォルトの名無しさん:2009/01/25(日) 10:38:22
DWL_DLGPROCじゃね?
456デフォルトの名無しさん:2009/01/25(日) 10:58:37
ダイアログ側が先行してメッセージを取り込んでいる所為で、
そもそもメッセージが届いていない、というオチな気がしないでもない。
COMCTL32v6用のGet/SetWindowSubclassとかあるけど関係無いだろうなあ。
457デフォルトの名無しさん:2009/01/25(日) 11:03:52
ついでに書いておくなら、>>453 の処理を見る限り、
WM_COMMANDのIDOKとIDCANCELをうまく処理するだけで
目的が達成されそうな気がする。
SDKの「Dialog Box Programming Considerations」を参考にしてみてくれ。
458デフォルトの名無しさん:2009/01/25(日) 11:43:18
なんでカンマが全角なのか非常に気になる
459453:2009/01/25(日) 13:48:10
みなさん、ありがとうございます。

static BOOL CALLBACK editboxAddItemSUBproc( hAddItemDlg, msg, wp, lp){
  switch(msg){
    case WM_KEYDOWN:
>>     MessageBox(……);
      if(wp==VK_RETURN){

として調べると、文字キー(abcなど)は来てますが、VK_RETURN は来てません。
460デフォルトの名無しさん:2009/01/25(日) 13:57:55
【通信プログラムの質問】
初心者です。

送信、受信で、WriteFile()、ReadFile()を使用する事はわかったのですが、
この関数の使い方がわかりません。。。

具体的に引数に何を設定したらいいのでしょうか?

文字列:"Test送信データ!"を送信したい場合どうプログラムするのか教えてください。。
461デフォルトの名無しさん:2009/01/25(日) 14:01:40
通信と言っても色々あるわけで
MSDNでWriteFileの仕様は見たの?
462460:2009/01/25(日) 14:06:57
>>461さん

見ました。以下のページですよね。
http://msdn.microsoft.com/ja-jp/library/cc429856.aspx

BOOL WriteFile(
HANDLE hFile, // ファイルのハンドル
LPCVOID lpBuffer, // データバッファ
DWORD nNumberOfBytesToWrite, // 書き込み対象のバイト数
LPDWORD lpNumberOfBytesWritten, // 書き込んだバイト数
LPOVERLAPPED lpOverlapped // オーバーラップ構造体のバッファ
);

第1引数と、第5引数には、何を設定すれば、いいかわかりました。
2〜4に何を設定したらいいかわからなかったのです。。

通信は、PCのCOMポート通しの通信をやろうとしています。
463デフォルトの名無しさん:2009/01/25(日) 14:23:15
いや・・そのまんまじゃん

第2引数 書きたいもの→"Test送信データ!"
第3引数 書きたいものの長さ→"Test送信データ!"のバイト数(文字列長さじゃないよ)
第4引数 書かれた長さをうけとる変数→適当なDWORD変数
464デフォルトの名無しさん:2009/01/25(日) 14:32:59
フルスクリーン中にWindowsFlipモード
([ALT]+[TAB]や、Vistaの[Windows]+[TAB]を押したときになる、ウインドウを切りかえる画面のこと)
になったかどうかを知りたんだけど、これを知る方法ってありますか?
調べて見た感じなさそうなんだけど・・・
465460:2009/01/25(日) 14:51:05
以下の様にしたら、コンパイルが通りました!!
ありがとうございます。

動かしてみます。


char data[] = "test送信データ!";
LPDWORD lp;

// 送信〜
WriteFile(
handle, // シリアルポートへのハンドラ
&data, // 送信バッファへのポインタ
sizeof(data), // 送信データ数
lp, // 実際に送信したデータ数
NULL ); // 非同期I/O動作の場合のオーバーラップ構造体へのポインタ
466デフォルトの名無しさん:2009/01/25(日) 14:58:51
×
&data

data or &data[0]

×
LPDWORD lp;

DWORD len;

WriteFile(handle,data,sizeof(data),&len,NULL );
467デフォルトの名無しさん:2009/01/25(日) 15:25:18
>>465
DWORD written;とかにしてWriteFileの引数のlpを&writtenにしろ。それ以前のCの問題じゃないか。
MSDNだけじゃなくてWriteFileでググって参考になりそうなコード探せよ。
468デフォルトの名無しさん:2009/01/25(日) 19:33:05
AというRadiobuttonを選択したら
チェックボックス(IDC_GREY)にはいっているチェックをとりたいんですが
どうしたらいいですか?調べたところSendMessageを使うみたい
なんですが・・。
SendMessage(hDlg,BST_UNCHECKED,wParam,lParam);
これじゃどのチェックボックス(IDC_GREY)を外すのかわからないとおもうんですが・・。
ご教授お願いします。
469デフォルトの名無しさん:2009/01/25(日) 19:41:24
CheckDlgButtonとか、SendDlgItemMessageとか、
GetDlgItemでハンドル取ってとか、
どれでも好きなのを使うと良い。
470デフォルトの名無しさん:2009/01/25(日) 19:43:27
突然初心者が湧いてくるのは何故なんだ?
471デフォルトの名無しさん:2009/01/25(日) 19:44:02
質問スレだからだろ?
472デフォルトの名無しさん:2009/01/25(日) 20:00:14
ListViewを詳細表示していて、選択項目が変わったら、新しく選択された項目の内容を取得しようと思っています。
下記のコードを書いてみたのですが、これですと、クリックで選択項目が変わる際は取得できるのですが、
キーボードの矢印キーを使って選択が変わると、何も反応しません。
キーボードの矢印キーを使って選択が変わっても、新しい項目の値を取得できるようにするには、
どうしたら良いのでしょうか?ご教授下さい。
---------------------------------------
case WM_NOTIFY:
LPNMHDR lpnmhdr = (LPNMHDR)lp;
if( lpnmhdr->hwndFrom == hListView ){
LV_ITEM item;
LV_HITTESTINFO lvhti;
GetCursorPos((LPPOINT)&lvhti.pt);
ScreenToClient(((LPNMLISTVIEW)lp)->hdr.hwndFrom, &lvhti.pt);
ListView_HitTest(((LPNMLISTVIEW)lp)->hdr.hwndFrom, &lvhti);
char szBuff[100]="";

if (lvhti.flags & LVHT_ONITEM){
item.mask = TVIF_HANDLE | TVIF_TEXT;
item.iItem = lvhti.iItem;
item.iSubItem = 0;
item.pszText=szBuff;
item.cchTextMax=sizeof(szBuff);
ListView_GetItem(((LPNMLISTVIEW)lp)->hdr.hwndFrom, &item);
MessageBox(hWnd,szBuff,"表示",MB_OK);
}
473デフォルトの名無しさん:2009/01/25(日) 20:05:51
んな面倒なことせんでも  つLBN_SELCHANGE
474デフォルトの名無しさん:2009/01/25(日) 20:06:29
ごめん間違えた。  つLVN_ITEMCHANGED
475472:2009/01/25(日) 20:29:13
>>474

うまくできました〜。
ありがとうございました。

ほんと、面倒な事しすぎててアホでした・・・。
476デフォルトの名無しさん:2009/01/25(日) 20:34:21
自分が面倒だと思うことは、大抵他人も同じように考えているわけで、
探してみると、もっと楽できる方法が提供されている事が良くある。
そうやって楽しようと調べている内に、色々詳しくなっていくわけだ。
477デフォルトの名無しさん:2009/01/25(日) 21:11:27
まあメッセージ関連はSpy++で使えそうなのを探した方が楽だけどね。
478デフォルトの名無しさん:2009/01/25(日) 21:16:05
Spyのウィンドウメッセージが16進数表記でなくてよかったお(´・ω・`)
479472:2009/01/25(日) 21:25:18
たびたびですいません。

再びListViewに関する質問なのですが、
任意のクリックしたセルを修正できるListViewを作ろうと思っています。
(要するに、MSExcelの様な感じです)

ググった結果、
クリックしたセルに上書きする形で、エディタを作ればいい
とありました。

なるほど〜〜と思ったのですが、ここで問題発生・・・。
クリックしたセル領域の座標を求める方法が分かりません。

クリックしたセルのItem,SubItemは取得できるので、
CreateWindow("edit",...,(セル幅×SubItem),(セル高さ×Item),セル幅,セル高さ,...)
にすれば良いのかと一瞬思ったのですが、
よくよく考えてみると、項目数が多い場合、
ユーザーがListViewをスクロールしている可能性も考えられます。

こういった場合、どのようにしてListViewの上にエディタを作れば良いのでしょうか??
もしくは、実はもっと良い方法があったりするのでしょうか?
ご教授下さいませ。
480デフォルトの名無しさん:2009/01/25(日) 21:40:13
なんでMSDNのLVM_**を調べないの? 馬鹿なの?
481デフォルトの名無しさん:2009/01/25(日) 21:57:33
ごめんなさい。僕、白痴なんです
だから、教えてくださいね
482デフォルトの名無しさん:2009/01/25(日) 22:09:17
483デフォルトの名無しさん:2009/01/25(日) 22:24:25
>>482
それはあなたの事でしょう
484デフォルトの名無しさん:2009/01/25(日) 22:26:45
俺、医師免許無いよ?
485デフォルトの名無しさん:2009/01/25(日) 22:28:33
WaitForSingleObjectで
主スレッドである処理が終わるまで
副スレッドを待機させるのってどうやるんですか
486デフォルトの名無しさん:2009/01/25(日) 22:34:13
WaitForSingleObjectでWaitを0にして終了するまでループしてればいい
487デフォルトの名無しさん:2009/01/25(日) 22:36:55
CreateEvent
488デフォルトの名無しさん:2009/01/25(日) 22:37:13
WaitForSingleObjectでって言ってんだろ
489デフォルトの名無しさん:2009/01/25(日) 22:39:08
CreateEvent で作ったイベントに対して WaitForSingleObject 使うんだよこのタコ
490デフォルトの名無しさん:2009/01/25(日) 22:40:09
どうやるもなにもハンドル渡す以外にやる事ないだろ
491デフォルトの名無しさん:2009/01/25(日) 23:08:27
渡すハンドルもイベントとは限らんしな
492あんあん:2009/01/25(日) 23:11:13
         _     , -‐-、
        / ̄\、 // ̄`\、
      /    _\//_ _   i|
     /   //:::::_`'|ヽ:. \二`ノ、ー..、
    //   /'/ ./::ヽ|:::\:.ヽ::::ヽ:\:::\
    |'   /::/:.:./ |.:|"`、..::ト、:ト;::::|: |:::;::::|
       |/|:::::;| ::l、|  ヽ| ヽl \|: |:::i::::|
        | |::::;ヽ:::| ,二、   ,二、|: ト ::|:::ト、
          ト/:::|`:l ! lj   ! lj |:..:| |::|:::|::|
           `|:::i:ヾ:| " '_   " |::::|'.::::i:::|:::|
        /|:::|:::|:i:\ ` ノ   イ::::|:::::::|:::|:::|、
        /:|:::|:::|::|:::|::i:.. ー ´ .|:|:::;|:::i::::|:::|:::::|、
        / |:, i .:|ー-──| / |:'|:::|ー─ 、i:::::::|
        //|l:::.|i::|   ̄` ´  ̄//::;/    l::::::ト、
        //|| |:;|ノ|       ノ,l::;l/    /:::::::ト、ヽ
     / ' |/|:|ヾ|        |::l'/    /| |:::::|、|:|
     |l/   |:| ' /     ノ//    /:|:::|::::i:.| |:|
      |')    ヽ|  |  (o,  ノ/    /:::| :|::::::|:| |:|
      |l丶    ノ ヽ     ,/    ./::::,':: |::::::|i.| |.|
     | /`iー '    ` ー /    /:::::/::/|:::::| |:| ||
    __,/_|__,  - ──/     /;::::/:::/ |:::/' |:| |
  r-'ニ '               /:/::/:::/ |:./ //|
  Y    _  ___     _////  |:/ /'
  `i_ // ̄      ̄ ̄ ̄l//、//   |'
    .| rl|    !       \|n|
    |  ||_ヽ_    ,_, -= '_,7〉
    | /、      ̄ ̄ ̄  ,/  |uゝ
    | '| \ :、       , /    ヽ
    ヽ |  \:、   //       |
      |    \   ,:/        |
493デフォルトの名無しさん:2009/01/25(日) 23:13:41
その、虫の触覚みたいな毛は何とかならんのか
494デフォルトの名無しさん:2009/01/25(日) 23:17:45
アホ毛っていいます。
495デフォルトの名無しさん:2009/01/25(日) 23:39:10
スレチかもしれませんが・・・
タスクスケジューラを使わずにサスペンドからの復帰を実現しているソフトがありますが、どのような方法を使っているのでしょうか?
496デフォルトの名無しさん:2009/01/25(日) 23:56:17
アクティブタイマ
497デフォルトの名無しさん:2009/01/26(月) 00:42:59
>>496
レスありがとうございます。
調べてみます。
498デフォルトの名無しさん:2009/01/26(月) 11:01:04
ツリービューで、子アイテムから親アイテムのハンドルを取得する方法ってある??
499デフォルトの名無しさん:2009/01/26(月) 14:44:19
>>498
TVGN_PARENT
500デフォルトの名無しさん:2009/01/26(月) 19:10:10
WaitForSingleObjectの第一引数にハンドルの配列の先頭アドレスを渡したら配列全部を待ってくれますか?
501デフォルトの名無しさん:2009/01/26(月) 19:11:20
マルチプルってのがあったような気がする
502デフォルトの名無しさん:2009/01/26(月) 19:22:08
そんなばかな
503デフォルトの名無しさん:2009/01/26(月) 19:26:11
>>501
出来たありがとう
504デフォルトの名無しさん:2009/01/27(火) 10:10:36
SetStretchBltMode(hDC, HALFTONE)
StretchBlt(hDC, ...);

きれいにビットマップを縮小できません。どうすればいいか分かりますか。
505デフォルトの名無しさん:2009/01/27(火) 10:13:40
自分で縮小処理を書く
506デフォルトの名無しさん:2009/01/27(火) 10:17:42
>>505
そんな馬鹿な
507デフォルトの名無しさん:2009/01/27(火) 10:27:59
>>504
原因がわかった。
>Windows 95/98/Me では、この値はサポートされていません。
508デフォルトの名無しさん:2009/01/27(火) 11:45:51
そんな馬鹿な
509デフォルトの名無しさん:2009/01/27(火) 11:46:39

    __ __ __ __       __     __       __
    `i  | | i'l_i'l_i'     i''´ __`ヽ-ッ _コ  l____ i´__`ー-ッ  _,,.、
     ,!  ,! .l l   _,,,_   └'´__ ``´ レ┐ ┌─┐ ,!'´ ``´ /,r''´
    / 丿 '、'、 l´ __`ヽ-ッi''´__`ヽ-ッ  .l  l  ノ /     / /
   / /   ヽ ヾ´  ``'´└'´,,_``'´   l └ ' ,/   ___,,ノ /
_,,.r'' /      \ `>  r'"´   ``ヽS.) l  「´    「´    _ノ
‘''' ´           `′ └ ''´ ̄``‐-‐'' └ ┘   └‐ '' ´
510デフォルトの名無しさん:2009/01/27(火) 13:42:26
自分で縮小処理を書くしかないようですね。
では、線形補間法を検討してみます。
511デフォルトの名無しさん:2009/01/27(火) 13:52:49
Direct3Dを使えば高速に処理できるよ。
512デフォルトの名無しさん:2009/01/27(火) 13:54:00
じゃあDirect3D使ってやるからソース教えて
513デフォルトの名無しさん:2009/01/27(火) 14:00:34
Windows 95/98/Meで動作するバージョンのDirect3Dでおねがいします。
514デフォルトの名無しさん:2009/01/27(火) 14:03:16
Windows9xで動くDirectXのバージョンていくつだ?
95も考慮するとCPU処理で十分だろ、SSE使えなくなるけど。
515デフォルトの名無しさん:2009/01/27(火) 14:57:10
95が8までで、98/Meが9までじゃなかったっけ?
516デフォルトの名無しさん:2009/01/27(火) 14:59:44
WinG?
517デフォルトの名無しさん:2009/01/27(火) 15:08:43
98はSEもってことね。
馬鹿なお前らでもそれくらいはわかってたよな?
518デフォルトの名無しさん:2009/01/27(火) 15:10:42
君のレスなんて読まないよ
519デフォルトの名無しさん:2009/01/27(火) 15:49:48
君のレスなんて読まないよ
520デフォルトの名無しさん:2009/01/27(火) 15:50:57
君のレスなんて読まないよ
521デフォルトの名無しさん:2009/01/27(火) 15:55:16
君のレスなんて読まないよ
522デフォルトの名無しさん:2009/01/27(火) 15:58:19
>>504知らずに>>505してた俺がバカみたいじゃないか
523デフォルトの名無しさん:2009/01/27(火) 15:59:43
バカのレスなんて読まないよ
524デフォルトの名無しさん:2009/01/27(火) 16:08:08
読まないよって奴のレスなんて読まないよ
525デフォルトの名無しさん:2009/01/27(火) 16:10:12
キターーー!!Win32APIスレ伝統芸能”糞レス連打”!
526デフォルトの名無しさん:2009/01/27(火) 16:13:30
伝統だったのかw
527デフォルトの名無しさん:2009/01/27(火) 16:15:37
俺が流行らせた
528デフォルトの名無しさん:2009/01/27(火) 16:15:38
>>525から糞レスなんですね。わかります。
529デフォルトの名無しさん:2009/01/27(火) 16:22:31
君のレスなんて読まないよ
530デフォルトの名無しさん:2009/01/27(火) 16:26:07
オウムレスとか、ですねわかります文とか、ほんとネタレベル低いなこのスレ
531デフォルトの名無しさん:2009/01/27(火) 16:26:45

         _
    ───| |─ R. E. S T A. U R. A. N T
      ,イ二ヽ| |
  _ { {  ヾ |__r‐z_、-、┌┐ ,.-、┌ i r-、    , ‐ァ
  \ヘヽ_二フ j / /} ト┘! レ1 | | l└┴──/ /
    `ー--‐ '´/_/ 」__j   レ'  L_,|  ̄`ヽ\  〈 /
                  ┌┐         } }  ヽ〉
                \ヽ、     ノ/
                 ``ー---─ '´
532デフォルトの名無しさん:2009/01/27(火) 16:42:47
知らないならレスしないで下さい。ウザイだけです。
533デフォルトの名無しさん:2009/01/27(火) 16:57:45
オウムレスとか、ですねわかります文とか、ほんとネタレベル低いなこのスレ
534デフォルトの名無しさん:2009/01/27(火) 17:11:56
ネタレベル低いならレスしないで下さい。オウムレスとか、ですねわかります分とかだけです。
535デフォルトの名無しさん:2009/01/27(火) 17:18:09
その辺にしてくれ
536デフォルトの名無しさん:2009/01/27(火) 17:18:35
nrod( >>534 );
537デフォルトの名無しさん:2009/01/27(火) 17:19:51
>>535
すまんこ
538デフォルトの名無しさん:2009/01/27(火) 17:20:13
オウムレスとか、ですねわかります文とか、ほんとネタレベル低いなこのスレ
539デフォルトの名無しさん:2009/01/27(火) 17:20:17
ガスト希望
540デフォルトの名無しさん:2009/01/27(火) 17:21:10
−−−−−−−−−− 終了 −−−−−−−−−−−
541デフォルトの名無しさん:2009/01/27(火) 17:30:57
オウムレスとか、ですねわかります文とか、ほんとネタレベル低いなこのスレ
542デフォルトの名無しさん:2009/01/27(火) 18:01:40
次の質問どうぞー
543デフォルトの名無しさん:2009/01/27(火) 18:22:39
これガキが1,2人でやってんだろ
544デフォルトの名無しさん:2009/01/27(火) 18:26:57
>>543
そんな判りきった事をわざわざ言わなくていいよ。
545デフォルトの名無しさん:2009/01/27(火) 18:27:54
オウムレスとか、ですねわかります文とか、ほんとネタレベル低いなこのスレ
546デフォルトの名無しさん:2009/01/27(火) 18:28:20
ばかいっちゃいけねえ。ガスト待ちの俺はじっと待ってる
547デフォルトの名無しさん:2009/01/27(火) 18:41:44
すまんがガストのロゴマークは作られてないらしい
548デフォルトの名無しさん:2009/01/27(火) 18:43:57
たしかにすかいらーくはいい出来だなw
549デフォルトの名無しさん:2009/01/27(火) 18:44:06
えええええ
バーミヤン、すかいらーくと来たらガストだろと思ってたのに。。。

情報、ありがとうございましたλ...
550デフォルトの名無しさん:2009/01/27(火) 19:18:30
ゲイツの釣りみたいだな
551デフォルトの名無しさん:2009/01/27(火) 19:23:05
>>543
違うよ。おっさんと爺が2,3人でやっている
552デフォルトの名無しさん:2009/01/27(火) 19:24:00
本当にその辺にしてくれないか。頼むから。
553デフォルトの名無しさん:2009/01/27(火) 19:24:17
>>551
なんだ、お前一人の仕業だったのか
554デフォルトの名無しさん:2009/01/27(火) 19:33:01
>>551
もう止めろよお前
555デフォルトの名無しさん:2009/01/27(火) 19:35:22
いや俺じゃないから
556デフォルトの名無しさん:2009/01/27(火) 19:37:12
俺でもないよ
557デフォルトの名無しさん:2009/01/27(火) 20:38:08
実はこいつ↓
558デフォルトの名無しさん:2009/01/27(火) 20:50:56
すいません、全部オレでした
559デフォルトの名無しさん:2009/01/27(火) 20:51:54
なんかム板のノリじゃなくね?ここだけ
560デフォルトの名無しさん:2009/01/27(火) 20:56:35
目覚ましと時計を作った例のクソガキが一人で荒らしてるだけだろ。
561デフォルトの名無しさん:2009/01/27(火) 20:58:43
目覚まし久しぶりだな
562デフォルトの名無しさん:2009/01/27(火) 21:41:21
今アクティブになっているウィンドウのタイトル名を取得したいんだけど
どうすればいいの?
言語はVB.NETっす
563デフォルトの名無しさん:2009/01/27(火) 21:44:36
>>562
よ、目覚まし
564デフォルトの名無しさん:2009/01/27(火) 21:45:08
GetForegroundWindow
GetWindowText
でいいんすか?
565デフォルトの名無しさん:2009/01/27(火) 22:02:00
なんだなんだ、目覚し来てるのか?
今度は何してるの?
566デフォルトの名無しさん:2009/01/27(火) 22:03:36
>>564
そんだけじゃわかんねぇよ
ちゃんとソース書いて説明しろよはげ
567デフォルトの名無しさん:2009/01/27(火) 22:06:48
>>566
さあ目覚ましと時計のソースをうpするんだ
みんなで笑ってあげるからよ
568デフォルトの名無しさん:2009/01/27(火) 22:07:16
>>560
お前が召還したんだから責任とれよ?
569デフォルトの名無しさん:2009/01/27(火) 22:09:57
>>566
GivemeAnswer( kokoni, GetWindowText( GetForegroundWindow() ) );
570デフォルトの名無しさん:2009/01/27(火) 22:22:17
>>569
できねぇじゃねぇかよ
俺の貴重な時間を浪費すんじゃねえよはげ
はやく教えろやくずども
571デフォルトの名無しさん:2009/01/27(火) 22:25:46
念のため言っとくけど、すごいつまんないよ
572デフォルトの名無しさん:2009/01/27(火) 22:26:25
TerminatePerson(>>570);
573デフォルトの名無しさん:2009/01/27(火) 22:37:01
>>570
くずに聞かないとプログラムも書けないお前はなんなんだ?w
574デフォルトの名無しさん:2009/01/27(火) 22:50:09
>>571
で?ソースまだ?
575デフォルトの名無しさん:2009/01/27(火) 22:52:52
WinはGNUじゃないから糞。
576デフォルトの名無しさん:2009/01/27(火) 22:57:36
>>574
まずはお前が目覚ましと時計のソース出せよ
577デフォルトの名無しさん:2009/01/27(火) 22:58:23
GNUとか/.民が好きそうだからおいら嫌い
578デフォルトの名無しさん:2009/01/27(火) 22:59:29
GNUってなに?
579デフォルトの名無しさん:2009/01/27(火) 23:09:30
いつかWin32APIについて質問したくなったときに後悔するよ
580デフォルトの名無しさん:2009/01/27(火) 23:16:56
目覚まし時計が流行ってるのか。
581デフォルトの名無しさん:2009/01/27(火) 23:23:45
このタイミングでなんなんだけどWM_KEYDOWNとかのイベントで、普通に押してるキーを取得するほかに
同時に修飾キーを押してるかどうかをチェックしたいんだけど、メッセージから分かるのはAltキーだけですか?
582デフォルトの名無しさん:2009/01/27(火) 23:24:14
>>576
は?目覚ましって何?!

早くソース作れよこれzipでやるからよ
http://vbvbvb.com/jp/gtips/0751/gGetForegroundWindow.html
583デフォルトの名無しさん:2009/01/27(火) 23:35:03
>>581
GetKeyState
584デフォルトの名無しさん:2009/01/27(火) 23:39:44
ListViewを詳細表示にしていて、
マウスでListViewをドラッグして複数行選択した後、
マウスをドロップ(っていうのかな?範囲選択が終わって、マウスボタンから指を離す事)
した瞬間を捕まえるには、何のメッセージを捕らえれば良いのかな??

ListViewのWM_LBUTTONUPかと思ったんだけど、どうも違うと分かって、
ListViewの親ウィンドウに、WM_NOTIFYで何かのメッセージが飛んで来るんだと思って、
いろいろググってみたけど分からない。

知ってる人がいたら教えて下さい。
585デフォルトの名無しさん:2009/01/27(火) 23:40:37
>>584
Spy++で調べろ
586デフォルトの名無しさん:2009/01/28(水) 00:25:03
587デフォルトの名無しさん:2009/01/28(水) 00:27:23
>>583どうやらそれが妥当みたいですね。ありがとうごぜいました。
588562:2009/01/28(水) 00:35:06
なんか知らないうちにあらされてるな^^;
とりあえず>>562以外は偽者なので無視でお願いします。
以下のソースを書いてみたんだけどなぜかGetWindowTextLengthのところで
エラーになっちゃいます。理由わからないのでどうか教えてくださ〜い。

Dim ret As Long
ret = GetForegroundWindow

Me.Text = "タイトル"

If ret <= 0 Then
Exit Sub
End If

Dim length As Integer = GetWindowTextLength(ret)
If length <= 0 Then
Exit Sub
End If

Dim lpStringBuf As System.Text.StringBuilder
lpStringBuf = New System.Text.StringBuilder("", length + 1)

GetWindowText(ret, lpStringBuf, lpStringBuf.Capacity)
Me.TextBox1.Text = lpStringBuf.ToString
589デフォルトの名無しさん:2009/01/28(水) 00:57:43
GetLastErrorしろ
590デフォルトの名無しさん:2009/01/28(水) 01:46:04
ドザは荒らすのがよほど好きと見える。
591デフォルトの名無しさん:2009/01/28(水) 07:10:32
>>588
お前が荒らしたのはバレバレ
今さら善人ぶって「荒らしたのは偽物なので教えてくれ」なんて言っても説得力皆無
592デフォルトの名無しさん:2009/01/28(水) 07:19:37
DeclareかDllImportAttributeのどっちを使ってるかは知らんが、
そこが間違ってたらそれまでだしなあ。
593デフォルトの名無しさん:2009/01/28(水) 09:53:27
メモリマップドファイルの逆バージョンって無いんですか?
メモリの内容をファイル用APIとかで扱いたい。
594デフォルトの名無しさん:2009/01/28(水) 10:58:07
>>588
HWNDはIntPtrにするのが普通みたいだけど?
595デフォルトの名無しさん:2009/01/28(水) 11:26:08
エラーになっちゃうってそのエラーの内容書いたらいいのに
596デフォルトの名無しさん:2009/01/28(水) 11:27:58
次の縮小処理をもっと高速にする方法はありませんか。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8761.txt
597デフォルトの名無しさん:2009/01/28(水) 11:44:01
インラインアセンブラでMMXを使いベクトル演算
598デフォルトの名無しさん:2009/01/28(水) 11:55:45
>>596
iyの変化に影響せずixの変化に影響するする変数を
予めループの外で計算しておく。(計算結果は配列に入れる)
浮動小数点は極力使わない。(10000倍とかの係数で対応)
599デフォルトの名無しさん:2009/01/28(水) 12:00:14
registerとか古臭い書き方ぽいけど
それだと0.5倍未満でエイリアス出てくるよ。
MMX使えないとしてもDWORDならx8R8G8B8をx16G16とR16B16に分ければ
16bitまでの加算は同時に2つ行える。
0.5倍未満の縮小をちゃんとやりたいならメモリ食うけど2passスケーリングにすると処理量が減る。
600デフォルトの名無しさん:2009/01/28(水) 12:19:26
昨日の者ですが、キーイベントに関してまた質問させてもらいます。
WM_KEYDOWNが来た時にプロシージャ内で仮想キーがテンキーパッドにあるキーだった場合に
GetKeyState関数を使いNumLockが利いているかを最下位ビットを取るという方法でチェックしています。
しかし、何故か方向キーを連続で押すと最下位ビットが0と1を繰り返します。テンキーでない方でも同様でした。
NumLockが押されているかをチェックするのはどうすればいいんでしょうか?
601デフォルトの名無しさん:2009/01/28(水) 12:27:16
>>597-599
難しくてよくわかりません。例を示してくれませんか?
602デフォルトの名無しさん:2009/01/28(水) 12:28:46
補記:MMXは使えません。
603デフォルトの名無しさん:2009/01/28(水) 12:42:10
ここ最近、質問者が何か異常だな
スレ違いにも拘らずここまで答えもらっているのに
返ってきた言葉が「難しくてよくわかりません。例を示してくれませんか?」
よそに池
604デフォルトの名無しさん:2009/01/28(水) 12:44:01
>>603
日本語が難しくてよくわかりません。例を示してくれませんか?
605デフォルトの名無しさん:2009/01/28(水) 12:55:52
つまんね
606デフォルトの名無しさん:2009/01/28(水) 12:56:45
ねんまつ
607デフォルトの名無しさん:2009/01/28(水) 13:19:20
>>603
知らないならレスしないで下さい。ウザいだけです。。。
608デフォルトの名無しさん:2009/01/28(水) 13:20:36
>>600を教えてください。変な流れで質問が流れそうだ・・・
609デフォルトの名無しさん:2009/01/28(水) 13:24:34
>>607
何処の質問スレいってもそればっかりだな
答えてくれなくなるぞ
610デフォルトの名無しさん:2009/01/28(水) 13:27:57
>>609
知らないならレスしないで下さい。ウザいだけです。。。
611デフォルトの名無しさん:2009/01/28(水) 13:30:08
>>610
知らないならレスしないで下さい。ウザいだけです。。。
612デフォルトの名無しさん:2009/01/28(水) 13:40:23
>>608
仮想キーがテンキーだった場合は
NumLock効いてるんじゃないの?
NumLockがオフだとVK_LEFTとかが来るぞ
613デフォルトの名無しさん:2009/01/28(水) 14:38:37
>>600
どんなコードを書いたの?
614デフォルトの名無しさん:2009/01/28(水) 15:31:34
case WM_KEYDOWN:
  if( wp == VK_DOWN ){
    bool numlock = ::GetKeyState(wp)&1;
    ifstream("log.txt") << numlock;
  }
  break;
今チェックしてないですけど、こんな感じで
615デフォルトの名無しさん:2009/01/28(水) 15:35:16
srud(>>611);
616デフォルトの名無しさん:2009/01/28(水) 15:46:00
ctime等で吐いた文字列を、またtime型などに戻す方法を教えていただけませんか?
617デフォルトの名無しさん:2009/01/28(水) 15:53:25
>>616
スレ違いと分かっててわざと言ってるだろお前
618デフォルトの名無しさん:2009/01/28(水) 15:56:16
最新100レスでageて質問してるのは同一人物の荒らしだからスルーしとけ
619デフォルトの名無しさん:2009/01/28(水) 16:05:09
>>617
知らないならレスしないで下さい。ウザいだけです。。。
620デフォルトの名無しさん:2009/01/28(水) 16:16:41
しかし、普通に質問してる人に荒らし疑惑をかけて答えないのでは
スレの価値がないのだ。荒らしが言いたいことは「Linuxを使え」な
のだから。お前たちが改心してLinuxを使わない限り荒らしは収まら
ないだろう。どちらにしろ勝ち目のない戦いを挑んでいることになる。
荒らしを気にするあまり答えなければ荒らしの目論見どおりスレは潰
れる。答えれば荒らしでしたーという感じでバカにされる場合もある。
勝ち目はない。

ここはどうだろう?荒らされるに任せて200スレくらいまで伸ばして
「やはりWinAPIは流行ってるな〜」などと悦にいってみるのは?それも
悪くない。たかがAPIごときで75まで伸びるスレは他にないのだから。
Linux、Mac、UNIXのスレが75まで伸びた頃宇宙歴(Linuxに習ってヲタ
風にしてみた)はいくつだろうか?このスレは数千を超えているだろう。
悪くない。実に悪くない。

嵐に負けず、丁寧に一つ一つ質問に答えていくことを推奨する。

※LinuxはMacでもUNIXでもRubyでも好きに置き換えて読んでいただ
きたい。
621デフォルトの名無しさん:2009/01/28(水) 16:21:51
にわかLinuxヲタうぜーよ
どうせコピペに釣られてUbuntuあたりでポチポチしてたクチだろ
622616:2009/01/28(水) 16:28:22
ごめんなさい…
かなり真面目に質問してました…il|iorz
そしてsage忘れたのも重ねて謝ります…

…スレ違いですか?
.NETスレにでも行けばいいですか?



そして何この流れ
623デフォルトの名無しさん:2009/01/28(水) 16:32:54
ctimeの実装は知りませんが、ctimeというインターフェースはC言語というフレームワークにおけるものです。
Win32APIとは異なります。
624デフォルトの名無しさん:2009/01/28(水) 16:33:37
この板にはLinuxスレが3個ある。すべてネタスレである。Linuxプログ
ラミングのみを扱うスレは無い。Linuxプログラマーなどいない。イン
ストールしただけで開発者を自称するのである。本来Linuxユーザーは
技術板に来てはいけない人種なのだ。来てしまった以上、荒らすのは
当然の成り行きとも言える。板違いなのである。
625デフォルトの名無しさん:2009/01/28(水) 16:38:01
>>622
【初心者歓迎】C/C++室 Ver.63【環境依存OK】
http://pc11.2ch.net/test/read.cgi/tech/1231499251/l50
626デフォルトの名無しさん:2009/01/28(水) 16:54:48
>>624
Linux上の開発環境のほとんどはLinux固有のものじゃないだろうがこの低脳
お前がム板から消えろ
627616:2009/01/28(水) 17:18:18
>>623
あ、ctimeで有る必要は全くなくて、
何か指定したフォーマットで時間を文字列に出力して
文字列を指定したフォーマットで時間に戻すような関数の組み合わせがあれば教えていただけませんか?
628デフォルトの名無しさん:2009/01/28(水) 17:24:30
SystemTimeToFileTime
FileTimeTo??? で最後に time型(time_t ?) に近いもの探して変換代入ぐらいか?
629デフォルトの名無しさん:2009/01/28(水) 17:31:43
Win32で強いて挙げるとしたら、VarDateFromStr/VarBstrFromDateかな。
文字列からの変換はエラー時の処理の要求が千差万別なので、
APIとして用意するのがあまり現実的でないんだよね。
630616:2009/01/28(水) 18:26:00
>>628
>>629
ありがとうございます!
631デフォルトの名無しさん:2009/01/28(水) 18:57:17
>>614
遅くなってすまん。

GetKeyState(VK_NUMLOCK)
632デフォルトの名無しさん:2009/01/28(水) 19:34:56
>>588でソース書いたものなんですがようやくできました
VB、NETだとハンドルはLong型ではなくINT型じゃないと駄目なんですね
勉強になりました
ところでウインドウから取得した情報をもとに、そのウインドウがどんなアプリ(エクセルとかメモ帳とかVBとか)なのかという情報を取得することって出来るでしょうか?
どなたか教えて下さい
よろしくお願いします
633デフォルトの名無しさん:2009/01/28(水) 20:00:48
ちょっと待った。.NETならハンドルはIntPtr型にしろ。
634デフォルトの名無しさん:2009/01/28(水) 20:07:27
>>632
つーかInt型でもマーシャリング時にエラー吐くんじゃないかなあ
.NETスレじゃないのでこれ以上触れないが

ウィンドウからプロセスIDが取れる(GetWindowThreadProcessId)
プロセスIDからプロセスを開き、そこからモジュールのパスが取れる(EnumProcessModules)
ttp://support.microsoft.com/kb/175030/ja

あとは実行ファイル名のデータベース用意するなりなんなりする
635デフォルトの名無しさん:2009/01/28(水) 20:45:08
ResourceHackerみたいに実行ファイルからリソースを取得するには?
636デフォルトの名無しさん:2009/01/28(水) 20:50:19
EnumResourceNamesとか嫁
637デフォルトの名無しさん:2009/01/28(水) 20:50:57
LoadLibraryExにLOAD_LIBRARY_AS_DATAFILE
638デフォルトの名無しさん:2009/01/28(水) 21:38:05
>>3
のリンクの猫でもわかるのサイトを全部理解しできたらプログラマになれますか?
まだ足りないですか?
639デフォルトの名無しさん:2009/01/28(水) 21:41:22
プロなら×
そうじゃないなら自称プログラマ
640デフォルトの名無しさん:2009/01/28(水) 21:41:55
まず就職試験受けて合格して入社してください。
641デフォルトの名無しさん:2009/01/28(水) 21:42:19
プロでも全然理解してないよ
熟知してる人に合うのは稀
642デフォルトの名無しさん:2009/01/28(水) 21:42:57
全部理解してなくても、プログラマとしてどっかの会社に採用されればプログラマ名乗っていいと思うよ。
643デフォルトの名無しさん:2009/01/28(水) 21:49:35
>>641
嘘だろ
猫ぐらいの事は熟知してるだろ
さすがに関数全部は覚えちゃいないが
644デフォルトの名無しさん:2009/01/28(水) 21:50:43
WM_PAINT で BeginPaint せずに GetDC して描画してるコードとかよく見るし・・・
ひでえよ
645デフォルトの名無しさん:2009/01/28(水) 21:53:06
ValidateRectしてやればいいだろ
646デフォルトの名無しさん:2009/01/28(水) 21:57:51
そんなのやってるわけないだろ
647デフォルトの名無しさん:2009/01/28(水) 21:59:01
まともに動いてるならやってあるだろ
648デフォルトの名無しさん:2009/01/28(水) 21:59:44
やってないんですよ!!! それが!!!
649デフォルトの名無しさん:2009/01/28(水) 22:01:00
>>644
おいおい、Windowはお前と違って忙しいんだから
描画ぐらいWM_PAINTなんてしないで、Windowに好きにやらせろよ
650デフォルトの名無しさん:2009/01/28(水) 22:01:51
だからつまんないっての
651デフォルトの名無しさん:2009/01/28(水) 22:02:48
DefWindowProcに流してれば、Begin/EndPaintが呼ばれるので問題ない。
ValidateRectよりは可能性高い気がしないか?
652デフォルトの名無しさん:2009/01/28(水) 22:02:50
やってないとWM_PAINTがずっと発生してまともに動かないだろ
653デフォルトの名無しさん:2009/01/28(水) 22:04:25
654デフォルトの名無しさん:2009/01/28(水) 22:04:39
まあ DefWindowProc は呼ばれてた気はするが、
BeginPaint 使わないと上にあるコントロールなどの上から描画しちゃったりするんだよな
655デフォルトの名無しさん:2009/01/28(水) 22:12:17
お前らよりWindowsプログラミングについて詳しく、ちゃんと根拠ないしアプリケーションの制約があるからそうしてるに決まってるだろ
656デフォルトの名無しさん:2009/01/28(水) 22:14:21
break; が好きなだけだろ
657デフォルトの名無しさん:2009/01/28(水) 22:15:35
>>655
バグだからって俺が修正したというのに
658デフォルトの名無しさん:2009/01/28(水) 22:24:38
>>634
さんくす
659デフォルトの名無しさん:2009/01/28(水) 23:10:55
>>631ありがとうございます。それでNumlockがONかどうかは分かりました。
しかし、やりたいのは”押された方向キーがテンキー上のものかどうか”をチェックすることでして、
それだと、まったく意味がありませんでした。このようなチェックってどうやるんでしょうか・・・?
660デフォルトの名無しさん:2009/01/28(水) 23:11:23
このスレッドは天才チンパンジーシミュレータ「iちゃん」が
言語訓練のために立てたものです。

iちゃんと調教サーバのトランザクションに利用するスレッドなので、
関係するプロセス内のスレッド以外からは書きこまないで下さい。
661デフォルトの名無しさん:2009/01/28(水) 23:13:00
>>659
VK_LEFT等の値が来たとしたらそれはNumLockがOnのテンキーではあり得ないんじゃないのか
662デフォルトの名無しさん:2009/01/28(水) 23:27:29
>659
流れを読まずにレスするけど、WM_KEYDOWNのlParamのbit23-16のスキャンコードかbit24を
見るしかないんじゃないかな。
663デフォルトの名無しさん:2009/01/28(水) 23:35:13
>>661
一応思ってたことができたんで報告。
VK_LEFTはNumlockがオフの時、方向キーとテンキー両方から送られてきます。
用はこの時どちらが押されたのかを調べたかったんですが、どうやらこれらはLPARAMの24ビット目(拡張ビット)を
見ることで分かるようです。
後でこれを見るかもしれない人のために張っときます。

bool numlock = false;
if( wp == VK_RETURN ){
  numlock = lp&0x1000000;
}else
if( (wp >= VK_PRIOR && wp <= VK_DOWN) || wp == VK_INSERT || wp == VK_DELETE || wp == VK_CLEAR ){
  numlock = (lp&0x1000000)==0;
}

GetKeyState要りませんでした。
664デフォルトの名無しさん:2009/01/28(水) 23:35:59
>>662おっとすいません。リロードしてなかったもんで。どうやらその通りでした。
665デフォルトの名無しさん:2009/01/28(水) 23:36:21
>>634
解説ありがとうございました。
とても参考になったんですが、いろいろやってみて
アクティブになったウィンドウのプロセスIDを取得することはできたんですが、
アプリケーション名を取得することがなかなかできませんでした・・・。
すいませんがもう少しヒントをよろしくお願いいたします。
666デフォルトの名無しさん:2009/01/28(水) 23:39:46
アプリケーション名って何よ
667デフォルトの名無しさん:2009/01/28(水) 23:42:08
>>665
いい加減VBスレか.NETスレ行けよ
668デフォルトの名無しさん:2009/01/28(水) 23:44:59
>>665
>プロセスIDからプロセスを開き、そこからモジュールのパスが取れる
OpenProcess→EnumProcessModules→GetModuleFileNameEx

これで全てな気がするが…
ヒントって何だ

>>666
プロセスを生成したモジュールファイル名じゃないの
669デフォルトの名無しさん:2009/01/28(水) 23:52:23
>>668
助かりましたありがとうございます!
いろいろと無知ですみません!
670デフォルトの名無しさん:2009/01/28(水) 23:53:13
>>668
.NET Frameworkでなんかあったはずだから、VB.NETスレで聞いたほうがいいと思うんだよな。
671668:2009/01/28(水) 23:58:27
俺もProcessクラスのMainModuleプロパティとか使った方が速いと思うけど

わざわざAPIでやりたい物好きのようだから、APIで答えてあげたよ
俺って超優しい
672デフォルトの名無しさん:2009/01/29(木) 00:18:32
>>671
できました!
MainModuleのほうでやりました。
しかし、vb.netにこんなべんりな関数があったなんて。
勉強になりました。ありがとうございました。
673668:2009/01/29(木) 00:21:46
死ね
674デフォルトの名無しさん:2009/01/29(木) 00:26:24
>>673
その気持ちすごくわかる
675デフォルトの名無しさん:2009/01/29(木) 00:27:58
おまいらって、コンパイル
マルチバイト、海栗
どっちでしている?
676デフォルトの名無しさん:2009/01/29(木) 00:33:02
VSのデフォが海胆になったので海胆で良いと思った。
677デフォルトの名無しさん:2009/01/29(木) 01:48:59
ChangeDisplaySettingsでセカンダリディスプレイの解像度変えられますか?
678デフォルトの名無しさん:2009/01/29(木) 01:51:54
知らないから質問しないでください
679デフォルトの名無しさん:2009/01/29(木) 01:57:42
MSDN読めよ
一行目に書いてあるから
680デフォルトの名無しさん:2009/01/29(木) 03:43:39
読んだけど分からなかった。ChangeDisplaySettingsExではいけるけど、ChangeDisplaySettings
では無理ってこと?
681デフォルトの名無しさん:2009/01/29(木) 04:09:35
あれが分からないとなると
説明しても理解する努力をしてもらえなさそうだな
682デフォルトの名無しさん:2009/01/29(木) 04:13:30
理解する能力が欠けてるんだよ
昔はこんなスレなんか無かったからな一人で頑張ったもんさ
683デフォルトの名無しさん:2009/01/29(木) 04:55:19
cygwinで音を出したい.
http://wisdom.sakura.ne.jp/system/winapi/media/mm6.html
のコードを
g++ wave.cpp -lwinmm -lgdi32
でコンパイルは通る&音出るけど,動作が停止する.なぜ?
こちらvista bussiness & g++ 3.4.4
684デフォルトの名無しさん:2009/01/29(木) 06:31:22
VistaのMMEエミュレーションはそんなに優しくないらしいよ。
シングルバッファで結構エグい再生の仕方してるせいで
waveOutWriteが返って来ずにメッセージループが止まってるとか。
もしくは単にドライバが腐ってるだけとか。
685デフォルトの名無しさん:2009/01/29(木) 07:18:03
>>684
Win32s 対応もそろそろ厳しいな
686デフォルトの名無しさん:2009/01/29(木) 07:38:21
MS謹製ラッパは滅びぬ。何度でもよみがえるさ。
687デフォルトの名無しさん:2009/01/29(木) 07:56:32
waveOutは、10年前にWindows98でDirectSoundが
標準で再生できるようになった時点で用済みだろ。
昔は腐ったドライバもあったからまだ検討する価値も多少あったが、
完全にエミュレーションとなった今では全く無意味だな。
688デフォルトの名無しさん:2009/01/29(木) 09:39:01
質問

Hwnd = CreateWindowEx(WS_EX_TOOLWINDOW | WS_EX_TOPMOST | WS_EX_LAYERED, "", "",
WS_POPUP, x, y, WIDTH, HEIGHT, NULL, NULL, GetModuleHandle(NULL), NULL );

SetLayeredWindowAttributes(Hwnd, RGB(255, 255, 0), 0, LWA_COLORKEY);

こういう感じで子ウィンドウの透明化していたんですけど
windows2000使っていた時は問題なく動いていたのに、XPsp3だと全く見えなくなってしまいました。
(WS_EX_LAYERED外すとxpでもちゃんと動く)

xpでWS_EX_LAYERED指定した時点で見えなくなるのはいいんですが
SetLayeredWindowAttributes が全然効いてない感じです。

なにか間違っているところありますかー
689デフォルトの名無しさん:2009/01/29(木) 12:30:23
>>688
>こういう感じで子ウィンドウの透明化していたんですけど

WS_EX_LAYERED
Windows 2000/XP: Creates a layered window. Note that this cannot be used for child windows.
                                   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Also, this cannot be used if the window has a class style of either CS_OWNDC or CS_CLASSDC.
690デフォルトの名無しさん:2009/01/29(木) 12:41:24
683です.
cygwinのdefaultのg=++からMinGWのg++に変更したらあっさり解決しました.
Vistaが原因なのかcygwinが原因なのかはわからずじまい.
691デフォルトの名無しさん:2009/01/29(木) 12:44:27
>>689
すみません子は書き間違いでした
692デフォルトの名無しさん:2009/01/29(木) 12:53:00
>>691
XP SP3だけど試しにやってみたら普通にできるが。
なにか別のところでヘマやってるんじゃないの?
693デフォルトの名無しさん:2009/01/29(木) 13:28:31
>>692
確かに別のところでヘマしてるかもしれませんが
何故か2000では問題なし
どこが怪しいのかもわかりません…
694デフォルトの名無しさん:2009/01/29(木) 13:30:19
頑張ってデバッグしてくれw
695デフォルトの名無しさん:2009/01/29(木) 13:41:58
>>693
まずレイヤードウィンドウの単純なテストプログラムでも作って動作確認してみなよ。
それで動くんなら自分のプログラムに不備があるんだろう。
696デフォルトの名無しさん:2009/01/29(木) 13:52:17
>>695
出かけねばならず後でちょっと作ってみます
697デフォルトの名無しさん:2009/01/29(木) 15:39:07
たまたまうまく動いていたものが動かなくなった好例ですね
698デフォルトの名無しさん:2009/01/29(木) 15:41:45
黙れクズ
699デフォルトの名無しさん:2009/01/29(木) 15:46:06
とクズが申しております。
700デフォルトの名無しさん:2009/01/29(木) 15:59:17
DCB構造体についてなのですが

DCB構造体のメンバ
EofChar; /* EOF文字 */
EvtChar; /* イベント通知文字 */

イベント開始とEOFを検出するとどのような動作をするのでしょうか?
701デフォルトの名無しさん:2009/01/29(木) 21:57:52
マウスホバリングについて

_TrackMouseEventが返り値1でdwFlagsがTME_LEAVEの時に
WM_MOUSELEAVEがまったく飛んできません。ちなみにTME_HOVERにしたらWM_MOUSEHOVERは飛んできました。
何が悪いんでしょうか?
702デフォルトの名無しさん:2009/01/29(木) 22:48:29
ListViewを詳細表示にして、
データが入っているカラムの上からドラッグを始めて、
そのまま複数のアイテムを選択する方法ってありますか??
703デフォルトの名無しさん:2009/01/29(木) 23:02:35
どゆこと?
704デフォルトの名無しさん:2009/01/29(木) 23:04:28
>>695
さっそく単純な窓のみのプログラムを作ったところ問題無く透明化出来ました。

実は出来ないと言った問題のプログラムは、2枚ウィンドウがあるのです。
2000の時は、一枚目をHIDEにして2枚目を透明化していました。

XPで2枚のウィンドウを表示させるだけのプログラムを作ったところ
一枚目は透明化出来るんですが、2枚目がどうしても出来ません。
制限でもあるのでしょうか?
705702:2009/01/29(木) 23:08:01
>>703
ListViewは、
右余白(データの入っていない部分)をクリックしてドラッグを始めると、
普通に複数行選択できますが、
データの入っている部分をクリックしてドラッグを始めると、複数行選択できません。

これの解決方法がぜひ知りたいのです。
(結構ググッたのですが、探し出せませんでした。
 もしかして不可能だったりするのでしょうか・・・)
706デフォルトの名無しさん:2009/01/29(木) 23:14:06
>>704
ソースうp
707デフォルトの名無しさん:2009/01/29(木) 23:59:22
>>706
余計なゴミとか削って70行になったけど
ここでいいのかな
708デフォルトの名無しさん:2009/01/30(金) 00:00:40
うpろだにうpしてリンク貼ろう
709デフォルトの名無しさん:2009/01/30(金) 00:14:02
>>708
ttp://www1.axfc.net/uploader/File/so/17680

これでいいのかな
おねがいします
710デフォルトの名無しさん:2009/01/30(金) 00:31:43
すいません>>701お願いします。
コード抜粋するとこんな感じです。
case WM_MOUSEMOVE:
  if(!hover){
    TRACKMOUSEEVENT tme;
    tme.cbSize = sizeof(TRACKMOUSEEVENT);
    tme.dwFlags = TME_LEAVE;
    tme.hwndTrack = hwnd;
    hover=true;
    _TrackMouseEvent(&tme);
  }
  break;
case WM_MOUSELEAVE:
  hover = false;
  break;
711デフォルトの名無しさん:2009/01/30(金) 01:38:54
コントロールパネルの電源オプションのプロパティの
「システム スタンバイ」「システム 休止状態」についてですが、
このシステムのアイドル時間が今いくらかを知る方法はなかったでしょうか?

起動しているといくら待ってもスタンバイにならないプログラムがあって
原因が何なのか調べたいのですが、毎回1分待っていてはきりがないので……。
712デフォルトの名無しさん:2009/01/30(金) 01:56:54
>>709
staticだから
てかWM_DESTROYでDestroyWindowって・・
713デフォルトの名無しさん:2009/01/30(金) 02:08:46
714デフォルトの名無しさん:2009/01/30(金) 02:46:06
変態
715デフォルトの名無しさん:2009/01/30(金) 04:10:03
>>712
> WM_DESTROYでDestroyWindow
WM_DESTROYが無限再帰してスタックオーバーフローするのを期待して試したら何も起きなかったw
DestroyWindow側で再入防止の対策してあるのかな
716デフォルトの名無しさん:2009/01/30(金) 04:30:37
>>712
まだわからないです…
そこを変えまくっても色々変えまくっても変化なく
2000では普通に表示される…
717デフォルトの名無しさん:2009/01/30(金) 05:03:38
>>712
あ、できました
寝ぼけててちゃんとクラス設定してなかったけど
したら出来ました…こんな簡単なことだったのかあ
助かりました。

でもよくわからないのが、2000だと別に定義済みクラスでもなんでも
普通に透明化出来るんですよね


うpの為の適当なソースなので他のところあまりいじらんでくださいw
ありがとうございました
718デフォルトの名無しさん:2009/01/30(金) 08:29:41
やりたいこととしては、吉里吉里とDXライブラリを同ウィンドウで処理することなんですが


WinAPIでウィンドウ作って
その子ウィンドウとして、ある.exeファイルを起動(吉里吉里)
そして、通常は霧きりで進行、なんらかのフラグでDXライブラリに移行
みたいなのを創造しているのですが、これは可能なのでしょうか?

知識があまり無いので勘違いしまくりの発言だったらすいません
719デフォルトの名無しさん:2009/01/30(金) 08:48:29
無理
720デフォルトの名無しさん:2009/01/30(金) 08:50:44
ちなみに無理である理由を細かく挙げてやろうと思ったが
知識がないからと前置きされてしまったので止めた。すまぬ
721デフォルトの名無しさん:2009/01/30(金) 08:52:45
>>720
もしよければあげてもらえると嬉しいです
WinAPIは勉強中なので、これから理解できるかもしれませんし
722デフォルトの名無しさん:2009/01/30(金) 08:55:22
>>721
最悪自分で吉里吉里のソースいじる根性があるなら不可能じゃないが。
質問文のレベルからするとすっぱり諦めたほうが早いな。
723デフォルトの名無しさん:2009/01/30(金) 08:57:07
吉里吉里を起動、待機させておく
そして、もう一つのアプリ起動し、描画先を吉里吉里で作ったウィンドウにする
これでできる
724デフォルトの名無しさん:2009/01/30(金) 09:02:46
>>701>>710お願いします。
725デフォルトの名無しさん:2009/01/30(金) 12:43:27
WM_MOUSEHOVER時にTrackMouseEvent 呼んでないんじゃない?
726デフォルトの名無しさん:2009/01/30(金) 13:31:00
>>720
俺も無理である理由に興味あるなぁ。なんで?
727デフォルトの名無しさん:2009/01/30(金) 14:22:40
>>725やってもできませんでした・・・。
しかもやっぱりWM_MOUSEHOVERすら来ていないようです。
728デフォルトの名無しさん:2009/01/30(金) 16:57:49
質問です。

現在のシングルスレッドアプリケーションは下記のような仕組みでやっています。
最初はSleepすら入れなかったため、CPU使用率が100%近くなってしまいました。

で、一番良いのは GetMessageにタイムアウト時間を設定できることなのですが、そういうAPIは無いでしょうか?


if (::PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE))
{
 if (::GetMessage(&msg, NULL, 0, 0))
 {
  ::TranslateMessage(&msg);
  ::DispatchMessage(&msg);
 }
 else
 {
  break;
 }
}
else
{
 run(); // 内部で1フレーム分時間が経ったかチェックして、経っていなかったら::Sleep(1);して何もせずに制御を返す
}
729デフォルトの名無しさん:2009/01/30(金) 16:58:47
すいません、全体を while(true)で囲んでいるのをコピーするの忘れました。

実際は最初の行の前にwhile(true){があり、最後の行の下に } があります。
730デフォルトの名無しさん:2009/01/30(金) 17:10:29
そんな馬鹿な
731デフォルトの名無しさん:2009/01/30(金) 17:15:22
何か解決策があるなら俺も知りたい。
俺では思いつかなかったから、結局スレッド分けてる。
732デフォルトの名無しさん:2009/01/30(金) 17:22:22
MsgWaitForMultipleObjects で
シグナルにならないダミーイベントwait をタイムアウト付きでやるぐらい?
733デフォルトの名無しさん:2009/01/30(金) 17:37:54
>>732
ありがとうございます。
試してみたところ、なかなか良い動きをしてくれているようです。

MsgWaitForMultipleObjectsExのほうでないと「すでにイベントキューが貯まっているか」を見てくれないようなので、Exを使いました。

シングルスレッドで十分なちょっとしたツールの時など、役に立ちそうです。
734デフォルトの名無しさん:2009/01/30(金) 17:55:10
質問があります。
リストビューを登録しました
LV_ITEM item;

item.mask = LVIF_TEXT | LVIF_PARAM;
item.pszText = "AAA";
item.iItem = 0;
item.iSubItem = 0;
item.lParam = 1;
ListView_InsertItem(hList, &item);
別の関数で item.lParam が持つ値を知りたいです。(この場合、1ですが)ListView_○○とかマクロがあったと思うのですが忘れてしまって困ってます
lParamが持ってる値を知る方法知りませんか?
735デフォルトの名無しさん:2009/01/30(金) 18:01:36
その程度CommCtrl.hでも見ろよ
736デフォルトの名無しさん:2009/01/30(金) 18:41:13
助言ありがとうございます。
commctrl.hに載ってるのを忘れてました。感謝です。
737デフォルトの名無しさん:2009/01/30(金) 20:03:45
どーでもいい話だが
Sleepは0が基本で、それでもCPU 100%になるようなら
少しずつ値を増やしていく
738デフォルトの名無しさん:2009/01/30(金) 20:07:27
まあSleep(1)が妥当だよな。そんな速度欲しい処理でもなけりゃ
739デフォルトの名無しさん:2009/01/30(金) 20:08:23
sleep()笑
740デフォルトの名無しさん:2009/01/30(金) 20:27:39
sleep()笑ってどういうこと?
もっといい方法があるの?
それともただの馬鹿なの?死ぬの?
741デフォルトの名無しさん:2009/01/30(金) 20:36:19
0だと、実行中の同じ優先度のスレッドが無い時は直ぐ戻ってくるからな。
1の方が良いかもしれんね。

それにしてもWindows7SDKになっても未だに、
Sleepの分解能上げたかったら、timeBeginPeriod使えって書いてあるのな。
もう少しMMCSSをプッシュしても罰は当たらないと思うんだ。
742デフォルトの名無しさん:2009/01/30(金) 21:23:08
bitmapのプレビューをdialogに表示するために
SetDIBitsToDevice(hdc,
0, 0, //転送先座標
wx, wy, //幅、高さ
0, 0, //転送元座標
0, wy, //走査開始番号、走査線の本数
//ビットマップデータ開始のアドレス
(char *)szBuffer + dwOffBits - sizeof(BITMAPFILEHEADER),
lpbmp_info, //BITMAPINFO構造体へのポインタ
DIB_RGB_COLORS);
をやっているのですが、これだとそのままbmpが表示されてしまいます。
たとえば4167×4167の画像を表示しようとするとDialogがくそでかくなってしまいます。
そこでbitmapを「縮小」してプレビューしたいのですが
どうしたらいいですか?
743デフォルトの名無しさん:2009/01/30(金) 21:31:07
StretchDIBits
そのサイズだと古いOSとか場合によっては失敗するけどな。
744デフォルトの名無しさん:2009/01/30(金) 22:02:42
GDI+で縮小すればいいじゃん
745デフォルトの名無しさん:2009/01/30(金) 22:13:07
GDI+といえば、マルチスレッドのプログラムで動かしてたらフォントの作成あたりで何回か例外で落ちたんだけど、そういうものなの?
746デフォルトの名無しさん:2009/01/30(金) 22:16:40
タスクトレイにアイコンを表示させようとしてるんですが透明?なアイコンしか表示されません。
トレイにカーソルを持ってくるとソフト名はポップアップされますが見えないんです。
case WM_CREATE:
hIcon = LoadIcon(NULL,".rcにあるアイコン名");
nIcon.cbSize = sizeof(NOTIFYICONDATA);
nIcon.hWnd = hwnd;
nIcon.uID = 0;
nIcon.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP;
nIcon.uCallbackMessage = WM_USER + 1;
nIcon.hIcon = hIcon;
lstrcpy(nIcon.szTip,"ソフト名");
Shell_NotifyIcon(NIM_ADD,&nIcon);
何がいけないんでしょ?
747デフォルトの名無しさん:2009/01/30(金) 22:25:17
hIcon = LoadIcon(NULL,".rcにあるアイコン名");

どう考えてもこれだろ
748デフォルトの名無しさん:2009/01/30(金) 22:25:20
> hIcon = LoadIcon(NULL,".rcにあるアイコン名");
749デフォルトの名無しさん:2009/01/30(金) 22:29:47
*縮小処理はうまくいきました。
>>743 ありがと
で、
GDI+でぐぐっても有益な情報がでてこない。
GDI+について何かおすすめの「本」ありますか?
750デフォルトの名無しさん:2009/01/30(金) 22:32:49
gdiplusでぐぐれ
751デフォルトの名無しさん:2009/01/30(金) 22:34:50
>>749
.NET関連の本ぐらいしか日本語で読める書籍はなかろう。
普通にWin32APIとC++理解してるならMSDNの情報だけで概ね事足りると思うが。
752デフォルトの名無しさん:2009/01/30(金) 22:39:43
>>747-748
別の書き方しないとダメですか。
753デフォルトの名無しさん:2009/01/30(金) 22:40:12
>>749
Graphics::DrawImageで幅と高さを指定するだけなのに情報も何も
754デフォルトの名無しさん:2009/01/30(金) 22:49:32
>>741
Google ChromeがtimeBeginPeriod(1)を呼ぶせいで、
CPU仕様率が上がってうるさいという話があるわけで、そう簡単な話でもないようだ。
http://www.google.co.jp/search?hl=ja&q=timeBeginPeriod+chrome
755デフォルトの名無しさん:2009/01/30(金) 22:49:37
で、マルチスレッドでGDI+は使っていいのか?悪いのか?
756デフォルトの名無しさん:2009/01/30(金) 22:53:57
>>755
スレッドセーフに作らなければ何使ってもダメだろ

>>741
Sleep(1);だと10msぐらい返って来なくね?
ちょっと時間掛かりすぎだと思
757デフォルトの名無しさん:2009/01/30(金) 22:54:15
とりあえずGdiplusStartupと対応するGdiplusShutdownは違うスレッドで呼んでもいいと書いてある。
http://msdn.microsoft.com/en-us/library/ms534077.aspx

だから、おそらくスレッド毎にGdiplusStartupとGdiplusShutdownに呼ぶ必要もないし、
複数スレッドで使ってもいいのだろうと俺は思う。
758デフォルトの名無しさん:2009/01/30(金) 22:55:41
同じオブジェクト同時に触らないようにして普通にマルチスレッドで使ってるよ。
759デフォルトの名無しさん:2009/01/30(金) 23:04:39
親WindowのEditBoxの文字列を取得するにはどうしたらいいですか?

子Dialogで
hDlg_a=GetParent(hDlg);
// GetDlgItemText(hDlg_a,IDC_EDITBOX,FileName,(int)sizeof(FileName)-1);

とかいてもうまくFileNameに文字列が入りません。
760デフォルトの名無しさん:2009/01/30(金) 23:15:24
>>757-758
d
だったら落ちるプログラムはクリティカルセクションで排他かけてるからDLLが落ちる理由があるならGDI+の内部で性的変数が使われてるのかと思ったんだけど、違うみたいだね。。。

けどシングルスレッドの状態では落ちないんだよなぁ。
なんでマルチスレッドだとフォントの作成辺りで落ちるのか……
フォントファイルに排他ロックでも掛けてるのかねぇ。
761デフォルトの名無しさん:2009/01/30(金) 23:22:54
ツールバーにボタン以外の独自のウインドウを追加したいのですが、
どうやればよいのでしょうか?
762デフォルトの名無しさん:2009/01/30(金) 23:30:38
>>760
他人のせいにする前に自分のプログラムを一寸たりとも疑わないその馬鹿さ加減は、
きっと死ぬまで治らないんだろうな。
763デフォルトの名無しさん:2009/01/30(金) 23:39:58
>>762
当たり前だけど疑ったあとです。
その決め付け癖はきっと死ぬまで治らないんだろうな。
764デフォルトの名無しさん:2009/01/30(金) 23:41:09
ここで言い合っても机上の空論
765デフォルトの名無しさん:2009/01/30(金) 23:49:50
>763
自分が無能で発見できないだけということを、一寸たりとも疑わないその馬鹿さ加減は、
きっと死ぬまで治らないんだろうな。
766デフォルトの名無しさん:2009/01/30(金) 23:51:40
いやでも落ちるまではいかないけど、
マルチスレッドだと性能が落ちるって話は聞いたことある。
個人的にはマルチスレッドとの相性が良くないのかなとは思う。
767デフォルトの名無しさん:2009/01/31(土) 00:03:32
聞いたことがあるとか、思うとか、
情報のソースがあるわけでもなく、自分で実験したわけでもないのに、
信憑性がまったくないことを既成事実のように語り始めるやつってなんなの?
768デフォルトの名無しさん:2009/01/31(土) 00:08:17
巨大なテクスチャを2スレッドで小さい画像として沢山
画面に描画したことあるけど普通に性能上がってたけどな。
書き込みだったら性能落ちるかもしれないけど。
769デフォルトの名無しさん:2009/01/31(土) 00:08:35
>>767
いやでも落ちるまではいかないけど、
マルチスレッドだと性能が落ちるよ。
マルチスレッドとの相性が良くない。

↑こう書かれるより全然ましってことですね。 分かります。
770デフォルトの名無しさん:2009/01/31(土) 00:08:50
親WindowのEditBoxの文字列を取得するにはどうしたらいいですか?

子Dialogで
hDlg_a=GetParent(hDlg);
GetDlgItemText(hDlg_a,IDC_EDITBOX,FileName,(int)sizeof(FileName)-1);

とかいてもうまくFileNameに文字列が入りません.
771デフォルトの名無しさん:2009/01/31(土) 01:04:41
lstrlen
772デフォルトの名無しさん:2009/01/31(土) 01:16:43
質問です。
別々のUSBポートにつなげたキーボードのキーってそれぞれどちら側のキーボードのキーが
押されたかって判別できるものですか?
773デフォルトの名無しさん:2009/01/31(土) 01:46:27
>>767
知らないのにレスするのはやめてください。うざいです。
774デフォルトの名無しさん:2009/01/31(土) 01:49:14
ポップアップメニューって普通上下に並ぶけど左右に並べれる?
775デフォルトの名無しさん:2009/01/31(土) 02:22:42
MF_MENUBREAKをたんまりとぶちこめ
776デフォルトの名無しさん:2009/01/31(土) 02:44:30
モニターを90度回転しろ
777デフォルトの名無しさん:2009/01/31(土) 02:49:54
斬新すぎんだろバカ
778デフォルトの名無しさん:2009/01/31(土) 03:17:00
>>772
XP以降ならRaw Input APIで出来るらしい。
779デフォルトの名無しさん:2009/01/31(土) 10:56:14
WinSockでデスクトップイメージの通信を行っていますが、
クライアントの接続を切ったとたんに、サーバーが異常終了して
しまいます。原因がわかりませんか?

http://uproda11.2ch-library.com/src/11154199.zip.shtml

お願いします。
780デフォルトの名無しさん:2009/01/31(土) 11:21:37
>>770
なんでGetParentを呼んでるの?
781デフォルトの名無しさん:2009/01/31(土) 11:44:07
>>770
FileNameが配列じゃなくてポインタだったら、Cの初歩からやり直せ。
782779:2009/01/31(土) 12:28:42
おーーーい、わかる奴いないのか!?
783デフォルトの名無しさん:2009/01/31(土) 12:32:15
デバッグは自分でやれ
784デフォルトの名無しさん:2009/01/31(土) 12:33:08
BackDoorなんてしらんがな
785デフォルトの名無しさん:2009/01/31(土) 12:35:01
わからないから質問しないで下さい、ウザイだけです。
786デフォルトの名無しさん:2009/01/31(土) 12:35:44
っていうかネットワークプログラミングスレ池
787779:2009/01/31(土) 12:39:28
>>786
逝ってきます(泣
788デフォルトの名無しさん:2009/01/31(土) 12:44:42
char FileName[256];
hDlg_a=GetParent(hDlg);
GetDlgItemText(hDlg_a,IDC_EDITBOX,FileName,(int)strlen(FileName));

親DialogのハンドルをとるためにGetParentを呼んでいます。
789デフォルトの名無しさん:2009/01/31(土) 12:46:06
>>788
その strlen に意味はあるの?
790デフォルトの名無しさん:2009/01/31(土) 12:47:12
IDC_EDITBOXの定義は?
791デフォルトの名無しさん:2009/01/31(土) 13:18:40
ああ、親ウィンドウのエディットボックス内の入力されている
ファイル名を子ウィンドウで取得させて処理させたいって事か・・・やっと意味がわかった

どのタイミングでさせたいの?場合によっては独自定義メッセージでさせちゃうとかすりゃいいのに
792デフォルトの名無しさん:2009/01/31(土) 13:26:49
まずGetDlgItemしてちゃんとハンドルが取れるか確認しろ
話はそれからだ
>>789 たぶん>>771が悪い
793デフォルトの名無しさん:2009/01/31(土) 14:25:13
GetDlgItemText(hDlg_a,IDC_EDITBOX,FileName,255);
794デフォルトの名無しさん:2009/01/31(土) 19:41:35
>>793
255じゃなくて256だろ
795デフォルトの名無しさん:2009/01/31(土) 20:25:55
>>794
1バイトで一々うるさい奴だな
796デフォルトの名無しさん:2009/01/31(土) 20:32:38
1バイトを笑う者は1バイトに笑われる
797デフォルトの名無しさん:2009/01/31(土) 20:37:27
正社員?
798デフォルトの名無しさん:2009/01/31(土) 20:47:51
バッファ長を間違う奴はWin32APIを理解してない証拠。
そんな奴>>793には回答する資格は無い。去れ。
799デフォルトの名無しさん:2009/01/31(土) 20:59:16
256文字超えたら結局0終端じゃなくなるよね。危なくない?
800デフォルトの名無しさん:2009/01/31(土) 21:05:35
>256文字超えたら結局0終端じゃなくなるよね。危なくない?
妄想でありもしない勝手な仕様を考える馬鹿って、いつになったら絶滅してくれるんだろう?
801デフォルトの名無しさん:2009/01/31(土) 21:05:37
MSDN読めよハゲ
802デフォルトの名無しさん:2009/01/31(土) 21:11:09
>>778
ありがとうございます!
調べてみます。
803デフォルトの名無しさん:2009/01/31(土) 21:11:38
すまん見てきた、文字切り捨てるてのは最後の1文字は0入れてくれるて事?
804デフォルトの名無しさん:2009/01/31(土) 21:18:10
>>803
文字列終端文字は無視
最大文字数までに文字列を切り詰めちゃうから
最大数-1して終端に終端文字追加しないとだめぽ
805デフォルトの名無しさん:2009/01/31(土) 21:19:21
なんのための文字数指定だよ
806デフォルトの名無しさん:2009/01/31(土) 21:27:35
// GetDlgItemText
// 戻り値
// 関数が成功すると、バッファへコピーされた文字列の長さ( 終端の NULL を含まない)が TCHAR 単位で返ります。

ということで終端には NULL がある。
807デフォルトの名無しさん:2009/01/31(土) 21:39:28
>>804
こういう嘘を堂々と言うバカってまだいるんだな
808デフォルトの名無しさん:2009/01/31(土) 21:42:51
>>806
戻り値じゃなくてこっちだろ

> nMaxCount
> [in] Specifies the maximum length, in TCHARs, of the string to be copied to the buffer pointed to by lpString.
> If the length of the string, including the NULL character, exceeds the limit, the string is truncated.
809デフォルトの名無しさん:2009/01/31(土) 21:45:21
srud(>>807);
810デフォルトの名無しさん:2009/01/31(土) 21:48:02
>>809=>>804
馬鹿は黙ってろ
811デフォルトの名無しさん:2009/01/31(土) 21:49:21
APIが終端文字まで入れるかどうかってこと?
812デフォルトの名無しさん:2009/01/31(土) 21:50:56
GetModuleFileNameなどの一部例外を除けばNULLまで入れてくれる
こんなの常識
813デフォルトの名無しさん:2009/01/31(土) 22:11:08
次の患者さんどうぞ〜
814デフォルトの名無しさん:2009/02/01(日) 00:39:22
タブコントロールにリストビューを表示したいんですがうまくいきません
タブのファイラーみたいな感じです
アドバイスお願いします
815デフォルトの名無しさん:2009/02/01(日) 01:39:49
回答者はエスパーじゃない。どううまくいかないかを書かないでどうやってアドバイスしろというのか?
816デフォルトの名無しさん:2009/02/01(日) 01:54:26
>>814
がんばれ!
以上。
817デフォルトの名無しさん:2009/02/01(日) 02:09:09
>>815
エスパーじゃない人はお引き取りください
818デフォルトの名無しさん:2009/02/01(日) 02:10:22
>>815
応援してる!
以上。
819デフォルトの名無しさん:2009/02/01(日) 02:32:19
>>817
大好き!
以上。
820デフォルトの名無しさん:2009/02/01(日) 02:35:48
知らないから質問しないでください。ウザイだけです。
821デフォルトの名無しさん:2009/02/01(日) 02:37:17
>>1024
キリ番!
以上。
822デフォルトの名無しさん:2009/02/01(日) 02:39:36
ssud(>>820);
823デフォルトの名無しさん:2009/02/01(日) 04:05:57
>GetModuleFileNameなどの一部例外を除けばNULLまで入れてくれる
GetModuleFileNameって結構使うのにエラー判定は弱いよな……
824デフォルトの名無しさん:2009/02/01(日) 06:52:24
>>823
MS的な正しい使い方 (最近のSDK Helpには無くなってるが)
まあ、例えば "ファイル名.ini" を作る類いのソフトならこれくらいすべきだと思うけど。

static const TCHAR szManifest[] = TEXT(".manifest");
static const DWORD cchManifest = sizeof(szManifest) / sizeof(szManifest[0]);
ULONG dwChars;
TCHAR ModuleFileNameBuffer[MAX_PATH];
TCHAR lpsz = ModuleFileNameBuffer;
DWORD dwModuleFileNameBufferAvailable = sizeof(ModuleFileNameBuffer) / sizeof(TCHAR);

// Keep trying until we run out of space, or until we fetch the name of the module.
do
{
  dwChars = GetModuleFileName(NULL, lpsz, dwModuleFileNameBufferAvailable);
  if (dwChars == 0)
    ReportLastErrorAndExit("GetModuleFileName(...)");
  if ((dwChars + cchManifest) < dwModuleFileNameBufferAvailable)
    break;
  if (lpsz != ModuleFileNameBuffer)
    delete[] lpsz;
  dwModuleFileNameBufferAvailable += MAX_PATH;
  lpsz = new TCHAR[dwModuleFileNameBufferAvailable];
  if (lpsz == NULL)
  {
    SetLastError(ERROR_OUTOFMEMORY);
    ReportLastErrorAndExit("new TCHAR[%lu]", dwModuleFileNameBufferAvailable);
  }
}
while (true);

_tcscat(lpsz, szManifest);
825デフォルトの名無しさん:2009/02/01(日) 07:16:57
最初はスタックで処理しようとするのはなかなか合理的だけどあまり見ないな
deleteが必要か判断する手間もあるからかな
826デフォルトの名無しさん:2009/02/01(日) 08:45:46
俺はATLのCTempBufferみたいなのを作って使ってる
827デフォルトの名無しさん:2009/02/01(日) 09:46:38
TCHARの配列とかnewで真面目にやっているのを見ると、皆偉いなあとか思う。
俺なんか、いつもreallocで手を抜くからなあ。
828デフォルトの名無しさん:2009/02/01(日) 09:59:00
>>825
現在のC++では、newに失敗すると、例外がthrowされるのでは? それと、
2回目のループが成功で抜けた時に、newで動的に確保したヒープが解放
されない。

ところで、上記だと結果が"ファイル名(.exe含む).manifest"になるけど、
これは意図したものなのか?
829デフォルトの名無しさん:2009/02/01(日) 10:26:45
>>828
> これは意図したものなのか?
意図も何も、.manifestの仕様を知らないのか?
830デフォルトの名無しさん:2009/02/01(日) 10:33:41
>>828
こいつ、頭が相当悪そうだw
831デフォルトの名無しさん:2009/02/01(日) 10:36:39
include <iostream>

int main(){
CHAR *pNew;

while(1){
pNew = new char[65535];
std::cin >> pNew;
std::cout << pNwe;
}

return 0;
}
832デフォルトの名無しさん:2009/02/01(日) 10:37:19
>>827
クラスじゃないならいいんでね?
833デフォルトの名無しさん:2009/02/01(日) 11:47:52
>>829-830
manifestなんていつもexeのリソースに組み込んで、単独で配布するなんて
これまで一度もやってないからな。

> まあ、例えば "ファイル名.ini" を作る類いのソフトならこれくらいすべきだと思うけど。

って記述がなければスルーしたんだが。(w

んで、メモリリークするコードを書くのはスルーか?(w
834デフォルトの名無しさん:2009/02/01(日) 12:09:06
MSのサンプルに吠えてどうしようと言うんだおまい
835デフォルトの名無しさん:2009/02/01(日) 12:15:31
リークっつうか最後に連結してるんだから開放したらそれこそエラー吐くんじゃね
836デフォルトの名無しさん:2009/02/01(日) 12:28:48
「Using the Activation Context API」のコピペだな。多少弄ってあるけど。
ちなみに、元コードは後できちんとdeleteしてある。

……よく見ると、元コードも含めて色々おかしくないか?これ。
「TCHAR lpsz」ってなんやねん。
_tcscatの箇所は元コードだとStringCChCatだけど、
バッファサイズの指定が明らかに変だし。
837デフォルトの名無しさん:2009/02/01(日) 12:28:50
>>835
そうそう。
_tcscat(lpsz, szManifest);
の後、lpszを使い終わってから、
if (lpsz != ModuleFileNameBuffer)
  delete[] lpsz;
だよな。
838デフォルトの名無しさん:2009/02/01(日) 12:37:18
>>828
今のC++なら、
lpsz = new (std::nothrow) TCHAR[dwModuleFileNameBufferAvailable];
かな。こうすればNULLが返るようになってそのまま使える。
839デフォルトの名無しさん:2009/02/01(日) 12:38:27
こんな細かいメモリの確保に失敗する状況ではまともにプログラムは動かないので、
メモリの確保に失敗した際のメモリリーク対策など考えてもあまり意味は無い。
そのままプログラムを殺してしまえば、どうせメモリは全て開放されるのだから。
プログラム終了時に自動的に開放されない、
グローバルなリソースに関してはその限りではないが。

場合によっては throw するためのメモリも足らず、即死する事もある。
この場合、スタック巻き戻しすら起こらないので、
いくらかのリソースリークが不可避になこともある。
これは不運だと思うしかないが、
グローバルリソースをできるだけ開放する努力をしなくて良い理由にはならない。

まあ、そうは言っても、簡単に例外安全にできるケースで
わざわざ例外安全にしないってのもどうかとは思うけどね。
840デフォルトの名無しさん:2009/02/01(日) 12:54:11
Cでmalloc&freeに限るね
841デフォルトの名無しさん:2009/02/01(日) 12:57:29
バッファが足りないときにエラーにするのではなく切り詰める、というAPIのどれかが、
以前は終端に\0をつけなかったらしい。この切り詰めが起こったのをチェックしないと、
バッファオーバーランしてしまう。

んで、あんまりひどいんで必ず\0をつけるようにした、
とかいう話を聞いたことがある。

どのAPIだったか思い出せない・・・まさにこのGetModuleFileNameだったような・・・

しかしこの手のAPIは統一性ないよな。
別のAPIだと、引数に ptr と &bufsiz 渡させて、ptrがNULLのときはbufsizに必要サイズを返す、
ってなってるよな。MultiByteToWideCharとかレジストリ系とか。
ああ、この場合も、bufsizに\0用の領域を含むかどうかがあるか・・・
842デフォルトの名無しさん:2009/02/01(日) 13:00:46
>>833
うわ、ホントに頭悪かったのかw
843デフォルトの名無しさん:2009/02/01(日) 13:17:28
>>842 IDが無くて良かったねw
844デフォルトの名無しさん:2009/02/01(日) 13:19:18
>>841
1. ptr == NULLのとき
 i. 必要サイズを返す
  a. 終端の \0 を含める
  b. 終端の \0 は含まない
 ii. 失敗して 0 を返す
 iii. NULL アクセスで落ちる

2. ptr != NULLでバッファが足りないとき
 i. 可能な限りコピーして切り詰める
  a. 終端に \0 が付く
  b. 終端に \0 が付かない
 ii. 何もコピーしない
  a. *ptr に \0 が入る
  b. バッファを一切弄らない
 iii. バッファオーバーランする

細かいところだと ERROR_INSUFFICIENT_BUFFER などが設定されるか、とか
まぁ1-iiiと2-iiiは論外だが
845デフォルトの名無しさん:2009/02/01(日) 13:21:42
>>828=>>833 本日の馬鹿age厨
846デフォルトの名無しさん:2009/02/01(日) 13:33:06
>>844
速度優先の場合は、落ちるのもありじゃないだろうか?
847デフォルトの名無しさん:2009/02/01(日) 13:44:51
また馬鹿age厨が来たw
848デフォルトの名無しさん:2009/02/01(日) 13:52:46
おっさんうぜー
849デフォルトの名無しさん:2009/02/01(日) 13:54:21
引っ込んでろ
850デフォルトの名無しさん:2009/02/01(日) 13:58:39
>>828>>833>>846>>848
毎日ageて馬鹿な発言をしては叩かれて、顔真っ赤にしながら低脳な煽りしてる人でしょ?
851デフォルトの名無しさん:2009/02/01(日) 14:01:25
antiageing
852デフォルトの名無しさん:2009/02/01(日) 14:02:31
>>833
スルーです。
853デフォルトの名無しさん:2009/02/01(日) 14:16:03
スルーも何も、サンプルに文句つけてる時点で己の低脳さを露呈してるだけなんだが
oldnewthingでclock.aviをハードコードするなとか文句言ってた馬鹿外人みたいだ
854デフォルトの名無しさん:2009/02/01(日) 14:25:14
> 2回目のループが成功で抜けた時に、newで動的に確保したヒープが解放されない。
この指摘がそもそも頓珍漢だからスルーしただけじゃんw
855デフォルトの名無しさん:2009/02/01(日) 14:42:47
もうだめだこのスレ
856デフォルトの名無しさん:2009/02/01(日) 14:48:34
naniwo imasara
857デフォルトの名無しさん:2009/02/01(日) 15:16:12
スライダーの初期値がうまく設定できません。

static HWND hSlider;

case WM_INITDIALOG:
hSlider=GetDlgItem(hDlg,IDC_SLIDER);
SendMessage(hSlider,TBM_SETPOS,(WPARAM)TRUE,(LPARAM)3);
//スライダーの値を3にしておく。

これで設定できるはずがうまくいきません。
WM_PAINTなどで他にも設定が必要なのでしょうか?
858デフォルトの名無しさん:2009/02/01(日) 15:19:30
TBM_SETRANGEしてないからだろ
859デフォルトの名無しさん:2009/02/01(日) 15:28:16
SendDlgItemMessage(hDlg,IDC_SLIDER,TBM_SETRANGE,FALSE,MAKELONG(1,7));
はSETPOSの前で行っています。
860デフォルトの名無しさん:2009/02/01(日) 15:39:19
ちょっと↓でやってみてよ

SendMessage(hSlider,TBM_SETRANGE,FALSE,MAKELONG(1,7));
861デフォルトの名無しさん:2009/02/01(日) 16:11:59
情報後出しウゼェ
862デフォルトの名無しさん:2009/02/01(日) 17:03:48
static HWND hSlider;

case WM_INITDIALOG:
hSlider=GetDlgItem(hDlg,IDC_SLIDER);
SendMessage(hSlider,TBM_SETRANGE,FALSE,MAKELONG(1,7));
SendMessage(hSlider,TBM_SETPOS,(WPARAM)TRUE,(LPARAM)3);
SendDlgItemMessage (hDlg,IDC_SLIDER,TBM_SETTIC,0,3);

でうまくいきません 初期値を3にもっていきたいんですが・・。
何かincludeミスもないし・・。
863デフォルトの名無しさん:2009/02/01(日) 17:10:50
自己解決しました。
ありがとうございました。
864デフォルトの名無しさん:2009/02/01(日) 17:14:44
どういたしまして^^
865デフォルトの名無しさん:2009/02/01(日) 17:43:38
API房は、単価が安くて余裕のない連中ばかりなんだな。(w
866デフォルトの名無しさん:2009/02/01(日) 17:51:06
リーズナブルと言って頂きたい
867デフォルトの名無しさん:2009/02/01(日) 18:32:04
これからはアンカーの時代だ。
868デフォルトの名無しさん:2009/02/01(日) 18:41:45
Picute Controlで詳しいページがありましたら
教えてください ねこでもわかるなどを探したのですが
詳しいページがありません。

1.Picute Controlの初期画像の設定
2.Picute Controlの画像変更

などがかいてあるページを探しています。
869デフォルトの名無しさん:2009/02/01(日) 18:51:23
スタティックコントロールとSS_BITMAPでググって頑張ってくれ
870デフォルトの名無しさん:2009/02/01(日) 18:53:39
基地害が一匹紛れ込んでるだけなのに、ID無いと荒れるね〜
871デフォルトの名無しさん:2009/02/01(日) 19:45:39
>>870
よう、基地害!
872デフォルトの名無しさん:2009/02/01(日) 19:53:43
>>870
あのーーー、先生
Picture Controlとスタティックコントロールの違いって何ですか?
873デフォルトの名無しさん:2009/02/01(日) 20:01:57
874デフォルトの名無しさん:2009/02/01(日) 20:20:59
ていうかPicuteって何?
875デフォルトの名無しさん:2009/02/01(日) 20:26:40
sukillがあるからPicuteあまたなんだよ
876デフォルトの名無しさん:2009/02/01(日) 20:29:24
Pictureを書けない人が居たなんて、やっぱり小学生が数名混じってたのか。
スレのレベルが急激に低下したのもこの人たちの仕業でしょう。
877デフォルトの名無しさん:2009/02/01(日) 20:33:19
Pictureの間違いだったの?
pie chartを作成するサードパーティ製コントロールの名前かと思った
878デフォルトの名無しさん:2009/02/01(日) 21:16:33
WinAPIでアプリAを作り、Aを起動すると
ウィンドウを作成し

次に予め作っておいたアプリBを起動し、それをアプリAの子ウィンドウにする


これってどうやればできますでしょうか
879デフォルトの名無しさん:2009/02/01(日) 21:21:51
頭を使えばできる
方法はいくらでもある
880デフォルトの名無しさん:2009/02/01(日) 21:22:46
srud(>>879);
881デフォルトの名無しさん:2009/02/01(日) 21:23:25
プロセスからアプリBのプロセス探させてプロセスID取得して(ry
882デフォルトの名無しさん:2009/02/01(日) 21:24:58
>>879
もうなんつうかお前あほだな
883デフォルトの名無しさん:2009/02/01(日) 21:25:19
こんなのAPIの知識でも何でも無いな
884デフォルトの名無しさん:2009/02/01(日) 21:26:41
>>882
さっきの小学生の方ですね。ご愁傷様です。
885デフォルトの名無しさん:2009/02/01(日) 21:27:06
>>881
ハンドルから子ウィンドウは分かりましたがアプリAを起動するとアプリBの.exeを自動で起動する方法が分かりません
886デフォルトの名無しさん:2009/02/01(日) 21:28:41
WindowsAPIにはSystem("");っていうのがあるからドスコマンドでも打ってろ



CreateProcess
887デフォルトの名無しさん:2009/02/01(日) 21:28:42
ネタだろ
888デフォルトの名無しさん:2009/02/01(日) 21:29:49
>>886
心のそこから感謝します
これで出来ます
889デフォルトの名無しさん:2009/02/01(日) 21:29:49
>>868=>>878=>>882=>>885だろ
スルーしとけ
890デフォルトの名無しさん:2009/02/01(日) 21:33:10
>>889
>>878>>885>>888は自分です
ID無いと分かりにくいですね
質問スレで質問している人間をスルーしろとか頭が弱いのでしょうか、お大事に・・・・
891デフォルトの名無しさん:2009/02/01(日) 21:33:35
やっぱりネタだ
892デフォルトの名無しさん:2009/02/01(日) 21:34:17
>>890
釣れて良かったね
893デフォルトの名無しさん:2009/02/01(日) 21:36:15
>>891-892
なんでそこまで心が歪んでるのかな
自分は分からないところを質問した
分かる人が教えてくれた
俺は教えてもらえて嬉しいし、お礼を言った

これに食いつく意味が分からない
もっと素直な心で生きましょうよ
894デフォルトの名無しさん:2009/02/01(日) 21:39:19
下手な釣りだなあ
895デフォルトの名無しさん:2009/02/01(日) 21:40:30
釣られまいと警戒しすぎ(・∀・)クスクス
896デフォルトの名無しさん:2009/02/01(日) 21:41:57
次の患者さんどうぞ
897デフォルトの名無しさん:2009/02/01(日) 21:45:34
釣りと思うならもういいです
もう二度と来ません、さようなら
898デフォルトの名無しさん:2009/02/01(日) 21:47:54
すばらしい決断だ
さようなら
899デフォルトの名無しさん:2009/02/01(日) 21:53:39
もうだめだこのスレ
900デフォルトの名無しさん:2009/02/01(日) 21:54:56
レスのこだめだうも
901デフォルトの名無しさん:2009/02/01(日) 22:04:18
もめだだこうスレの
902デフォルトの名無しさん:2009/02/01(日) 22:13:18
>>893だけど>>895の言うとおりだよ
教えてもらう側としては本当にありがたいスレだから釣りとかよく分からないこと警戒して変な空気作るのは良くないと思う
903デフォルトの名無しさん:2009/02/01(日) 22:16:05
俺ヤクザだけどって読んじゃった
904デフォルトの名無しさん:2009/02/01(日) 22:27:12
早速戻って来たんだね
905デフォルトの名無しさん:2009/02/01(日) 22:34:35
こんばんは
906 ◆xdkteuOpHo :2009/02/01(日) 23:12:23
testes
907デフォルトの名無しさん:2009/02/01(日) 23:44:44
    [ ゚д゚]y-~~~ デフラグガカンリョウシマシタ
    /[へへ
うこだだのめもスレ
908デフォルトの名無しさん:2009/02/02(月) 00:23:42
ところでPictureControlってリソースファイル(.rc)に
リソースIDのIDではなく、番号で書き込むイカレタ仕様じゃなかったっけ?
こいつ使うとリソースヘッダにある番号振りなおすと大変なことになるんだよね
909デフォルトの名無しさん:2009/02/02(月) 00:30:13
わざわざ嘘情報を流すお前の方がイカレてるよ
910デフォルトの名無しさん:2009/02/02(月) 01:15:24
>>909
嘘だやってみろ
bmpリソースだぞ
911デフォルトの名無しさん:2009/02/02(月) 01:20:55
CONTROL 130,IDC_STATIC,"Static",SS_BITMAP,54,115,62,48
#define IDB_BITMAP1 130

ほらなってるやん
この130ってのがそうな
ケッ!糞が!>>909
912デフォルトの名無しさん:2009/02/02(月) 01:35:41
へぇ。で、その番号をふり直す意図は?
913デフォルトの名無しさん:2009/02/02(月) 01:53:28
908ではないが自分も番号振りなおすことはあるな

ウィザードで作りっぱなしだと未使用のIDが増えて
収拾つかなくなって保守しずらくなったり
別プロジェクトで作成したダイアログリソースををマージ
したりするとき手作業のほうが安心できたりとかするので
914デフォルトの名無しさん:2009/02/02(月) 04:25:32
>>911
ならない
お前の環境が糞なだけだろ
915デフォルトの名無しさん:2009/02/02(月) 06:30:08
>>913
そんときにピクチャーボックスがあるとENDw
916デフォルトの名無しさん:2009/02/02(月) 06:33:22
869で終わってる話題でなんで50レスも続いてんだw
917デフォルトの名無しさん:2009/02/02(月) 07:17:40
世の中にはな、終わった話題を蒸し返したがる人が結構いるんだよ。
918デフォルトの名無しさん:2009/02/02(月) 08:10:09
質問があります。
以下のように書式付きメッセージボックスを表示するコードを書いたのですが、


void func(const wchar_t* str, const wchar_t *fmt, ...) {
va_list ap;
va_start(ap, fmt);
wchar_t buf[256];
vswprintf_s(buf, sizeof(buf), fmt, ap); // ★
va_end(ap);
MessageBoxW(NULL, buf, str, MB_OK);
}

★を実行後にstrに不正な値が書きこまれてしまいます。
どうしてでしょうか?

_locale_t locale = _create_locale(LC_CTYPE, "japanese");
_vswprintf_s_l(buf, sizeof(buf), fmt, locale, ap);
としてみてもダメでした。
919デフォルトの名無しさん:2009/02/02(月) 08:11:41
バッファオーバーランだろ
920918:2009/02/02(月) 08:16:46
>>919
918へのレスですか?
wchar_t buf[256];
_vsnwprintf_s(buf, sizeof(buf), _TRUNCATE, fmt, ap);
としてもダメでした。
921デフォルトの名無しさん:2009/02/02(月) 08:26:58
適当だけど
sizeof(buf)/sizeof(wchar_t)
ってことはない?
922918:2009/02/02(月) 08:31:24
>>921
げげっ。それでうまくいきました。
MSDNに「sizeOfBuffer 出力の buffer のサイズ」と書いてあったので
てっきりバイト数だと思ってました。
ありがとうございました!
923デフォルトの名無しさん:2009/02/02(月) 09:02:50
最後まで読めばちゃんと書いてあるだろ

> In Visual C++ 2005, vswprintf_s conforms to the ISO C Standard for vswprintf,
> which requires the second parameter, count, of type size_t.
924デフォルトの名無しさん:2009/02/02(月) 10:09:01
どうしようもないクズだな
925デフォルトの名無しさん:2009/02/02(月) 10:36:05
>>924
おらぁクズr(r
926デフォルトの名無しさん:2009/02/02(月) 15:03:03
ウワァーッカッチョイーッ
927デフォルトの名無しさん:2009/02/02(月) 15:32:20
HBITMAPって構造体ですか?
これのビットイメージ部だけをどうしたらいいのでしょうか?
928デフォルトの名無しさん:2009/02/02(月) 15:35:58
ハンドルだと書いてあるだろうがボケ

>これのビットイメージ部だけをどうしたらいいのでしょうか?

どうしたらいいか?ってどうにでもしろよ!
俺に聞くなよ!
929デフォルトの名無しさん:2009/02/02(月) 15:39:11
>>927
想像するに、GetDIBits使えばいいと思うよ。
ハンドルはハンドルだ。識別子だ。それ以外のなんでもない。
930デフォルトの名無しさん:2009/02/02(月) 16:04:25
DIB24ビットでデータだけの1次元配列(DWORD配列)があるのですが
これをStretchBltで縮小するにはどのようにしたらいいですか?
931デフォルトの名無しさん:2009/02/02(月) 16:21:57
何が何でもStretchBlt使いたいなら自力でDIBにマップして使えば
932デフォルトの名無しさん:2009/02/02(月) 16:28:36
いえ縮小できるならStretchBltじゃなくてもいいです。

どこか参考になるサイトがあったら教えてください
933デフォルトの名無しさん:2009/02/02(月) 17:12:14
じゃー、StretchDIBits
934デフォルトの名無しさん:2009/02/02(月) 17:21:54
>>933
今それみてました。
StretchDIBitsまで辿り着くプロセスとして
BITMAPINFO bi;
biの初期化
HBITMAP hb = ::CreateCompatibleBitmap( NULL, 1440, 1080 );
HDC hdc = ::CreateCompatibleDC( NULL );
::SelectObject( hdc, hb );
::StretchDIBits( hdc, 0, 0, 1280, 720, 0, 0, 1440, 1080, dwBuffer, &bi, DIB_RGB_COLORS, SRCCOPY );
と、こんな感じでしょうか?
で、ここから縮小したDIBデータをアクセスしたい場合はどうしたらいいのでしょうか・・・
935デフォルトの名無しさん:2009/02/02(月) 20:04:29
縮小先のビットマップをCreateDIBSectionでつくればええやん
936デフォルトの名無しさん:2009/02/02(月) 20:22:25
CreateProcessが難しすぎて理解できないんだけど

STARTUPINFO pi;
PROCESS_INFORMATION si;

if(CreateProcess(NULL,
"C:\\test.exe",
NULL,
NULL,
FALSE,
0,
NULL,
NULL,
&pi,
&si) == 0)
MessageBox(NULL,"読み取れない","エラー",MB_OK);

ちゃんとC直下にtest.exe作ったけど起動されない。一体どうすれば・・・・
937デフォルトの名無しさん:2009/02/02(月) 20:25:09
PROCESS_INFORMATION si = {sizoef si};とでも書いておけ。
0初期化しておけばとりあえず動くと思う。
938デフォルトの名無しさん:2009/02/02(月) 20:31:42
>>937
0初期化ってことで
PROCESS_INFORMATION pi;
STARTUPINFO si;
ZeroMemory(&si, sizeof (si));
こう変えたら動くようになった、ありがとう、ほんとありがとう
939デフォルトの名無しさん:2009/02/02(月) 20:45:17
>>936のパス指定は相対パスにする方法ってないんですかね?
保存されるところが一定じゃないだろうからフルパスだとおかしなことになっちゃう。どうすればいいんだろう・・・
940デフォルトの名無しさん:2009/02/02(月) 20:49:01
>>939
fullpathっていう関数もあるし逆にいえばそれが実行される場所と同じディレクトリは
カレントディレクトリなのでその実行ファイルと同じディレクトリにあればファイル名の指定だけで動く
941デフォルトの名無しさん:2009/02/02(月) 20:50:57
>>939
つ【SetCurrentDirectory】
942デフォルトの名無しさん:2009/02/02(月) 21:39:02
PROCESS_INFORMATION si = {sizoef si};

突込みどころ多すぎだろw
943デフォルトの名無しさん:2009/02/02(月) 21:42:05
おまえらおちつけよ なかよくいこうぜ
944デフォルトの名無しさん:2009/02/02(月) 21:43:54
ま、コンパイルエラーだわな
945デフォルトの名無しさん:2009/02/02(月) 21:45:54
typo以外につっこめるところを素人の俺にkwsk
946デフォルトの名無しさん:2009/02/02(月) 21:53:26
てか、突っ込むべきは>>936じゃね

STARTUPINFO pi;
PROCESS_INFORMATION si;


ま、intellisenseが使えりゃ変数名なんてどうでもいいけど
947デフォルトの名無しさん:2009/02/02(月) 21:55:24
そもそもCreateProcessの第二引数は文字列リテラル駄目だろ
948デフォルトの名無しさん:2009/02/02(月) 21:56:49
そうか、>>936につられたのか>>937はw
949936:2009/02/02(月) 22:01:12
>>936
なんですがC直下のプログラムは動いたんですが、違うディレクトリにすると動きません

何か間違ってそうなところはありますでしょうか
"C:\\Documents and Settings\\user\\My Documents\\Visual Studio 2008\\Projects\\Repton\\Dat\\ADV\\game.exe"
950デフォルトの名無しさん:2009/02/02(月) 22:02:08
コマンドライン引数のほうは空白混ざってたら""でくくれ
951デフォルトの名無しさん:2009/02/02(月) 22:04:52
>>947 そりゃ、W の場合だ
952936:2009/02/02(月) 22:10:50
>>950
そんなルールがあったのか・・・・
・・・・・まだ、ダメっぽいです
パスは間違ってないし、C直下なら動いたので書き方が悪いと思うんですが・・・

"C:\\Documents" "and" "Settings\\user\\My" "Documents\\Visual" "Studio" "2008\\Projects\\Repton\\Dat\\ADV\\game.exe"
953デフォルトの名無しさん:2009/02/02(月) 22:12:07
>>952
0点
954デフォルトの名無しさん:2009/02/02(月) 22:13:39
STARTUPINFO si = { sizeof( STARTUPINFO)};
PROCESS_INFORMATION pi = {0};
char szCmdLine[] = "\"C:\\Documents and Settings\\user\\My Documents\\Visual Studio 2008\\Projects\\Repton\\Dat\\ADV\\game.exe\"";

if ( !::CreateProcess( NULL, strCmdLine, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi))
{
MessageBox(NULL,"読み取れない","エラー",MB_OK);
}

::CloseHandle( pi.hThread);
::CloseHandle( pi.hProcess);
955デフォルトの名無しさん:2009/02/02(月) 22:13:46
>>952
コマンドプロンプト出してタイプして動いたら、それと同じように入れればいい。
あと、"は\"のようにエスケープしないとな
956デフォルトの名無しさん:2009/02/02(月) 22:13:47
なんというバカ。

コマンドラインから実行してみろよ・・・
957デフォルトの名無しさん:2009/02/02(月) 22:13:53
>>952
"はエ・・・・

なんでもない
958デフォルトの名無しさん:2009/02/02(月) 22:15:15
げ、変数名ちがったわ。 strCmdLine → szCmdLine
959デフォルトの名無しさん:2009/02/02(月) 22:17:23
>>954
どうせならTCHAR対応もやろうぜ。
#include <windows.h>
int main()
{
STARTUPINFO si = { sizeof( STARTUPINFO)};
PROCESS_INFORMATION pi = {0};
TCHAR szCmdLine[] = TEXT("\"C:\\Documents and Settings\\user\\My Documents\\Visual Studio 2008\\Projects\\Repton\\Dat\\ADV\\game.exe\"");

if ( !::CreateProcess( NULL, szCmdLine, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi))
{
MessageBox(NULL,TEXT("読み取れない"),0,MB_OK);
}

::CloseHandle( pi.hThread);
::CloseHandle( pi.hProcess);

}
960デフォルトの名無しさん:2009/02/02(月) 22:18:55
>>959
もとが ANSI だから手を抜いたんだけどね。(笑)
961936:2009/02/02(月) 22:19:16
できたー!

ありがとうございます
頑張ります
962デフォルトの名無しさん:2009/02/02(月) 22:27:44
パス区切りが/でもいいAPIて結構あるよね。
書くの楽だからそうしてたら逆に\しか許さないので嵌ったな。
963デフォルトの名無しさん:2009/02/02(月) 22:30:15
>>954>>959
MessageBoxの後にreturnが抜けてる
964デフォルトの名無しさん:2009/02/02(月) 22:56:29
おまえら低レベルな質問には一生懸命答えるのなw
965デフォルトの名無しさん:2009/02/02(月) 23:06:56
低レベルな質問にすら答えられないアホは黙ってな
966デフォルトの名無しさん:2009/02/02(月) 23:09:29
だって、それでしか自分を顕示できないんだもん
967デフォルトの名無しさん:2009/02/02(月) 23:12:13
>>964
高レベルな質問plz
968デフォルトの名無しさん:2009/02/02(月) 23:36:30
人はなぜ生きるのか
969デフォルトの名無しさん:2009/02/02(月) 23:41:29
すいません、すいません
>>959で関数の頭に::付いているのとないのあるんですけど
なぜなんですか?
970936:2009/02/02(月) 23:41:36
>>968
今、この瞬間
お前は俺に「スレタイ100回読め」といわれる

そのためだけに生まれ、生きてきたんだ
971デフォルトの名無しさん:2009/02/02(月) 23:49:35
>>970
お前こそスレタイの前にMSDN読め
972デフォルトの名無しさん:2009/02/02(月) 23:50:26
>>969
ついてないのは、単にコピペしただけだから。
973デフォルトの名無しさん:2009/02/02(月) 23:51:13
>>969
単に統一してないだけ。
詳しくはC++スレへ
974デフォルトの名無しさん:2009/02/02(月) 23:53:23
>>969
::を入力するとintellisenseの恩恵に与れる
975デフォルトの名無しさん:2009/02/02(月) 23:55:25
そりゃ、VC固有だろ
976デフォルトの名無しさん:2009/02/03(火) 00:12:22
ネット上のサンプルで、関数には::つけてるけど、構造体にはつけないってのが多い気がする。
なんでだー
977デフォルトの名無しさん:2009/02/03(火) 00:20:54
(: * :)
978デフォルトの名無しさん:2009/02/03(火) 00:23:06
VCならCtrl+スペースで幸せになれる
979デフォルトの名無しさん:2009/02/03(火) 00:30:39
('A')
980デフォルトの名無しさん:2009/02/03(火) 00:31:34
>>976
関数名は被る可能性がある(CWnd::MessageBoxとか)けれど、構造体名なんて滅多に被らないだろ
つまりそういうこと
981デフォルトの名無しさん:2009/02/03(火) 09:59:56
982デフォルトの名無しさん:2009/02/03(火) 10:06:55
うめ
983デフォルトの名無しさん:2009/02/03(火) 10:19:27
そういや今日、梅の花がほころんでいましたよ
984デフォルトの名無しさん:2009/02/03(火) 10:33:43
>>981
985デフォルトの名無しさん:2009/02/03(火) 10:37:29
ume
986デフォルトの名無しさん:2009/02/03(火) 11:00:03
Borland C++ Compiler 5.5 でいくつかソフト作ってみましたが数10KB〜100KB程度にしかなりません。
他の個人のソフトでは数100KBどころか数MBのモノが普通にありますがあれ、どーしてそこまで大きく
なるんですか?
987デフォルトの名無しさん:2009/02/03(火) 11:01:54
ssud(>>986);
988デフォルトの名無しさん:2009/02/03(火) 11:02:28
>>986
リソースに画像とか音声を埋め込んだりすれば
すぐにMBくらい超える
989デフォルトの名無しさん:2009/02/03(火) 11:24:05
>>988
ああ書いた分量だけでなく、そういうことですか。俺個人じゃ書けない量だと不思議に
思ってました…
990デフォルトの名無しさん:2009/02/03(火) 11:42:57
>>935
CreateCompatibleDCをCreateDIBSectionにするって事ですよね?
そうした場合はStretchDIBitsで縮小したら
縮小したビットデータにはどうやってアクセスすればいいでしょうか?
991デフォルトの名無しさん:2009/02/03(火) 12:06:48
あ、違ったCreateCompatibleBitmapですね
992デフォルトの名無しさん:2009/02/03(火) 12:31:41
>>990
SelectObjectして、BitBltでしょ
993デフォルトの名無しさん:2009/02/03(火) 12:55:58
DLLで呼び出し元のハンドルを知りたいんですが、どうすればできますか?
994デフォルトの名無しさん:2009/02/03(火) 13:02:24
EnumProcessModules
995デフォルトの名無しさん:2009/02/03(火) 13:08:17
996デフォルトの名無しさん:2009/02/03(火) 13:15:00
GetObject
997デフォルトの名無しさん:2009/02/03(火) 13:48:19
ごめんなさい質問変でしたね
DLL側が呼び出されたときに自分を呼び出したスレッドハンドルまたはプロセスハンドル
を知りたいです。
998デフォルトの名無しさん:2009/02/03(火) 13:50:21
普通にGetCurrentThread、GetCurrentProcessじゃあかんの??

悩むまでも無くない??
999デフォルトの名無しさん:2009/02/03(火) 13:53:31
DLLは呼び出し側のプロセスで動くからな
1000デフォルトの名無しさん:2009/02/03(火) 13:54:10
999
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。