1 :デフォルトの名無しさん2010/12/26(日) 10:26:23
スレ立てるまでもない、Win32APIのついての質問はこちらへどうぞ。
やさしいお兄さんやHなお姉さんたちが答えてくれるかも。
「知らないならレスしないで下さい。ウザイだけです。 」なんて言わないでねっ!

■過去スレ
Win32API質問箱 Build91
http://hibari.2ch.net/test/read.cgi/tech/1289149302/

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

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

過去スレはwikiから探してください。
2 :デフォルトの名無しさん2010/12/26(日) 10:48:59
このスレッドは天才チンパンジー「アイちゃん」が
言語訓練のために立てたものです。

アイと研究員とのやり取りに利用するスレッドなので、
関係者以外は書きこまないで下さい。

                  京都大学霊長類研究所
11 :デフォルトの名無しさん2010/12/28(火) 18:23:55
アイちゃんが居ない方が本スレ
12 :デフォルトの名無しさん2010/12/28(火) 18:51:02
>>11
両方いるじゃん
20 :デフォルトの名無しさん2011/01/01(土) 06:17:59
RGBマクロを使うのと構造体を使うのとでは、どっちが高速?
25 :デフォルトの名無しさん2011/01/01(土) 18:29:55
あまり使い道はないね、
エクスプローラーを模したファイラーとかではいるかも
27 :デフォルトの名無しさん2011/01/01(土) 21:37:17
Windowsのプログラムを作るときはGlobalAllocを使うほうがいいの?
CRTをリンクしない分小さくなると聞きました。
28 :デフォルトの名無しさん2011/01/02(日) 10:16:36
特定の名前が含まれるファイルが
ゴミ箱に放り込まれたら
強制的に元に戻すとか。
30 :デフォルトの名無しさん2011/01/02(日) 11:37:19
特定の名前のファイルが作成されたら自動的に削除するプログラムと一緒に実行してみると面白そうだ
33 :デフォルトの名無しさん2011/01/02(日) 12:43:36
UNIXの質問なんでがPOSIXの関数を使ってCのC++ですがどうしての精度が大きいおでう
自分ではどうしてか取得関係のことですが精度がどうやってだしてるか分からないのですが
WIN32aPIではどうするかきてるのでしょう、か
38 :デフォルトの名無しさん2011/01/02(日) 23:05:40
>>33がわかるとかお前宇宙人かよ
39 :デフォルトの名無しさん2011/01/02(日) 23:51:33
>>38
>>38
>>38
>>38
>>38
44 :デフォルトの名無しさん2011/01/03(月) 10:51:09
正月暇だからWin32APIでもやってみようと思って来てみたけど
意外とテンプレ充実してないな
45 :デフォルトの名無しさん2011/01/03(月) 10:54:36
>>44
どんなのがあればいい?
とりあえずMSDN?それから猫とかWin32API入門系?
51 :デフォルトの名無しさん2011/01/03(月) 18:34:43
CopyRectっていつ使うの?
rect_destination_instance = rect_source_instance;じゃダメなの?
53 :デフォルトの名無しさん2011/01/04(火) 17:36:25
>>27
GlobalAllocは過去の遺物。
メモリ確保はHeapAlloc( 場合によりVirtualAllocを使い分ける)。
ただし、今時CRT抜くほど小さくする必要性もないだろうから、
すなおにmalloc使っていればいいよ。

>>51
昔のCコンパイラはそんな構造体型の代入ができなかった。CopyRectはその名残。
54 :デフォルトの名無しさん2011/01/04(火) 19:14:55
>>53
メモリコピーも出来なかったの?
56 :デフォルトの名無しさん2011/01/04(火) 23:26:44
ってことは、昔は構造体を生のメモリとして扱えなかったの?
57 :デフォルトの名無しさん2011/01/04(火) 23:40:08
構造体のコピーができることと生のメモリとして扱ってることにどんな関係があるって言うんだ?
そもそも生のメモリとして扱うってどういうことを言ってる?
60 :デフォルトの名無しさん2011/01/05(水) 09:55:47
http://blogs.yahoo.co.jp/portdepantin/2077554.html
バーンイン試験

http://www2.renesas.com/quality/ja/system/productionquality/check.html
全数検査だから、焼いていない生のメモリはよほどのグルメじゃないと手に入らない。
61 :デフォルトの名無しさん2011/01/05(水) 13:46:18
質問です。
プロセスの再起動はどういう仕組みになっているのでしょうか。
(Firefoxの再起動とか)
プロセスを終了してしまったら、起動できないと思うのですが(終了してしまっているので)。
再起動のためのAPIとかあるのでしょうか。
62 :デフォルトの名無しさん2011/01/05(水) 13:48:46
起動してから終了すればいいだろ
64 :デフォルトの名無しさん2011/01/05(水) 15:57:47
>>62
それだと終了が失敗したらプロセスが増えちゃうでしょ
66 :デフォルトの名無しさん2011/01/05(水) 18:56:55
将棋覚えたては近衛兵の扱い方がヘタで
金銀>飛車角行って位置づけになる
67 :デフォルトの名無しさん2011/01/05(水) 19:01:04
ボタンなどの上にマウスカーソルを置いたときに出る
ツールチップの文字列を取得したいのですが
どのようなAPIを使えばいいのでしょうか?
68 :デフォルトの名無しさん2011/01/05(水) 19:06:41
gETwINDOWtEXT
69 :デフォルトの名無しさん2011/01/05(水) 19:27:57
リストボックスのスクロールバーあるじゃないですか。
アレをクリックして下にスクロールした瞬間に選択してる項目も
一緒に一つ下にずらしたいんですが、
スクロールバーを下にスクロールしたという通知メッセージってないですよね?
何かいい方法ないでしょうか?
70 :デフォルトの名無しさん2011/01/05(水) 21:11:11
>>68
ありがとうございます。
重ねて質問で申しわけないんですが、
ツールチップハンドルの取得は、どうやったらできるのでしょうか?
TOOLTIPS_CLASSでウィンドウ検索などはやってみたのですがうまくいきませんでした。
71 :デフォルトの名無しさん2011/01/05(水) 21:25:22
外部プログラムが対象という話なら、取得は不可能なケースのほうが多いと思う
72 :デフォルトの名無しさん2011/01/06(木) 00:38:02
>>71
はい、外部プログラムが対象です。
自分でもいろいろ試してみたのですが、難しいようです。
ありがとうございます。
76 :デフォルトの名無しさん2011/01/06(木) 11:02:54
>>72
グローバルフックかけてWM_NOTIFYを捕まえればできるかもよ。
77 :デフォルトの名無しさん2011/01/06(木) 14:16:49
プログラムの質問というよりはOSの質問になるかもしれません。

簡単なファイルのサーチするプログラム作成しました。
FindNextFile()でC:\配下の全ファイルを検索したところ、C:\Users\配下に変なディレクトリパスを拾ってきたのですがこれは何でしょうか?
C:\Users\XXX\Local Settings\AppData\Local\Application Data\ApplicationData\Application Data\Application Data\・・・・
Application Dataのディレクトリが数回層続いており、その配下にファイルが多数あるように見えます。
エクスプローラではもちろんアクセスできませんが、コマンドプロンプトではディレクトリ移動(cd)でアクセスはできました。

ご存知の方がいましたら教えていただけないでしょうか?
80 :77 2011/01/06(木) 15:00:58
>> 79
ありがとうございます。
ディレクトリの属性がFILE_ATTRIBUTE_REPARSE_POINTの場合は飛ばすで解決できそうです。
81 :デフォルトの名無しさん2011/01/06(木) 19:52:55
次期WindowsはARMをサポートっていう噂だが、
これってx86用のコード動くの?
それともOS側でエミュレート的なことやるの??
82 :デフォルトの名無しさん2011/01/06(木) 19:59:53
ネイティブでは動かない。
intelとamdの関係とは根本が違う。仮想化も意味なし。
最低限リコンパイルが必要。そんなのをサポートするとは思えないが。
CEならあるかもしれないけど。
83 :デフォルトの名無しさん2011/01/06(木) 20:10:26
昔x86以外のWindowsNTが出てた頃はx86をエミュレートしてたという話だけど
今ならもしかしたらVirtualPCでXPモード的なことをやるのかもしれないが
どうだろうね
84 :デフォルトの名無しさん2011/01/06(木) 22:16:38
寝言言うなよ。
当時のCPUでバイナリエミュレーションやったら、ドンだけ低速か想像できないのか? w
85 :デフォルトの名無しさん2011/01/06(木) 22:33:22
情弱だらけだな・・・
モジュール化の話知らないの?その時既に次期OSについて色々言及してるよ。

>>84 は20年くらいROMっとけ
86 :デフォルトの名無しさん2011/01/06(木) 22:41:53
decのalphaの事を言ってるのでは
x86のコードを一生懸命、alphaのコードに変換するようなことをやってたみたいだけど
88 :デフォルトの名無しさん2011/01/07(金) 10:25:05
Alphaは64ビットだから当時のx86を模倣しても半分は余裕がある
クロックも先頭走ってたし
89 :デフォルトの名無しさん2011/01/07(金) 11:48:02
64bitのわりにメモリ2Gの縛りがあったみたいだけど
90 :デフォルトの名無しさん2011/01/07(金) 13:14:22
リストコントロールで、頭文字のキーを押すと、その項目を選択するようにしたいのですが
これは独自に実装しなければならないのでしょうか?
92 :デフォルトの名無しさん2011/01/07(金) 15:06:54
>>89
当時は2Gなんて天文学的な数字だったり
93 :デフォルトの名無しさん2011/01/07(金) 19:08:05
WinXP以降でWin32APIでファイルをドラッグ&ドロップで「圧縮(zip形式)」にドロップしたいです。
(zipで圧縮して欲しい)

::CopyFileや::MoveFileでは反応してくれませんでした。
(zipにならなかった。)

どうすればユーザがドラッグドロップするのと同じ事をできますか?
94 :932011/01/07(金) 19:09:37
あ、みなさんご存知かもしれませんが
「圧縮(zip形式)」っていうのはC:\windows\system32\の下のどこかにある、見た目フォルダのアイテムです。
ここにファイルをドロップするとzipに圧縮してくれるみたいです。
95 :デフォルトの名無しさん2011/01/07(金) 20:24:12
96 :932011/01/08(土) 04:23:49
>>95
ありがとうございます!!
早速勉強開始です。
97 :デフォルトの名無しさん2011/01/08(土) 09:26:35
たいていユーザはそんなモノ消してるから
統合アーカイバのDLLでも組み込んだほうがまし
98 :片山博文MZ2011/01/08(土) 13:08:40
>>61
別プロセスを起動して、そこで元のプロセスが終了するまで待ち、
元のプロセスが終了したら、元のプロセスを再起動する。OpenProcessを参照。
>>67
CreateToolhelp32Snapshotで外部プロセスのIDを取得。
GetWindowThreadProcessId, FindWindow, FindWindowExで再帰。
99 :デフォルトの名無しさん2011/01/08(土) 13:26:47
IE8なんですが、CreateProcessで任意のHTMLを表示すると
必ず新しい別ウィンドウが開いてしまいます。
やりたいのは、
・IEがひとつも起動していなかれば起動してHTMLを表示する。
・IEが起動しているなら、新しいタブを開いてHTMLを表示するです。

起動オプションを調べたりいろいろやってみたのですがうまくいきません。
ブラウザの設定ではタブを使用するようにしています。

ちなみにShellExecuteでも同じ結果でした。

あと、コマンドラインからieを起動すると必ず別々にieが起動しました。

MFC(VS2005)でやってます。
何かアイデアをください...。
100 :デフォルトの名無しさん2011/01/08(土) 13:46:09
そういうのコマンドラインで指定できた気がするが忘れた
最悪そういうBHO作ればいいんじゃね
102 :デフォルトの名無しさん2011/01/08(土) 15:21:51
>>99
やり方間違っているだけだろ
103 :デフォルトの名無しさん2011/01/09(日) 00:55:16
updown controlをCreateWindowExで作成したとき
ダイアログに置いたedit controlをバディウィンドウにするとちゃんとドッキングして枠内に入るのに
CreateWindowExで作ったedit controlをバディウィンドウにすると隣にくっつくだけで枠内に入ってくれない
spy++でウィンドウスタイル見て両者同じスタイルにしたんだけど・・・
これってWindowsの仕様?Zオーダー等の問題?
104 :デフォルトの名無しさん2011/01/09(日) 03:10:17
>>95
イイな、そのページ
105 :1032011/01/09(日) 06:38:53
どうもedit controlをサブクラス化(スーパークラス化?)するのがいけないらしい
edit controlの非クライアント領域を広げてそこにupdown controlを描画しているのだから
非サブクラスなedit controlのみに対して特別なコードを仕込んでるのだろうか
ここらへん詳細が分かる方いらっしゃいますか?
106 :デフォルトの名無しさん2011/01/09(日) 07:13:30
何を悩んでるのか分からないけど
Editとmsctls_updown32のバディ指定で実現されている
スピンエディットってそういうものだよ。
107 :デフォルトの名無しさん2011/01/09(日) 09:40:23
チャットソフト作っている。

エディットに打ち込んだ文章をメインウィンドウに出力していくには何の関数をどう使えばいいんですか?

111 :デフォルトの名無しさん2011/01/09(日) 14:00:11
なんか、いまさらWin32APIを勉強しようと思って
DWORDとかCTPSTRとか、_TマクロとかWCHARとかマルチバイト文字列とかいわれても
まとまってる参考書無いんですが。。MSDNみるのは、時間かかるから本でまとまってるのがあればいいなあとおもう。

もうWin32でてから15年くらいたっているんでしょ?

いまだに、日経ソフトウェアとかでWin32の特集とか頻繁にやってるからやってみたいんだけど
基礎的な情報が少なすぎます
112 : [―{}@{}@{}-] デフォルトの名無しさん2011/01/09(日) 14:06:52
windowsゲームプログラミングと
プログラミングwindows(上)を
読めば
113 :デフォルトの名無しさん2011/01/09(日) 14:18:56
プログラミングwindows(上)
↑これもってるけど、そういうことのってないよ。
115 :デフォルトの名無しさん2011/01/09(日) 14:35:30
>>111
だから本が売れるんだよ
世知辛いよねぇ
人間不信真っ只中ですw
116 :デフォルトの名無しさん2011/01/09(日) 14:48:49
>>111
九九が分かれば何桁の掛け算でも分かるのと同じで
CHAR、WCHAR、TCHAR
これらの違いが分かれば後は応用だから必要ないんだよね
117 :デフォルトの名無しさん2011/01/09(日) 14:52:41
まともな技術書は高いからね。
ついつい三千円以下の安くて分かりやすそうな解説本を選んでしまって失敗する。
120 :デフォルトの名無しさん2011/01/09(日) 14:56:06
その辺の解説ならプログラミングwindows(上)が一番わかりやすかったと思うけど
121 :デフォルトの名無しさん2011/01/09(日) 14:59:13
_TマクロとかWCHARとかマルチバイト文字列の解説は
プログラミングwindows(上)の最終バージョンで追加されたから
載ってないと言ってる人はたぶん古いやつ
123 :1072011/01/09(日) 17:01:41
回答ありがとう。

しかし分からないw

知りたいのは、たとえばDrawText関数で文章を一文メインウィンドウに出力したとして、その次に入力された文章をそこに順次足していくにはどうすればよろしいのでしょう?
124 :デフォルトの名無しさん2011/01/09(日) 17:09:28
次の文章が入力されたらDrawTextを2回使えば最初の文章と次の文章を表示できます
3つめの文章が入力されたらDrawTextを3回使えば最初の文章と次の文章と3つめの文章を表示できます
文章がいくつ増えても同じことです
125 :デフォルトの名無しさん2011/01/09(日) 17:15:06
>>123
void CHogeWindow::LogEdit_AppendText(const char *text){
if(m_closing)
return;
EnterCriticalSection(&LogEditCS);
int Len = SendMessage(m_hLogEdit,WM_GETTEXTLENGTH,0,0);
SendMessage(m_hLogEdit,EM_SETSEL,(WPARAM)Len,(LPARAM)Len);
SendMessage(m_hLogEdit,EM_REPLACESEL,0, (LPARAM)text);
LeaveCriticalSection(&LogEditCS);
}
まぁ、ご参考に。
126 :1072011/01/09(日) 18:44:03
>>125
ん、出力ウィンドウは、エディットコントロールにしろ、ということでしょうか?
127 :デフォルトの名無しさん2011/01/09(日) 19:11:41
>>126
エディットでもリッチでもリストでも好きにすればいいけど
さしたる理由も無くDrawTextで自前描画する人はいないでしょうねぇ
141 :デフォルトの名無しさん2011/01/10(月) 13:23:54
質問です。
ディスプレイドライバの名前を取得したいのですが
HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\VIDEOの\Device\VideoX(※)
にディスプレイドライバのレジストリの位置が格納されていますが、
XPではうまく動くのですが 7だとRDPDDのようなドライバ行き着いてしまい
本当のドライバ名を得ることができません。
XPだと大体※がVideo0になるのですが、7やVistaだと3や4に入っているようです。
この3や4はどこから得たら良いのでしょうか。

海外情報をググりまくってみましたがみんなここで止まっていて
解決事例を見つけることができていませんorz
142 :デフォルトの名無しさん2011/01/10(月) 13:47:40
WMI使って情報を取得してみれば?たぶんいける。
143 :デフォルトの名無しさん2011/01/10(月) 14:15:31
>>142
ありがとうございます。
確かに取得できそうです。
これはレジストリの情報と同じものと考えて良いのでしょうか。
144 :デフォルトの名無しさん2011/01/10(月) 17:36:05
プログラミングWindowsにかわるWindows API系の本書いたら
ちょっとは売れるかな?

Vista 以降に追加された機能も含めて 3000ページぐらいで。
146 :デフォルトの名無しさん2011/01/10(月) 18:23:56
ついでにPDF版も売ってくれると検索が楽になってありがたい
148 :デフォルトの名無しさん2011/01/10(月) 18:40:54
MSDNは重要なトコにかぎってリンク切れてたり
Reserved とかなってる割に、呼んでみるとしっかり値が帰ってきたりするので
そういう本当に使える書籍ならほしい。
149 :デフォルトの名無しさん2011/01/10(月) 19:33:02
MSDNは既に一度理解した人が思い出すための解説になってる
のがつらい。初めてだと分かり難い。
151 :デフォルトの名無しさん2011/01/10(月) 19:55:12
ちゃんとOverviewっていう技術解説の項目があるだろ
英語だけど
152 :デフォルトの名無しさん2011/01/10(月) 20:37:31
神様教えてください。
レイヤード ウィンドウにするためのWS_EX_LAYEREDは、
windows2000以降とあるのですが、
それ以前のバージョンでこれを指定すると、
どーなってしまうのでしょうか?

ウィンドウ枠無しの、全画面トップモースト表示
のソフトを作っているのですが
真っ黒になって、操作不能になる感じでしょうか?
154 :デフォルトの名無しさん2011/01/10(月) 21:08:57
そもそもビルドした実行ファイルが動かないから心配するな。
155 :デフォルトの名無しさん2011/01/10(月) 21:15:36
動くことは動くだろ
カーネルにない関数叩いたときにオワタになるだけ
156 :1522011/01/10(月) 21:26:54
>>154
それだと有難いです!!いえ〜ぃ!

タスクバーから終了のソフトなので、「無視」で真っ黒ウィンドウ
になったりすると、うっかり古バージョンウィンドウズの人が
実行した時に、操作不能(≒)になってしまうのが怖かったのです。


>>155
そうなるとバージョンを取得して、2000より前だと→終了などが
必要になりますよね。すごく面倒臭いです!!!
でもやっぱそうですよね。。。

ありがとうございました。
157 :デフォルトの名無しさん2011/01/10(月) 21:55:53
/SUBSYSTEM:WINDOWS,5.00
158 :デフォルトの名無しさん2011/01/10(月) 22:16:11
指定したウィンドウ(バックグラウンド)にCtrl+V(貼り付け)を送信するにはどうすれば良いでしょうか
下記のようにしてみたのですが、Vしか送信されていないみたいです
間にSetFocusを入れて対象のウィンドウをフォアグラウンドにすると上手くいくのですが
あくまでバックグラウンドでの処理をしたいので・・・

(ソースはC#です)
public static void SendCtrlV(IntPtr handle)
{
    byte[] bKeyState = new byte[256];

    UInt32 thisThread = GetCurrentThreadId();
    UInt32 targetThread = GetWindowThreadProcessId(handle, IntPtr.Zero);

    AttachThreadInput(thisThread, targetThread, true);

    GetKeyboardState(bKeyState);
    byte bCtrlTemp = bKeyState[VK_CONTROL];

    // Ctrlを押下状態にする
    bKeyState[VK_CONTROL] = 0x80;
    SetKeyboardState(bKeyState);

    // Ctrl+V
    SendMessage(handle, WM_CHAR, VK_V, 0);

    bKeyState[VK_CONTROL] = bCtrlTemp;
    SetKeyboardState(bKeyState);

    AttachThreadInput(thisThread, targetThread, false);
}
159 :デフォルトの名無しさん2011/01/10(月) 22:23:57
SendInput
160 :デフォルトの名無しさん2011/01/10(月) 22:29:47
OPENGLのMDIアプリケーションで
子ウィンドウをそれぞれのフォーム作成時に

hdc = GetDC(Handle);
//ピクセルフォーマットの初期設定
SetPixelFormatDescriptor();

という風に毎回とるようにしているのですが
子ウィンドウを作るたびに、一番新しいウィンドウしか有効にならないようです
どうすればそれぞれにレンダリングコンテキストを有効にできるのでしょうか
161 :1522011/01/10(月) 22:32:06
>>157
すごく有難いことを教えて頂いたのだと思います。
ただ、理解するのに数日かかりそうなので、先に言っておきます。
有難うございました。
164 :デフォルトの名無しさん2011/01/10(月) 23:44:59
>>160
OpenGLはスレッドに対して、1windowというか1コンテキストだった気がする。
同じスレッドで呼び出したいなら、切り替える必要がある。
レンダリングをそれぞれ独立したスレッドでやったらどうだろうか。
というのは予想で、MDIの動作はやったことないな。
165 :デフォルトの名無しさん2011/01/11(火) 01:34:17
>>159,162
ありがとうございます
しかし、SendInputはフォアグラウンドでないと機能しないようでした
WM_PASTEのメッセージ送信はも反応がありませんでした
対象をテキストエディタにした場合には正常に貼り付けできていたので、該当アプリにWM_PASTEメッセージの処理が実装されていない感じです

ちなみに元のソースでSetFocusでフォーカス設定した際には出来たというのはどうやら勘違いのようでした
SetKeyboardStateの返り値は正常終了となっているが押下状態になっていない感じでした
(フォーカスを設定したのち、keybd_eventでCtrlを送ってから or 手動でCtrlを押しながら Vを送る正常に貼り付けできたため)
AttachThreadInputでアタッチすれば効果があると思ったのですが・・・

別の手段がありましたら是非よろしくお願いします
166 :デフォルトの名無しさん2011/01/11(火) 07:48:09
電子書籍なら買う
紙書籍は置き場所取るし気軽に持ち歩けないし誤植はいつまでもそのままだし全文検索もリンク機能もないしコピペもできないからいらん
値段も電子のが安いんでしょ?
167 :デフォルトの名無しさん2011/01/11(火) 11:18:33
>>144
俺も買う
XPのテーマとかVistaの拡張子関連付けとか苦労した
169 :デフォルトの名無しさん2011/01/11(火) 13:06:21
文字列構成するときに、{1},{2} と位置指定できるような API ありますか?
%s とかだと、引数として渡した順番で入っちゃうけど
ローカライズの時って困っちゃうことになることあるから。
173 :1582011/01/11(火) 15:31:23
自己解決しました
該当アプリではどうやらTranslateMessage()処理により、Ctrl+V(貼り付け)と同等の効果をもたらすには
WM_KEYDOWN(VK_CONTROL)
WM_KEYDOWN(VK_V)
WM_CHAR(0x00000016) ※VK_V - VK_A + 1
という順番でメッセージを送れば良いようでした
174 :デフォルトの名無しさん2011/01/11(火) 20:30:23
>>166
電子書籍みたいに気楽に修正できる媒体になると
出版側が間違ったら訂正すればいいやとか考えて
MSDNと大差ないものになるに 1024 HWND
177 :デフォルトの名無しさん2011/01/12(水) 08:50:42
GetDoubleClickTime をいくつかのプログラムで使ったんだけれど、
これって同じシステムマウス設定の他のプログラムやエクスプローラーのダブルクリックで感じるダブルクリック認識スパンより長くないですか?
今は値を半分にして使っています。
179 :デフォルトの名無しさん2011/01/12(水) 22:47:59
質問させてください。
環境はVisualStudio2010評価版?(無料のやつ)、
ウィンドウに文字を表示したくてDrawTextを使っています。

DrawText( hDC, data, -1, &rc, DT_END_ELLIPSIS );
とあるdata(表示したい文字列)に
LPCTSTR data = TEXT("%s\n",string1);
のように引数を入れると
warning C4002: マクロ 'TEXT' に指定された実引数の数が多すぎます。
と出てしまいます。

表示する文字列を変えたくて以上のようなプログラムを書いたのですが、
どこが良くないのでしょうか?
またDrawTextで出来ないのであれば何をしようすればよいでしょうか。
教えてくださいm(_ _)m
一応DrawTextやエラーメッセージの内容を検索してみたのですが
解決策がみあたりませんでした・・・
180 :デフォルトの名無しさん2011/01/12(水) 23:14:47
スレチ
C++初心者スレ池
181 :デフォルトの名無しさん2011/01/12(水) 23:21:39
>>179
ちょっとまて,その string1 っていうのは何型の変数なの?
それが分からないと答えられない。
182 :デフォルトの名無しさん2011/01/12(水) 23:36:11
え、TEXT まくろって
文字列に L つけるかつけないかだけじゃなかったの?
sprintf みたいな機能ってあった?
183 :1792011/01/13(木) 00:25:48
>>180
すみません。
C++初めてなのでDrawTextはAPIだと思ってました。
出直します。

>>181
char string1[1024]のような感じになっています。
184 :デフォルトの名無しさん2011/01/13(木) 01:21:49
char data[2000];
wsprintf(data,"%s\n",string1);
DrawText( hDC, data, -1, &rc, DT_END_ELLIPSIS );
185 :1792011/01/13(木) 02:37:47
>>184
ありがとうございます!
dataを大きめの配列にするのですね。
どうやら他の方がおっしゃったようにC++も知識不足のようですので、
勉強してきます。
186 :デフォルトの名無しさん2011/01/13(木) 10:35:32
そのまんま出せばいいだけの気がするけど
最後に改行すると何かいいことあるのかな
187 :デフォルトの名無しさん2011/01/14(金) 20:10:29
CoCreateInstanceでIShellDispatchを生成しようとすると、
0x80040154 (REGDB_E_CLASSNOTREG)が返ってきます。
OSの機能が未登録なんてことはあるんでしょうか?
ダメ元でregsvr32 shell32.dllとやってみましたが変わりませんでした。
何か原因として思い当たることがありましたらご教示下さい。
環境はWindows7です。
188 :デフォルトの名無しさん2011/01/14(金) 20:24:14
CLSID_Shellで作れないの?
189 :1872011/01/14(金) 20:56:21
はい。
レジストリの登録情報(HKEY_CLASSES_ROOT\CLSID\{13709620-C279-11CE-A49E-444553540000})
を直接見てみましたがちゃんとありました。
書き忘れましたが、CoCreateInstanceのコールは以下のようにしています。
CoCreateInstance(CLSID_Shell, 0, CLSCTX_ALL, IID_IShellDispatch, (LPVOID*)&pShellDispatch);
191 :1872011/01/14(金) 21:05:14
それは大丈夫です。
例えばCLSID_HTMLDocumentだとか、関係ないクラスで試してみましたが生成できました。
192 :デフォルトの名無しさん2011/01/14(金) 22:01:29
CLSCTX_ALLをCLSCTX_INPROC_SERVERにしてみたら?
195 :1872011/01/15(土) 23:00:00
>>192
CLSCTX_ALLはCLSCTX_INPROC_SERVERを含んでいるので、試してみましたがやはりだめでしたね。
196 :デフォルトの名無しさん2011/01/15(土) 23:48:27
CLSID_Shellでググレばすぐわかるんだけどな。
情弱ってカワイソス
197 :デフォルトの名無しさん2011/01/16(日) 05:53:56
>>196
>>188
>>189
198 :デフォルトの名無しさん2011/01/16(日) 12:03:57
ボタンやスクロールバーみたいなコントロールを完全に独自に作りたい
場合は,ウィンドウクラスの登録と専用ウィンドウプロシージャ用意して,
CreateWindowで作ればいいの?
どこかいい参考資料ある?
199 : [―{}@{}@{}-] デフォルトの名無しさん2011/01/16(日) 12:20:18
枠のないウィンドウを作って画像を表示すればいい
要はゲームを作るのと一緒
ボタンとかも全部画像表示すればいいだけ
マウスクリックの座標とか全部自分で設定しないといけないけど
200 :デフォルトの名無しさん2011/01/16(日) 14:38:02
デバッグツールを作っていて、
他プロセスの仮想メモリ空間へwriteしたいんだが、
ProcessMemoryWriteしても書き込めない領域があるみたい

OpenProcess でアクセス権Allにしてもだめっぽい。
何か方法ある?
201 :デフォルトの名無しさん2011/01/16(日) 15:25:54
ゲームプロテクト環境下でないという話なら、お前のコードが間違っている。
APIのせいにする前に見直せ。
202 :デフォルトの名無しさん2011/01/16(日) 16:26:41
>>201
あ、やはり。
デバッグツールは嘘でハッキングツールを勉強がてら作ってみてるのが本当でした。
なのでまさに、ゲームプロテクト環境下でつ。
プロテクト周りの仕組みのってるページとかないかな。(スレチだけど)
昔みたことがあるんだけど、みつけられない。
203 :デフォルトの名無しさん2011/01/16(日) 16:52:47
メモリ読み書き系は基本的すべてフックされている。APIの実体の先頭バイトを見てみれば確認できる。
これの回避方法は色々あるが、嘘つきには残念だが教えられない。
ヒントを出すと、オリジナルの改変されていないコードを実行すれば目的は達成できると言っておこう。
結局のところプロテクトの知らないまたは検知することのできないコードで行えばいいのだ。
206 :デフォルトの名無しさん2011/01/16(日) 19:19:25
>>203
最近のはそんな原始的なフックしかけてないですよ^^;
208 :デフォルトの名無しさん2011/01/16(日) 19:30:35
トランポリンみたいな幼稚な手法が通用するのは数年前までだね
今ではユーザーモードレベルのAPIフックなんてあってもなくても変わらないゴミみたいなものだし
>>203はShadow Walkerで検索してみるといいよ
209 :デフォルトの名無しさん2011/01/16(日) 19:38:11
"Owner Window"(オーナーウィンドウ) にたいして
"owned Window" はどういう言葉がいいのかな?
212 :デフォルトの名無しさん2011/01/17(月) 00:06:14
被所有ウィンドウ
従属ウィンドウ
隷属ウィンドウ
奴隷ウィンドウ
被用者ウィンドウ
ドMウィンドウ
オーンドウィンドウ
213 :デフォルトの名無しさん2011/01/18(火) 13:13:55
リソースではなく、既にメモリに展開されている.icoファイルからツールバーや.exeに使うアイコンを表示するにはどうすれば良いですか?
215 :デフォルトの名無しさん2011/01/18(火) 18:27:40
Win32APIの入門でオススメサイトあったら教えてください
猫さんのところはわからないまま進む感じであまりいい勉強になりませんでした
216 :デフォルトの名無しさん2011/01/18(火) 18:40:41
>>213
LookupIconIdFromDirectoryEx
CreateIconFromResource(Ex)
関数名見ただけで脊髄反射すんなよ?
217 :デフォルトの名無しさん2011/01/18(火) 19:06:16
>215
本買う金ないぐらい貧乏ならあきらめよう
218 :デフォルトの名無しさん2011/01/18(火) 20:24:57
219 :デフォルトの名無しさん2011/01/18(火) 20:28:16
>>218
俺もこのサイトを勧める
222 :デフォルトの名無しさん2011/01/18(火) 22:16:14
実行ファイルのアイコンってリソースから読み込まないと変えられない?
224 :2222011/01/19(水) 00:32:27
自己解決しました。
デバックじゃなくてリリースでビルドしないと変わらないのね
226 :デフォルトの名無しさん2011/01/19(水) 22:51:10
エクスプローラでは画像のサムネイルが表示されますよね。(「縮小版」表示の場合)

このサムネイルをプログラムから最新の情報に更新する方法を教えてください。
現在、画像ファイルを編集するプログラムを作っているのですが、
ファイルを更新しても、その画像のサムネイル画像が更新されないのです。

つまり、エクスプローラを右クリックで選択できる「縮小版を最新の情報に更新」
をプログラムから呼び出せる方法をご教示いただきたいのです。
227 :デフォルトの名無しさん2011/01/19(水) 23:33:55
228 :デフォルトの名無しさん2011/01/19(水) 23:34:46
>>226
Shellオブジェクト系で行けると思う
229 :2262011/01/19(水) 23:45:16
>>227-228
ありがとうございました。
特に227氏さま。ソースいまから読んでみます
230 :デフォルトの名無しさん2011/01/20(木) 02:58:01
sendkey F5
231 :2262011/01/20(木) 06:50:40
>>230
ありがとうございます(>>226の回答と解釈しました)
でも、F5では縮小版は必ずしも更新されないです。
232 :デフォルトの名無しさん2011/01/20(木) 07:49:08
エクスプローラのプロパティで
「縮小版の場合キャッシュしない」
のチェックを予め外しておくとかチェックしておくとか
233 :デフォルトの名無しさん2011/01/20(木) 08:57:02
WindowsのAPIではハンガリアン記法で型を表してるんですよね?
でも構造体によって例えば

OPENFILENAME構造体
DWORD lStructSize;
DWORD nMaxCustFilter;
WORD nFileOffset;

MENUITEMINFO構造体
UINT wID;
ULONG_PTR dwItemData;
LPTSTR dwTypeData;

などとなっていて、この場合のnとかdwとかが何を表しているのか分かりません
どういう事でしょうか?
235 :デフォルトの名無しさん2011/01/20(木) 14:01:05
DWORD lStructSize;
DWORD nMaxCustFilter;
こっちではDWORDなのにlとかnになってて
ULONG_PTR dwItemData;
LPTSTR dwTypeData;
こっちでは中の型も違うのにdwになってるのが疑問なんじゃない?
236 :デフォルトの名無しさん2011/01/20(木) 14:21:57
そういう話をし出すと、歴史を語らなければいけなくなるんじゃないか
238 :デフォルトの名無しさん2011/01/20(木) 17:33:11
WORD 1文字幅DWORD 2文字幅。
DWORDはLOWORDマクロで下位の1文字を、HIWORDマクロで上位の1文字を取り出せる。
今のところ32bit幅だが、いつ64bit幅や128bit幅になるかは秘密。
239 :デフォルトの名無しさん2011/01/20(木) 17:36:28
>>238
>今のところ32bit幅だが、いつ64bit幅や128bit幅になるかは秘密。

コンパイルオプションで変わる
241 :デフォルトの名無しさん2011/01/20(木) 19:41:43
>>239
LPVOID や LPARAM はともかく、DWORD が 32bit 以外ってなんか変なんだけど、あるんだ。
242 :デフォルトの名無しさん2011/01/20(木) 20:11:17
もともとMicroshiftのマクロ定義な型名はWidowsのバージョンが変わってそのサイズが変化した後でも
コードの変更を最小限に抑えようとするためのものなのでWORD = 1文字幅^^は適当で正解。
WORDの中にはあらゆるWidowsにおいて1文字を格納するのに十分なサイズが割り当てられちゃう。びくんびくん。
243 :デフォルトの名無しさん2011/01/20(木) 20:11:37
本義で言えば、最近のCPUではWORD=64bitなんじゃないのか
244 :デフォルトの名無しさん2011/01/20(木) 20:15:56
>>243
そういう場を混乱させるだけの発言は控えようぜ

x86アセンブラで考えたら
CPUが何ビットになろうが
WORD = 16bit
DWORD = 32bit
QWORD = 64bit
PWORD? = 128bit
245 :デフォルトの名無しさん2011/01/20(木) 21:33:00
>>243
そのとおり
VC6 で動いてた短いプログラムをソースそのままで
VC2008 でコンパイルしたらエラーも警告も出ないのに
動かなくなってた
time_t の長さが変わってたのが原因だった
246 :デフォルトの名無しさん2011/01/20(木) 21:34:56
>>244
アセンブラではそうだろうが
C++っていうかWin32APIレベルだと違うよね
247 :デフォルトの名無しさん2011/01/20(木) 21:42:03
>>246
Win64でもDWORD=32bitだぞ
DWORD_PTRっていう変態型がWin32だと32bit、Win64だと64bitになる
248 :デフォルトの名無しさん2011/01/20(木) 21:44:03
いやWORDが32bitだからさ
249 :デフォルトの名無しさん2011/01/20(木) 21:50:28
>>248
WORDってunsigned shortのtypedefだろ?
shortのビット数が32とか・・俺釣られてんのかな
250 :デフォルトの名無しさん2011/01/20(木) 22:04:30
なんか紛らわしいことになってるけど、正解は >>244だからな。みんな。
C言語からしかかじってない奴はとんでもないこと言い出すな。
251 :デフォルトの名無しさん2011/01/20(木) 22:25:23
DWORDのDはDoubleのD
WindowsのSDKは古い歴史を引き摺り過ぎてる
>>236 >>242
252 :デフォルトの名無しさん2011/01/20(木) 22:27:19
http://msdn.microsoft.com/en-us/library/aa383751(VS.85).aspx
MSDNも引かずに憶測だけで話す奴とか何
>>242
BITMAPFILEHEADERもWidowsのバージョンによって変わるんですかあなた天才ですね
255 :デフォルトの名無しさん2011/01/20(木) 23:08:07
>>245
time_tの元の型を調べろよBOY
256 :デフォルトの名無しさん2011/01/20(木) 23:09:16
いやいや、変わらないとは断定できないぞ。
VC6のころはWNDPROC型は32bit Unsigned Integerだったが今は普通に関数ポインタだ。
257 :デフォルトの名無しさん2011/01/20(木) 23:10:34
>>256
誰に対してのレス?
258 :デフォルトの名無しさん2011/01/20(木) 23:59:22
WIN32API C++で、prinff("%d",x)のように変数xを出力したい場合はどうすればいいんだろうか?
幼稚な質問で申し訳ないんだけど、検索の仕方が悪いのか全くヒットしないんだ…
259 :デフォルトの名無しさん2011/01/21(金) 00:03:40
検索の仕方が悪いのではない。
プログラミングは日本語の使い方を覚えてからにしよう。何をしたいのかさっぱりわからん。
260 :デフォルトの名無しさん2011/01/21(金) 00:04:38
メッセージボックスの表示編集辺りを見れば分かるんじゃない?
261 :デフォルトの名無しさん2011/01/21(金) 00:06:05
もしかしてウインドウを作ってるのにコンソールに出力しようとしてる?
262 :デフォルトの名無しさん2011/01/21(金) 00:11:48
>>258
どこに出力したいの?
264 :デフォルトの名無しさん2011/01/21(金) 00:20:58
出力したいのはウィンドウの方。
TextOut( hdc , 0 , 0 , TEXT("HelloWorld!!") , lstrlen(lpszStr) );
とすれば画面に文字が出るはずだけど、表示するのを文字ではなく変数にしたい。
265 :デフォルトの名無しさん2011/01/21(金) 00:26:03
char c[100];
sprintf( c, "%d", x );
TextOut( hdc , 0 , 0 , TEXT( c ) , lstrlen( c ) );
266 :デフォルトの名無しさん2011/01/21(金) 00:31:42
>>265
TCHARと_stprintf_sを使った方がいい
268 :デフォルトの名無しさん2011/01/21(金) 00:41:35
>>258
printfはxを指定された書式で整形して出力してるわけなので、
自分で整形した文字列をTextOutに渡したい。
と、考えを変えてみることが必要かも。
269 :デフォルトの名無しさん2011/01/21(金) 00:42:30
>>265-267
wsprintfでいけた。ありがとう。
270 :デフォルトの名無しさん2011/01/21(金) 00:46:46
更新忘れてた。
>>268
なるほど。内部的にどういうことが行われているかもしっかり理解しないとなあ…
271 :デフォルトの名無しさん2011/01/21(金) 02:21:46
>>269
wsprintfはobsoleteだろ
>>266 が正解
273 :デフォルトの名無しさん2011/01/21(金) 14:31:45
>>266
ランタイム関数のときはWin32APIのTCHAR,TEXT()ではなく_TCHAR,__T()を使うべき
APIの TCHAR は UNICODE マクロで WCHAR と char に切り替わり
CRTの _TCHAR は _UNICODE マクロで whcar_t と char に切り替わる
WCHAR はWindows2000以降はUTF-16でおそらく今後も固定だが
wchar_tが16bit可変長なのは本来規格違反なので明確に区別するよう意識した方がいい
278 :デフォルトの名無しさん2011/01/21(金) 19:30:25
なんか__Tとか使うとソースがきたなくなっちゃう
279 :デフォルトの名無しさん2011/01/21(金) 19:36:30
>>278
分かる
使いたくない
280 :デフォルトの名無しさん2011/01/21(金) 19:38:08
TEXTがいいの?
282 :デフォルトの名無しさん2011/01/21(金) 19:54:16
>>280
好きな方でいいよ
UNICODEを定義する時は_UNICODEも定義するので同じ
288 :デフォルトの名無しさん2011/01/21(金) 20:38:43
>>279
VC++を捨ててQt4に引っ越す
291 :デフォルトの名無しさん2011/01/25(火) 16:35:37

MFCのAfxBeginThread()で少し質問なのですが
以下の用に、処理スレッド(Func())を作成した場合、
WaitForSingleObject()で待機、Func()が終了すると先に進むだと正常に動くのですが、
WaitForSingleObject()が呼ばれる前に、Func()スレッドが終了し、その後にWaitForSingleObject()が
呼ばれた場合、WaitForSingleObject()でフリーズする場合がたまに発生します。

WaitForSingleObjectが呼ばれる前にFunc()スレッドが終了してはダメなのでしょうか?


CWinThread* pThr = AfxBeginThread(Func,NULL);

少し時間のかかる処理

WaitForSingleObject(pThr->m_hThread,INFINITE);

293 :デフォルトの名無しさん2011/01/25(火) 16:49:49
CWinThread* pThr = AfxBeginThread(Func,NULL,0,CREATE_SUSPENDED);
pThr->m_bAutoDelete = FALSE;
pThr->ResumeThread();

少し時間のかかる処理

WaitForSingleObject(pThr->m_hThread,INFINITE);
delete pThr;
294 :デフォルトの名無しさん2011/01/25(火) 16:59:44
>> 292, 293
ありがとうございます。 
だいぶ昔に同じところでハマったことを思い出しました・・・
修正します
301 :デフォルトの名無しさん2011/01/26(水) 10:56:57
GetGirlFriend 関数は互換性のために残されています。
新しいアプリケーションでは GetGirlFriendEx(DWORD dwMoney) を使用してください。
302 :デフォルトの名無しさん2011/01/26(水) 11:58:50
たこ焼きにイカ入れてみたんだが
なんというか味が薄かった
307 :デフォルトの名無しさん2011/01/27(木) 19:23:45
すれ違いだったらすいません。

wmplayer.exe で mp3 を再生し、ollydbg により、
waveOut系のAPIにブレークポイントを仕掛けました。

目的は waveOutWrite で、予想としては、再生するとちょくちょく
ヒットするはずなんですが、一度もヒットしません。

他の waveOut系APIでは、一部ひっかかるものがあります。

なぜ waveOutWrite でヒットしないんでしょうか?
308 :デフォルトの名無しさん2011/01/27(木) 19:34:31
DirectShowで再生してるんじゃないの
309 :デフォルトの名無しさん2011/01/27(木) 19:40:46
>>308
DirectSound だとしても waveOutWrite をコールしてくると
思ったんですが、違うんでしょうか?
311 :デフォルトの名無しさん2011/01/27(木) 19:50:57
312 :3072011/01/27(木) 19:52:26
モジュール DSOUND から、DeviceIOControl がコールされまくってました。
ローレベルで制御してるようです。

一部のwaveOut系関数でヒットしてたので、勘違いしてました。
失礼しました。
313 :3072011/01/27(木) 19:57:03
>>311
ありがとうございます。

まさにこの下の図の、カーネルモードに入る直前の部分あたりに、
waveOutWrite が使われてると思いこんでました。
318 :デフォルトの名無しさん2011/01/28(金) 19:26:10
LoadLibraryの戻り値が、メインPCではNULL以外で成功するのですが、サブPCではNULLになってしまいます
・指定したファイルはexeと同じフォルダ(かつカレントフォルダ)にある
・そのDLLが依存しているDLL(dependencywalkerで調べたDLL)はちゃんとc:\windows\system32にある
という条件を両方のPCで満たしてる場合に、戻り値がNULLになる原因は他に何があるでしょうか?
両PCともWindowsXP SP3で
メインPC:C2Q Q9550 メモリ1GB
サブPC:AthlonXP 1400+ メモリ1GB

そのDLLの中でDirectXの関数を使用しているのですが、それが原因で
LoadLibraryの段階で失敗するということがあったりするのでしょうか?
319 :3182011/01/28(金) 19:32:01
すみません、書き忘れましたがメインPCで開発してまして
VisualC++ 2008 Expressを使っています
DirectX SDKはOctober 2004です
320 :デフォルトの名無しさん2011/01/28(金) 19:38:36
よくわからないけど GetLastError() でも呼べばいいんじゃないの?
321 :デフォルトの名無しさん2011/01/28(金) 20:04:54
>>320
LoadLibraryの直前にSetLastError(NO_ERROR)してからGetLastErrorした所、
-1073741795 (0xc000001d)という値が返ってきました、検索してみたら
External Error: C000001D
Occurs if you execute MMX instructions on a non-MMX Pentium
ということでした、DLLを/archオプションなしでビルドしなおしてみようと思います
ありがとうございました。
322 :3182011/01/28(金) 20:18:14
すみません、/archオプションは最初から付いていませんでした…
/archオプションがオフでも何かCPUに固有の命令が使われてしまっているのでしょうか?
325 :デフォルトの名無しさん2011/01/28(金) 22:59:57
あ〜そういえば強制的にMMX命令が使われてしまうバグがVCにあったような気がする
329 :デフォルトの名無しさん2011/01/29(土) 10:26:06
FとDどっちも登録しといて押されたときにもう一方が押されてるか見ればいいんじゃないかな
330 :デフォルトの名無しさん2011/01/29(土) 11:01:28
諮問です。
NTFSフォーマットされた1つのHDDから
GetFileInformationByHandleでファイルの情報を取得すると、nFileIndexHighとnFileIndexLowが同一なファイルがあるのですが、
ファイルIDはファイルでユニークにはならいのでしょうか?
331 :デフォルトの名無しさん2011/01/29(土) 11:14:40
「不景気だし国の財政も赤字だから公務員の給与を下げるべき」

「それなら景気が向上したり、財政黒字が達成されれば公務員の給与は上がるの?
バブルの時は好景気だったけど、公務員の給与には反映されなかったよね。」

「公務員ならつべこべ言わずに不利益を享受せよ!」

「それなり日本国民であるあなたも労基法の緩和や増税等にも応じるべきでは?」

「黙れ!」

愚民なんてこんなもんだよ。
332 :デフォルトの名無しさん2011/01/29(土) 12:46:33
>>330
ファイルとファイル名は1:1で対応してるとは限らない
ハードリンクのように1つのファイルに複数の名前をつけられる
333 :デフォルトの名無しさん2011/01/29(土) 14:30:11
>>332
ありがとうございます
334 :デフォルトの名無しさん2011/01/29(土) 19:10:55
hdc = GetDC(hwnd);
hMemDC = CreateCompatibleDC(hdc);
hBitmap = CreateCompatibleBitmap(hdc, WIDTH, HEIGHT);
SelectObject(hMemDC, hBitmap);
DeleteObject(hBitmap);
ReleaseDC(hwnd, hdc);

メモリデバイスを作成する手順はこれで合っていますか?
336 :3342011/01/29(土) 19:31:53
やはり hBitmap を解放するタイミングがおかしいのでしょうか?
337 :デフォルトの名無しさん2011/01/29(土) 21:29:51
SelectしたままDeleteはできないので
Deleteする前にSelect解除しなきゃだめ
338 :デフォルトの名無しさん2011/01/29(土) 21:31:30
まずメモリデバイスとは何なのか俺にはわからん
339 :デフォルトの名無しさん2011/01/29(土) 21:33:22
>>337
なるほど、勉強になりました。
ありがとうございました
340 :デフォルトの名無しさん2011/01/29(土) 21:37:55
>>338
CreateCompatibleDCが返すメモリデバイスコンテキストのことを変に省略したものと思われ
341 :デフォルトの名無しさん2011/01/29(土) 21:54:48
>>331
>「それなら景気が向上したり、財政黒字が達成されれば公務員の給与は上がるの?
>バブルの時は好景気だったけど、公務員の給与には反映されなかったよね。」

反映されてただろ
342 :デフォルトの名無しさん2011/01/29(土) 21:55:54
>>334
DeleteObject(hBitmap);
が成功するんだけど、何故?
343 :デフォルトの名無しさん2011/01/29(土) 22:04:44
>>342
DCにSelectObjectした時点で
メモリにビットマップがコピーされてるから
HBITMAPは煮るなり焼くなり好きにしてもよい。
344 :デフォルトの名無しさん2011/01/29(土) 22:13:57
>>342
タスクマネージャのGDIオブジェクトを見ながらステップ実行してみるといい。
SelectObjectで元に戻さないとDeleteObjectしてもオブジェクトは削除されない。

DeleteDCした時点でまとめて削除される「実装」にはなっているようだが、
「仕様」では元に戻せと書かれてる以上、パッチで変更されても文句は言えない。
345 :デフォルトの名無しさん2011/01/29(土) 22:28:34
>>344
本当だ、削除されてなかった。
何故DeleteObject関数はTRUEを返すのだろうか…?
346 :デフォルトの名無しさん2011/01/29(土) 22:32:52
適当なこと教えんだよ。おい。

>>345
削除してもいいからだよ。
http://msdn.microsoft.com/ja-jp/library/cc428362.aspx
デバイスコンテキストで選択されている描画オブジェクト(ペンまたはブラシ)は削除しないでください。

どこにビットマップが載ってる?
347 :デフォルトの名無しさん2011/01/29(土) 22:36:08
>>346
GDIオブジェクトを確認しながらステップ実行したら、
選択したままだと削除されなくて、元に戻してからだと削除されたぞ
348 :デフォルトの名無しさん2011/01/29(土) 22:37:49
>>347
ただ単に
GDIオブジェクトの数と
ビットマップの内部的な管理は別もんなんだろ。

SelectObjectした後でビットマップをDeleteしてもそのまま動くように作ってあんだよ。
349 :デフォルトの名無しさん2011/01/29(土) 22:38:10
>>346
ばーかばーか

ttp://msdn.microsoft.com/en-us/library/dd162957%28v=vs.85%29.aspx
> An application should always replace a new object with the original,
> default object after it has finished drawing with the new object.
350 :デフォルトの名無しさん2011/01/29(土) 22:40:46
>>349
Objectにビットマップは入ってねえんだろ。
BITMAPの説明にメモリDCにだけおっけー☆って書いてあるし
353 :デフォルトの名無しさん2011/01/29(土) 22:47:47
>>348
選択された状態のビットマップをDeleteしても動くのは、実際は削除されてないからだろ
疑問点は、削除されてないのに何故TRUEを返すのかということだ
354 :デフォルトの名無しさん2011/01/29(土) 22:48:47
>>353
ハンドルは無効にしたけど
実体は残ってるよってこったろ
355 :デフォルトの名無しさん2011/01/29(土) 22:52:35
>>353
削除されなかったときはTRUEを返してはいけないのか?
356 :デフォルトの名無しさん2011/01/29(土) 22:54:08
>>354
じゃあ、選択を解除したビットマップならば、実体も消してくれるってこと?
357 :デフォルトの名無しさん2011/01/29(土) 22:54:29
Zero indicates that the specified handle is not valid or that the handle is currently selected into a device context.

DeleteObject「アタシ、あくまでコダワリはハンドルだけでぇ、実体はキョーミないの」
358 :デフォルトの名無しさん2011/01/29(土) 22:55:42
C++なら新人に多重deleteされないようにdeleteし終わったらNULL入れておくかな。
C++はNULLのdeleteは「何もしない」のが仕様として決まっているから。
無条件deleteでも問題ない話になる。
359 :デフォルトの名無しさん2011/01/29(土) 22:56:38
>>358
スマートポインタ、最低でも auto_ptr で自分で delete 書かないほうがいいだろ。
確実だし、デストラクタでヌル詰めるとか無駄だし。
360 :デフォルトの名無しさん2011/01/29(土) 22:58:36
どこででもSTLが使えると思ってるのはゆとり
361 :デフォルトの名無しさん2011/01/29(土) 23:00:55
>>358
本質的な問題を隠してるだけじゃないのかそれは
365 :デフォルトの名無しさん2011/01/29(土) 23:11:30
>>359と>>361に同意。まずRAIIを徹底する。そしてスマポを使う。
deleteが無意味に何回も呼ばれるようなカスコードはそもそもぶっ殺す。
366 :デフォルトの名無しさん2011/01/29(土) 23:56:50
ああいうのが無能な後輩に育てていくんだろうな
それでいて自分のせいだと気付かずに文句を言う
367 :デフォルトの名無しさん2011/01/30(日) 00:45:18
exitの前にfreeするか的なあれ
368 :デフォルトの名無しさん2011/01/30(日) 01:05:36
>>360
それをWin32APIスレで語っちゃうのはメクラ
369 :デフォルトの名無しさん2011/01/30(日) 01:21:02
>>367
DLL経由でmallocされてたものはfreeせずにexitしちゃだめだろ
371 :デフォルトの名無しさん2011/01/30(日) 18:34:40
>>334
--- 使用前 ---
hdc = GetDC(hwnd);
hMemDC = CreateCompatibleDC(hdc);
hBitmap = CreateCompatibleBitmap(hdc, WIDTH, HEIGHT);
hBitmapSave = SelectObject(hMemDC, hBitmap);
ReleaseDC(hwnd, hdc);

--- 使用 ---
hdc = BeginPaint(hwnd, &ps);
BitBlt(hdc, 0, 0, WIDTH, HEIGHT, hMemDC, 0, 0, SRCCOPY);
EndPaint(hwnd, &ps);

--- 使用後 ---
hBitmap = SelectObject(hMemDC, hBitmapSave);
DeleteObject(hBitmap);
DeleteObject(hMemDC);
372 :デフォルトの名無しさん2011/01/30(日) 23:16:37
Win2KでPrintWindow相当のことがしたいのですがどうすればできますか?
やりたいことは別プロセスから他のウィンドウに隠れたウィンドウのキャプチャ。
キャプチャするウィンドウを前面にもってくるのは×。
374 :デフォルトの名無しさん2011/01/30(日) 23:41:08
375 :デフォルトの名無しさん2011/01/31(月) 00:14:53
>>374
それただのデスクトップキャプチャじゃん
376 :デフォルトの名無しさん2011/01/31(月) 00:23:24
>>375
つ PrintWindow相当のことがしたい
377 :デフォルトの名無しさん2011/01/31(月) 01:01:20
PrintWindowを理解していない馬鹿 >>374
379 :デフォルトの名無しさん2011/01/31(月) 01:33:16
GetWindowDCして自前のメモリデバイスコンテキストにBitBltとか?
隠れた部分まで正しく得られるかは知らん
381 :デフォルトの名無しさん2011/01/31(月) 04:14:24
PrintWindowの挙動を解析してそのまま2k上で実装すればいいだけです
382 :デフォルトの名無しさん2011/01/31(月) 04:25:21
>>381
っ どうすればできるか聞いている
383 :デフォルトの名無しさん2011/01/31(月) 04:26:47
>>382
>>371
385 :デフォルトの名無しさん2011/01/31(月) 10:22:25
メモリー空間違ったら書き込めないからWM_PRINTじゃ無理ですな。
386 :デフォルトの名無しさん2011/01/31(月) 11:29:33
>>371
丁寧にありがとうございます。
しかし1つだけ分からない箇所があります。

--- 使用後 ---
hBitmap = SelectObject(hMemDC, hBitmapSave);

では、hBitmap が hMemDC に割り当てられていたビットマップハンドルを
受け取っているのだと思いますが、そうする理由を教えていただけないでしょうか?
hMemDC に別のビットマップを選択することがない限り、
この必要はないように思えるのですが。
387 :デフォルトの名無しさん2011/01/31(月) 11:39:40
>>386
直後のDeleteObjectで使ってるじゃん
388 :デフォルトの名無しさん2011/01/31(月) 15:39:21
Win32apiで現在のPCの起動状態がセーフモードか判断する方法は
あるのでしょうか?
389 :デフォルトの名無しさん2011/01/31(月) 15:41:39
GetSystemMetrics
SM_CLEANBOOT
390 :デフォルトの名無しさん2011/01/31(月) 17:37:50
>>387
あぁ、なるほど。
hBitmapがローカル変数の場合は、この代入が必要になるのですね。
自分がhBitmapをstatic変数で宣言していたので、疑問に思ってしまいました。
391 :デフォルトの名無しさん2011/01/31(月) 18:19:47
「WM_APP+1」やRegisterWindowMessageで登録したメッセージなどをSendMessageで親ウィンドウに送り、
親ウィンドウがそのメッセージを独自に処理しなかった場合、
SendMessageの戻り値は不定なのでしょうか?それとも必ず0になる?
392 :デフォルトの名無しさん2011/01/31(月) 18:30:19
ビットマップはSelectObjectした状態で削除してもいいのにね
SelectObjectした時点でDCコンパチブルに色変換されてコピーされちゃうからなんだけどね

こういうの馬鹿の壁って言うの?
393 :デフォルトの名無しさん2011/01/31(月) 21:01:02
>>391
DefWindowProcは理解出来ないメッセージに対しては0を返す(たぶん)
394 :デフォルトの名無しさん2011/01/31(月) 21:06:34
MSDNには
DefWindowProcの戻り値はメッセージ次第で
WM_APPの戻り値はNone(==NULLかな)とあるね
395 :デフォルトの名無しさん2011/01/31(月) 22:36:58
>>390
この場合staticかどうかは関係ないと思うぞ
396 :デフォルトの名無しさん2011/01/31(月) 22:38:39
>>394
None のときは NULL ですらないので注意
397 :デフォルトの名無しさん2011/01/31(月) 23:41:39
>>392
Win9xではSelectObjectしたままDeleteObjectはできなかった。
いくら今のWindowsで動いているからと言っても、原則から外れた書き方はよくない。
398 :デフォルトの名無しさん2011/02/01(火) 03:12:11
どうせ原則通りにやっても仕様変更で動かなくなることもあるんだから今動けばいいんだよ
9xで動いてたコードが動かなくなった例なんて腐るほどあるわけだし
つーか9xとNTではモノが全然違うんだから比較してもしょうがないでしょ
399 :デフォルトの名無しさん2011/02/01(火) 03:13:38
漏れは >>397 に同意だが
いまさら 9x の心配をしても仕方ないとは思う
400 :デフォルトの名無しさん2011/02/01(火) 09:00:45
>>393,394,396
どうもです。
0かNoneかは大きな違いかと思うのですが、
親にSendMessageした結果を戻り値で判断するのは危険ということになりますか?

親がそのメッセージを無視してDefWindowProcなどに渡ってしまっても
正しく動くようにしておきたのですが。
401 :3882011/02/01(火) 09:38:56
>>389
ありがとうございますm(_ _)m
402 :デフォルトの名無しさん2011/02/01(火) 09:56:26
WM_CREATE で return -1; とし、CreateWindow を失敗させると、
以後 MessageBox が出せなくなります
これは正常な挙動なのでしょうか
また回避策はないでしょうか
403 :デフォルトの名無しさん2011/02/01(火) 09:59:46
ブラシやペンに限らずDCにSelectObjectされたGDIオブジェクトをDeleteObjectした時は0を返すのがWin32APIの仕様なのだが
動くから問題ないと主張する馬鹿の書いたプログラムでも問題なく動くようにWin32APIは必ずしも仕様通りに実装されていない
404 :デフォルトの名無しさん2011/02/01(火) 10:29:09
DeleteObjectは成功しても、DeleteDCでエラーを返した記憶がある。
たしかビットマップ以外のオブジェクトだったが。
405 :4002011/02/01(火) 10:58:12
すいません、追記です。
WM_SETCURSORなどのように、「このメッセージを内部で処理したらTRUEを返せ」
という流れにしたいと思っているのですが、
DefWindowProcに渡ってしまったらちゃんと0(FALSE)になる、
ということの確信が持てないと、この動きは実現できないですよね?
406 :デフォルトの名無しさん2011/02/01(火) 12:55:53
>>403
仕様通りに実装されてないからこそ動くように書くのが正しい
407 :デフォルトの名無しさん2011/02/01(火) 15:46:07
>>405
if( WM_APP<=msg && msg<WM_APP+xxx )
return 0;
else
return DefWindowProc(...);
とかじゃだめなん?
408 :4002011/02/01(火) 17:50:30
>>407
それだと、無視する処理が親側に必須になってしまいますよね?

送ったメッセージを親が内部で処理しなかったために
DefWindowProcに渡ってしまったときにも、
子が「無視された」と判断したいんです。
410 :デフォルトの名無しさん2011/02/01(火) 19:12:03
>>408
WM_APPで処理をDefWindowProcに渡すってことは
未実装なわけなんだから
送らなきゃいい話じゃないの?
411 :4002011/02/01(火) 19:54:33
>>410
未実装かどうかは子ウィンドウ側はわからない状態です。
親ウィンドウに独自のメッセージを送り、
それを親ウィンドウが処理してくれたかを知りたいんです。

これってそんなに変な動作ですか?
412 :デフォルトの名無しさん2011/02/01(火) 20:09:03
WM_APPとかRegisterWindowMessageとか使ってメッセージやり取りするときって
どんな動作してくれるかあらかじめ分かってるから使うんでしょ
413 :デフォルトの名無しさん2011/02/01(火) 21:21:35
>>403
MSDNも見れない知恵遅れにはプログラムは難しすぎるからお前はぴゅー太でも使ってなさい
414 :デフォルトの名無しさん2011/02/01(火) 21:47:42
>>411
同じような動作を作ろうとして疑問を持って調べたことがある。

ttp://www5d.biglobe.ne.jp/~noocyte/Programming/Windows/WindowsTips.html
ここの「ウインドウメッセージ」にも「0を返すらしい」と書いてあって、
同じようにテストルーチンを組んでみてもたしかに0が返ってくるので、
そういうものなんだと思って、戻り値が0かどうかで判断するようにした。

今のところ問題が発生したことはない。
416 :デフォルトの名無しさん2011/02/02(水) 00:26:48
ウィンドウクラスへのカーソルの割り当てを状況によって切り替えることはできますか?
417 :デフォルトの名無しさん2011/02/02(水) 00:37:38
SetClassLongPtr
418 :デフォルトの名無しさん2011/02/02(水) 00:47:31
>>417
ありがとうございます!
419 :デフォルトの名無しさん2011/02/02(水) 00:59:35
誰か教えて下さい。

DLLにリソースを追加したくて、BeginUpdateResource -> UpdateResource ->
EndUpdateResourceとやってエラーは発生しない。
EnumResourceNamesで確認するとUpdateResourceで追加したリソースも存在するように
見えるのですが、FindResourceで追加したリソースを検索するとNULLが返ります。

何か分かる方いませんか?
422 :デフォルトの名無しさん2011/02/02(水) 01:18:32
バグった汚ソースは
http://xbb.jp/uchichi/test.cpp
です。
C:\log\img\
以下にある全ファイルをカレントにあるResourceDLLnew.dllに追加
するテストアプリです。
424 :4192011/02/02(水) 12:01:14
わかった。
UpdateResourceでリソース名を指定する場合、大文字じゃないと
FindResourceで失敗するようだ。FindResourceは指定されたリソース名
を大文字に変換してから検索するらしい。

でもって、res: プロトコルで使用する場合、リソース名の先頭が
数値文字(e.g. 2011_02_01.GIF)の場合には、IEで表示できない。
リソース名の先頭が数値文字でもFindResourceは大丈夫みたいだ。
425 :デフォルトの名無しさん2011/02/02(水) 13:12:45
いまどき独自メッセージ定義して親子通信しようなんてのがノンセンス
パイプとか共有メモリ使えよ
428 :デフォルトの名無しさん2011/02/02(水) 14:24:25
いまさら、WinAPI頑張っても求人ないんだろうな・・

急に面白く感じ始めたんだけど・・

Qtといい、俺のシュミは金にならん。
429 :デフォルトの名無しさん2011/02/02(水) 14:38:07
できる奴は勉強せんでもMSDNあれば事足りる
できない奴は.netやらされる
430 :デフォルトの名無しさん2011/02/02(水) 14:49:04
しばらく触ってなかったら、WindowsSDKのヘッダがえらく変わってる気がする……
ヘッダいじらないとコンパイルが通らん。
432 :デフォルトの名無しさん2011/02/02(水) 23:58:17
>>428
まぁ無駄にはならないよ
433 :デフォルトの名無しさん2011/02/03(木) 01:18:39
つまらない質問ですが、よろしいでしょうか?
mciSendCommandを使って音楽の再生を行っているのですが、
7/VISTAでは再生されないのですが、これは使用なのでしょうか?(自宅などのXPマシンなどでは動作します)

またmciSendStringで再生が終了したかの確認するにはnotifyで、プロシージャでの取得だけしかできないのでしょうか?
それあたりがよくわからないので、教えていただけないでしょうか?


437 :デフォルトの名無しさん2011/02/03(木) 22:25:38
>>428
WinAPIのどこを頑張るんだ?
APIと構造体と#defineとtypedef全部覚えたら願いがかなう!とかキモイ感じ?
441 :デフォルトの名無しさん2011/02/04(金) 01:02:45
ディレクトリXに001.jpg, 002.jpg, 003.jpg, と1万個のファイルがあるとして、
このときX/002.jpgを与えられた際、同一ディレクトリにあるそれ以外の任意の
1ファイルのパスをなるべく高速に取得する、ということがやりたいです。

思いついた方法としては
1. FindFirstFile,FindNextFileでディレクトリXに存在する1万ファイルを全て
把握して002.jpg以外のファイルを探す
2. DeviceIoControlでMFTを直読みしてX/002.jpgの次に存在するXディレクトリ
配下のファイルを探す

1は楽だけど時間がかかる。2は高速だけどドキュメントも少なく苦労も多い。
ということで、それ以外に「これを使った方が早い/楽」等、
何か使えそうなAPIがあれば教えてくれるとありがたいです。
442 :デフォルトの名無しさん2011/02/04(金) 01:06:10
ごめん。ちょっと誤解を招く内容になってるので少し訂正。
「任意の1ファイルのパス」と書いてるけど、
「002.jpgの次にある任意の1ファイルのパス」
という意味です。
443 :デフォルトの名無しさん2011/02/04(金) 01:28:51
規則性があるなら二分木で探せばいいし、なければ読み込むしかない。
447 :デフォルトの名無しさん2011/02/04(金) 01:41:25
1フォルダ内に1万ファイルか
そこから見直すべきじゃね?
448 :デフォルトの名無しさん2011/02/04(金) 01:46:55
>>443,444
早速の返答ありがとう。
「次のファイル」というのは「MFT上の指定されたレコード(例でいうとX/002.jpg)
の次以降に存在する最初の同一ディレクトリ(例でいうとディレクトリX)に属する
ファイル」という意味です。
ファイルシステムはNTFS決め打ちで考えてもらって問題ありません。
449 :デフォルトの名無しさん2011/02/04(金) 02:39:20
>ドキュメントも少なく苦労も多い
NTFSが出てから何年経ってると思ってんの?
ドキュメントは腐るほどあるしライブラリだってあるし
もしかして日本語じゃないと読めないとか言い出しちゃう人?
少しはググれよ
450 :デフォルトの名無しさん2011/02/04(金) 03:08:54
2000だから1999年ごろだろ
451 :デフォルトの名無しさん2011/02/04(金) 04:45:49
>>449
いや、別に英語読むのはかまわんのだけど、
もっと便利なAPIがあるなら、わざわざそこまで低レベルな
ことやるのも馬鹿らしいし、なにかその辺知っていたら教えて欲しい、
という意味です。
自分がググった範囲じゃ見つけられなかったので、
もし知っていたらお願いします。

453 :デフォルトの名無しさん2011/02/04(金) 07:35:23
FindNextFileってMFT的に”次”のファイルが取れるって保証あったっけ?
454 :デフォルトの名無しさん2011/02/04(金) 08:33:57
例えば、10.jpgの次が20.jpgであるディレクトリに11.jpgを追加すると、
10.jpgの次が20.jpgであることはNTFSでは保証されているのか?
保証されていないならば、*次のファイル*に意味があるとは思えない。
456 :デフォルトの名無しさん2011/02/04(金) 10:25:55
そのファイルのサイズが小さい場合ディレクトリエントリに格納されているかもしれない
457 :デフォルトの名無しさん2011/02/04(金) 10:42:25
ファイル名に連番とかの規則性があるわけではなくて、とにかく次にあるファイルっていうこと?
規則性があるのならプログラムで目的のファイル名を生成してピンポイントでFindFirstFileでいいんじゃない?
規則性がなくて単純に全ファイル名をソートした中の次という意味ならB+Tree検索
ソートもせず、ファイルシステム上の次レコードという意味なら適当なファイルをランダムに開くのと同じ
(一応NTFSはファイル名をソートして記録することにはなっている)
458 :デフォルトの名無しさん2011/02/04(金) 12:25:52
何に使うのかは知らないが、もし俺がアプリケーション内でそれを実装しようとするなら、
アプリケーション起動時に全部呼んで、必要なキーでマップなりなんなりのデータベース作る。
キーは例えば先頭クラスタ番号とか。
以降に書き換えが発生するなら、フォルダ監視で。
459 :デフォルトの名無しさん2011/02/04(金) 15:48:48
NTFSAのファイルエントリがB木で格納されていると知っていればくだらない疑問はわいてこないはずだが
460 :デフォルトの名無しさん2011/02/04(金) 19:24:14
特定の文字列(例えば"OPEN")を入力したらMessageBoxを出す
ウィンドウレスアプリケーションを作りたいのですが、
GetAsyncKeyState関数だけで出来そうですか?
461 :デフォルトの名無しさん2011/02/04(金) 19:29:35
ウィンドウなしでどこに入力するんだ?
462 :4412011/02/04(金) 20:00:40
皆さんどうもありがとう。
結論としては、MFT上の「特定のレコードの次」を取得するためのAPIは
(すくなくとも一般に知られる範囲では)存在しない、
あえてやろうとしたらMFTを直接読むしかない(APIはDeviceIoControl)。
それ以外ではFileFirstFind, Nextで最初にそのディレクトリ配下のファイルを
把握して、その中で「次」を取得するしかない、ということで理解しました。
463 :デフォルトの名無しさん2011/02/04(金) 20:08:02
>>461
デスクトップウィンドウを考えています
464 :デフォルトの名無しさん2011/02/04(金) 20:11:32
>>463
デスクトップにメッセージフックやればいいよ
465 :デフォルトの名無しさん2011/02/04(金) 20:46:53
>>464
ありがとうございます
466 :デフォルトの名無しさん2011/02/04(金) 21:26:49
ちょっとマイナーな?API調べようとしても英語サイトしかでてこないね
日本人は何をしてるんだ
469 :デフォルトの名無しさん2011/02/05(土) 13:18:38
>>466
英辞朗インスコして、一文字一文字マウスカーソルを乗せながら、呼んでいくんだ!
471 :デフォルトの名無しさん2011/02/05(土) 17:09:21
いいからAPI出せや
474 :デフォルトの名無しさん2011/02/06(日) 13:12:29
ショートカットファイルから情報を取り出したいんだけどどうにもうまくいかなくて困ってる。
WSHを試したら新しいのは作れたけど既存のから取り出せなかった。
助けてー

on VC++2008 EE, C++/CLI、フォームアプリ
475 :デフォルトの名無しさん2011/02/06(日) 13:58:29
IShellLink
476 :デフォルトの名無しさん2011/02/06(日) 14:17:34
>>475
それも試したんだけど、
IID_IPersistFile
CLSID_ShellLink
IID_IShellLink
のリンクが通せなくて挫折したorz
C++/CLIでやったから、らしいんだけど、純Win32APIとリンク設定の違いが分からなくて。
478 :デフォルトの名無しさん2011/02/06(日) 14:33:36
してる。してなくてもリンクが通らないこととは関係ないよね?
479 :デフォルトの名無しさん2011/02/06(日) 14:35:28
リンクが通らないってなんのことだ?
リンカのことか?それともコンパイルが通らないってことか?
#include <shlobj.h>書いてないとかそういう話か?
480 :デフォルトの名無しさん2011/02/06(日) 14:43:43
当然リンカ。
インクルード書かなきゃコンパイルも通らない。
482 :デフォルトの名無しさん2011/02/06(日) 14:46:26
initguid
483 :デフォルトの名無しさん2011/02/06(日) 14:50:20
1>リンクしています...
1>hoge.obj : error LNK2020: 未解決のトークン (0A000012) IID_IPersistFile
1>hoge.obj : error LNK2020: 未解決のトークン (0A000014) CLSID_ShellLink
1>hoge.obj : error LNK2020: 未解決のトークン (0A000015) IID_IShellLinkW
1>hoge.obj : error LNK2001: 外部シンボル "IID_IPersistFile" は未解決です。
1>hoge.obj : error LNK2001: 外部シンボル "IID_IShellLinkW" は未解決です。
1>hoge.obj : error LNK2001: 外部シンボル "CLSID_ShellLink" は未解決です。
1>C:\Documents and Settings\hoge\My Documents\Visual Studio 2008\Projects\hoge\Debug\hoge.exe : fatal error LNK1120: 外部参照 6 が未解決です。
484 :デフォルトの名無しさん2011/02/06(日) 14:52:23
ちゃんとCoCreateInstanceで作ってるよね?
486 :デフォルトの名無しさん2011/02/06(日) 15:07:48
そうだ、
http://www.kab-studio.biz/Programing/Codian/ShellExtension/09.html
これを参考にしてみた。

>>484
うん。その関数の引数として483のを使ってるね。
でもそれはリンクとは関係ないでしょ?

http://www13.plala.or.jp/kmaeda/winc/shortcut.htm
これを貼り付けただけなら出来たんだけど、CLIに応用が効かないんだ
487 :デフォルトの名無しさん2011/02/06(日) 15:35:13
ソースを見ないとわからないが、
::IID_IPersistFile
::CLSID_ShellLink
::IID_IShellLink
ってグローバル名前空間にしないとだめなんじゃね?
490 :デフォルトの名無しさん2011/02/06(日) 17:12:22
コンパイルオプションが/clr:pureとか/clr:safeになってるとか
491 :デフォルトの名無しさん2011/02/06(日) 17:24:32
FAQレベルの話をいつまでやってるんだか
492 :デフォルトの名無しさん2011/02/06(日) 17:27:53
>>491が代わりにこたえてくれるらしいぞ
493 :デフォルトの名無しさん2011/02/06(日) 17:29:31
ソ レ ダ !

/clrにしたら通りました
なんてこったい。今度は別の問題に当たったけど頑張ってみます。
お騒がせして申し訳ない。ありがとうございました。
494 :デフォルトの名無しさん2011/02/06(日) 17:30:14
>>490
>>493
495 :デフォルトの名無しさん2011/02/06(日) 18:59:02
>>493
それ根本的な解決になってないw
>>482で答え出てるじゃん
496 :デフォルトの名無しさん2011/02/06(日) 19:10:04
>>495
でも出来たよ?
>>482のは調べてないけどさっぱりだったから何もしてない。
499 :デフォルトの名無しさん2011/02/06(日) 23:00:53
HGDIOBJ型はHPEN型やHBRUSH型を持っているのですか?

キャストしたりしなかったりで、混乱しているので・・
500 :デフォルトの名無しさん2011/02/06(日) 23:20:57
全部void*型です
501 :デフォルトの名無しさん2011/02/07(月) 00:52:49
全てのウインドウの親はいわゆるデスクトップというウインドウなんですよね

502 :デフォルトの名無しさん2011/02/07(月) 02:11:01
デスクトップというウインドウの親は?
504 :デフォルトの名無しさん2011/02/07(月) 02:49:01
>>501
ちがう

>>502
NULL
506 :デフォルトの名無しさん2011/02/07(月) 11:50:02
真実を知ることがこんなにつらいなら
僕は spy になんかなれない
509 :4992011/02/07(月) 13:38:58
>>500
void*なんですね。ああ、そういうことか・・
Cは初心者で、一通り、ざらっと書籍を読んで学んだだけなので
良くわからなかったのですが、いま、ググッて色々しらべたところよくわかりました。

どうもありがとうございましたm(_ _)m

実は、最初は、「何いっとんねん、このおっさん」とおもっていました。。

よ〜く納得できました。ありがとうございました。
511 :デフォルトの名無しさん2011/02/08(火) 21:40:22
Cでwin32api勉強してるんだけど
メニューが表示できない
エスパーさん教えて
512 :デフォルトの名無しさん2011/02/08(火) 22:13:46
>>511
http://wisdom.sakura.ne.jp/system/winapi/win32/index.html
ここの項目76を読むのじゃ
513 :デフォルトの名無しさん2011/02/08(火) 23:02:47
サンプル通りコピペすればコンパイルは出来るけど
メニュー表示されてないってことは
リソースの埋め込みがちゃんと出来てないってことでおk?
519 :デフォルトの名無しさん2011/02/09(水) 00:10:51
見てないけどメニュー識別子が整数なのか文字列なのか分かっていない
522 :デフォルトの名無しさん2011/02/09(水) 19:56:04
brc32じゃ駄目なの・・・?
524 :デフォルトの名無しさん2011/02/10(木) 07:34:48
質問おねがいしまーす。

自スレッドがマウスキャプチャを取得してるときは
そのウィンドウをGetCaptureでそのウィンドウハンドルを取得できますが

他スレッドの場合、MSDNによればGetWindowThreadProcessIdでスレッドidを得て
GetGUIThreadInfoでGUITHREADINFO構造体のhwndCaptureに格納されるって書いてあります。

たしかにそれで取得できるわけですが、 じゃあどのスレッドにキャプチャがあるか知らない時
そのスレッドidを知る方法はありますか?
526 :デフォルトの名無しさん2011/02/10(木) 14:42:27
タイマーのタイムアウト値を変えたいときは

SetTimer(hwnd, TIMER_ID, 1000, NULL);
SetTimer(hwnd, TIMER_ID, 500, NULL);

こんな感じでよろしいでしょうか?
KillTimer() を呼ばなくてもちゃんと置き換わるのでしょうか?
527 :デフォルトの名無しさん2011/02/10(木) 15:14:44
528 :デフォルトの名無しさん2011/02/10(木) 17:58:07
>>527
ありがとうございます
529 :デフォルトの名無しさん2011/02/11(金) 00:50:34
brc32を使ってできたexeファイルをtdumpで開いてリソースを
確認しても変化がみられないので
一度削除して
bcc32で.objをつくり、brcc32で.RESをつくり
ilink32でリンク(埋め込み)して再度tdumpで確認したら
埋め込みは出来ている様。
しかし、exeファイルを実行しようとすると
「有効なwin32アプリケーションではありません」とでて実行できない
誰か解消方法を教えてくれ
ちなみにosはwindows7 64bit
531 :デフォルトの名無しさん2011/02/11(金) 19:41:06
質問させていただきます。
環境はVisualStudio2008EEを使っています。

リソースエディタで作ったエディットボックスに、入力バイト数制限をかけるため、EM_LIMITTEXTを使っています。

コンパイル時の文字セットを「マルチバイト文字セットを利用する」にしている時はうまく動作しました。
しかし事情があって「Unicode文字セットを使用する」でコンパイルする方法に変えました。
結果、入力バイト数ではなく、文字数での制限へと動作が変わってしまいました。

おそらく、CreateWindowWでエディットボックスが作られることとなり、結果文字列がWCHARとして扱われてしまっているのだと思います。

この状態から、コンパイル時の使用文字セットを変えることなく、
うまくマルチバイト扱いでバイト数制限をかける方法はないでしょうか?
よろしくお願いいたします。

・SendMessageAでEM_LIMITTEXTを送ってみる
・SetWindowTextAでマルチバイト文字をセットしてみる
と試してみましたが、効果はありませんでした
532 :デフォルトの名無しさん2011/02/11(金) 19:44:46
サブクラス化して自前でやればいいよ
533 :デフォルトの名無しさん2011/02/11(金) 20:21:49
Unicodeなのにバイト数制限とは?方向性が根本的に間違ってね?
やりたいことは多分Unicode→ANSIと変換して制限、を自前で、だと思うが。
535 :デフォルトの名無しさん2011/02/11(金) 20:25:58
レスありがとうございます。

>>532
自前はちょっと面倒というか、最終手段ということで

>>533
他のところはユニコードで扱っているのですが、
ここだけは「文字列の横幅(=マルチバイト文字でのバイト数)」で制限をかけたいのです。

もちろんユニコードで入力させて、それを内部で横幅制限をかけるように切り詰めるという方法もあるのですが、
そもそも限界を超えて入力できないほうがユーザーが混乱せずに済むと思います。
536 :デフォルトの名無しさん2011/02/11(金) 21:11:46
>文字列の横幅(=マルチバイト文字でのバイト数)
>文字列の横幅(=マルチバイト文字でのバイト数)
>文字列の横幅(=マルチバイト文字でのバイト数)

537 :デフォルトの名無しさん2011/02/11(金) 21:23:35
>>535
534ではダメなのか?
538 :デフォルトの名無しさん2011/02/11(金) 21:36:32
リソースエディタで作ったって言ってるから、自前でCreateWindowは使ってないんじゃね?
541 :デフォルトの名無しさん2011/02/12(土) 03:18:54
>文字列の横幅(=マルチバイト文字でのバイト数)
>文字列の横幅(=マルチバイト文字でのバイト数)
>文字列の横幅(=マルチバイト文字でのバイト数)
>文字列の横幅(=マルチバイト文字でのバイト数)
>文字列の横幅(=マルチバイト文字でのバイト数)
>文字列の横幅(=マルチバイト文字でのバイト数)
>文字列の横幅(=マルチバイト文字でのバイト数)
>文字列の横幅(=マルチバイト文字でのバイト数)
>文字列の横幅(=マルチバイト文字でのバイト数)
543 :デフォルトの名無しさん2011/02/12(土) 06:24:53
CreateWindowでウィンドウを作り(サイズは横400、縦300と考えていただきたい)
その上にCreateWindowでリストボックス(WS_VSCROLLで垂直スクロールバーを付ける)を作成。

でも、これ(リストボックスのサイズは横400、縦300、つまりウィンドウと同じ)だと
リストボックスの垂直スクロールバーが半分くらい右にはみ出ている上に、
スクロールバーの下のボタンが完全にウィンドウからはみ出てしまう。

一応、多分GetSystemMetrics()で、スクロールバーの幅とか高さとか取って
引いてやればいい・・・と思って色々な引数で試したんだが
OSによって、ずれたりもしてしまう。

こういう場合、どういう引数でGetSystemMetrics()を使って
リストボックスのサイズから引けばいいか教えてほしい。

VC6+WinXP(WinMeなども試した)

(説明わかりづらくてすまん)
544 :デフォルトの名無しさん2011/02/12(土) 06:50:37
>>543
親ウィンドウのスタイルにもよるけど、
親と完全に同じサイズだとはみ出てしまうよ。
その場合だと、ウィンドウ枠やタイトルバーの分だけはみ出ているものと思われるので
GetClientRect()でクライアント領域のサイズを取得して
それでリストボックスのサイズを決めればよい。
545 :5432011/02/12(土) 07:05:08
>>544
レスどうもです。

GetClientRect(hWnd,&rect); // rect=RECT型

でクライアント領域のサイズ取得→rect.right と rect.bottomを
リストボックスの大きさに当てる・・・

やってみたんだけど横については全く問題なし(上手くいった)。
ただ、縦については、下に少し隙間(メインウィンドウの下の方)ができてしまう。
XPってのが関係あるんだろうか・・・
546 :デフォルトの名無しさん2011/02/12(土) 07:24:04
>>545
リストボックスのスタイルにLBS_NOINTEGRALHEIGHTを追加してみて。
これをつけないと、最下行に少しだけ表示される項目があるときに
OSが勝手にリストボックスのサイズを変更してしまうので。
547 :543,5452011/02/12(土) 07:54:54
>>546

上手くいったっす。

>>544,546

お二方、助かりました。
サンクスです。
548 :デフォルトの名無しさん2011/02/12(土) 08:19:39
>>541-542
マルチバイト文字なら、バイト数が文字の横幅だよな?
549 :デフォルトの名無しさん2011/02/12(土) 08:27:25
受け取った文字列を WideCharToMultiByte 関数で ANSI 文字列にして
それからチェックすればいいだろ。
こんな小学生でもわかることを質問するなよ。
あと、これは入力されたのが Unicode にしかない文字だとおかしくなっちゃうからな。
551 :デフォルトの名無しさん2011/02/12(土) 09:08:21
>マルチバイト文字なら、バイト数が文字の横幅だよな?
>マルチバイト文字なら、バイト数が文字の横幅だよな?
>マルチバイト文字なら、バイト数が文字の横幅だよな?
554 :デフォルトの名無しさん2011/02/12(土) 10:05:40
Windows7のファイルダイアログってどうやったら実装できますか?
普通にファイルダイアログ使うとXPっぽくなるんで、7のファイルダイアログにしたいです教えてください
VS2005のVC++&MFC使ってます
556 :デフォルトの名無しさん2011/02/12(土) 10:11:17
そういう実装にすればOK。プログラム簡単になって良いじゃん。
558 :デフォルトの名無しさん2011/02/12(土) 10:56:55
アスキーアート
作ってみれば
よくわかる
559 :デフォルトの名無しさん2011/02/12(土) 12:58:38
>>558
おいおいおいおいw
あれはプロポーショナルフォント だからだろうがw
まじで「プロポーショナルフォントだと幅違くなるじゃん」で>>536,541,551を発言したの!?
562 :デフォルトの名無しさん2011/02/12(土) 14:25:33
エデットコントロールが一箇所だけMSゴシックのビットマップフォントになっちゃうの!?
563 :デフォルトの名無しさん2011/02/12(土) 17:53:41
おいおい、プロポーショナルフォントを知らなかったのなら、別にこれで勉強になったからいいじゃんか。
「いまどき」じゃないから俺は間違ってない!とかプライド確保する必要ないって
ここ匿名掲示板だぜ
571 :デフォルトの名無しさん2011/02/13(日) 17:42:58
>>554
ヒント:サイドバイサイド
572 :デフォルトの名無しさん2011/02/13(日) 22:08:52
すみません。「13歳からはじめるC言語ゲームプログラミング」という本を買ってきたのですが、
VC++2008EEでWin32APIベースで作ることになっています。

インスコしたんですが、どうも私は統合環境での開発がいやで(低性能PCだから重い)、エディタ+コマンドラインコンパイルがすきです。
Win32の講座のページもbcc32 -W hoge.cppでやっていたんですが、この本ではGDI+を使っているので
bccではできそうもないです。

VC++Exp2008のVisualStudio2008コマンドプロンプトっていうので、エディタで書いたのをコンパイルしたいのですが、
何オプションをつけてコンパイルしたらいいのでしょうか?

ちなみに、大の大人です。ただ、グラフィックとか音楽の鳴らし方とか、私の好みに合いそうな例題だったんで・・
573 :デフォルトの名無しさん2011/02/13(日) 22:09:45
最近のAPIを使ったアプリケーションを
古いWindowsの上で動かそうとすると
「なんとか.dllが見つかりません」
というエラーが出て来るのですが
古いWindowsの場合だけその機能をスキップして
その他は正常に動作させたいときは
LoadLibraryでAPIを利用するしかないのでしょうか?
574 :デフォルトの名無しさん2011/02/13(日) 22:11:53
>>572
cl hoge.cpp user32.lib gdi32.lib
とかすれば大抵はうまくいくよ
577 :5722011/02/13(日) 22:36:53
>>574
どうもありがとうございます!明日その方法で試してみます!

なんか、リンカがどうのこうのとかかいてあったのですが、ググッてやってみます。

ありがとうございました!
578 :デフォルトの名無しさん2011/02/14(月) 10:10:51
そうゆー論争にはあんま興味ないんだけどさ
何だかんだで天皇陛下のもと日本国民はまとまってる感じ
そんなに天皇が嫌いなら自分から別の土地へ行けばいいのに
583 :デフォルトの名無しさん2011/02/14(月) 13:22:12
ウィンドウ上のスタティックコントロールの文字(フォント)の大きさに
合わせて、スタティックコントロールのサイズを変えるって事をしたいんです。
DelphiのTLabelコンポのAutoSizeプロパティのような物です。

今は、

//st1はスタティックコントロールのウィンドウハンドル
//stringはスタティックの文字列
hDC=GetDC(st1);

GetTextExtentPoint32(hDC,string,strlen(string),&size);

ReleaseDC(st1,hDC);

SetWindowPos(st1,NULL,NULL,NULL,size.cx,size.cy,SWP_NOMOVE);

って感じでやってます。
フォントサイズを全く変えない(14のまま?)場合は
ぴったりの大きさになるんですが

SendMessage(st1,WM_SETFONT,(WPARAM)hFont,TRUE); //hFontの大きさは32

のように、フォントサイズを変えてから上記のことをやると
スタティックの大きさが変わりません。
間違ってる部分を教えて下さい。
584 :デフォルトの名無しさん2011/02/14(月) 13:23:41
現在うごいているスクリーンセーバーを解除して画面を戻すAPIを教えてくださ
585 :デフォルトの名無しさん2011/02/14(月) 13:27:04
586 :デフォルトの名無しさん2011/02/14(月) 13:58:20
>>583
hDCがフォントを選択していないのでは。
588 :デフォルトの名無しさん2011/02/14(月) 16:51:14
ここでいいのか分からないんだけど
OpenProcessでDLLを別のアプリケーションにアタッチしてAPIをフックして
UI用のアプリからDLLプロセスに現在の設定値を通知するようなことがしたいんだけど
UIからDLLへの通信ってどうやればいいんだろう?
相手アプリが1つとは限らないからMutexとか固定されたものを使うわけにはいかないし
589 :デフォルトの名無しさん2011/02/14(月) 19:11:25
面倒ならDLL側でポーリングすれば? タイミングが大して問題じゃないなら。
590 :デフォルトの名無しさん2011/02/15(火) 01:10:49
>>226

いや
急降下以外は ヘルキャット<零式22型 なわけだが?
591 :デフォルトの名無しさん2011/02/15(火) 01:42:49
>>588
ソケットでやるのが楽
クライアント増える前提だと他の共有方法は面倒すぎる
592 :デフォルトの名無しさん2011/02/15(火) 07:02:00
ソケットだとデフォルト設定のファイアウォールで遮断される可能性はないかな?

DLL側でウィンドウ作って、ハンドルをホストアプリに通知
メッセージ待ち受け状態にするのは面倒くさい?
UAC環境では実行ユーザが同じである必要はあるんだけど楽だと思う。
593 :デフォルトの名無しさん2011/02/15(火) 09:31:27
ちょっと教えてください。
DOS6.2のAVSDRV.SYSのファイルって、皆さんどれ使ってますか?
いま、
1996年4月1日58,668バイトのものと
1994年12月8日48,048バイトのものがあるんです。
594 :デフォルトの名無しさん2011/02/15(火) 10:26:14
Rectangleで長方形を書いて
InvalidateRectでその長方形を再描画する。
こう↓

InvalidateRect(hWnd,&rect,FALSE);

すると色々変な現象がおきる。

1. ビルドして実行するとウィンドウ上のボタンやリストボックスが消えてしまうことがある(消えない場合もある)。
(ボタンやリストボックスはクリックすると現れる)
2. ボタンが2つあって、一つをクリックした後、もう一つのボタンを押すと
先に押したボタンの内側に変な線が残る

どうしたらいいか、教えてくれー
595 :デフォルトの名無しさん2011/02/15(火) 10:51:55
WS_CLIPCHILDREN
WS_CLIPSIBLINGS
597 :5942011/02/15(火) 11:16:06
>>595
その2つの引数加えてウィンドウ作ったら
1の問題は解決したっぽい。
ありがと。
でも2の問題は解決しない・・・
598 :デフォルトの名無しさん2011/02/15(火) 14:03:43
>>592
ウィンドウはいいアイデアだなと思ったけど
UIウィンドウのアドレスはどうやって通知するの?w
599 :デフォルトの名無しさん2011/02/15(火) 15:46:33
質問いっすか?
602 :デフォルトの名無しさん2011/02/15(火) 16:59:27
RedrawWindow
UpdateWindow
InvalidateRgn
の使い分けの仕方を教えてください
603 :デフォルトの名無しさん2011/02/15(火) 22:21:49
>>602
http://msdn.microsoft.com/ja-jp/library/cc364699.aspx
ここを一読した後に
MSDNでそれらの関数の項目を読めば理解できると思う
604 :デフォルトの名無しさん2011/02/15(火) 23:50:55
>>598
UI側のクラス名かウィンドウ名(または両方)を決めておけば、
FindWindowでウィンドウハンドル取得できる。
605 :デフォルトの名無しさん2011/02/16(水) 03:28:33
そんな用途ならウィンドウよりスレッドがいいんじゃないの?
606 :デフォルトの名無しさん2011/02/16(水) 10:32:21
すんません、>>599です、昨日質問できずに帰ってしまったので・・

質問しますけどいいですか?
607 :デフォルトの名無しさん2011/02/16(水) 10:45:58
質問してもいいかという質問をすでにしている点についてはどう思いますか?
608 :デフォルトの名無しさん2011/02/16(水) 14:39:31
わかりました、じゃあわかりました。

質問いいっすか?
618 :デフォルトの名無しさん2011/02/17(木) 13:42:17
623 :デフォルトの名無しさん2011/02/17(木) 18:13:03
質問

お前等ってどうして知らないのにレスするのですか?
624 :デフォルトの名無しさん2011/02/17(木) 18:16:37
知らなかったらレスしてはいけないのですか?
625 :デフォルトの名無しさん2011/02/17(木) 18:44:25
>>624
知らないのにレスしないで下さい。ウザいだけです。
626 :デフォルトの名無しさん2011/02/17(木) 18:49:52
キムチ鍋ではなくチゲ鍋じゃないのか。
確かに美味いと思う。
漬物といえば今はキムチだしね。

っと板が全くちがうでわないか。
627 :デフォルトの名無しさん2011/02/17(木) 18:56:23
>>625 は >>1 を読むべきでしょう
632 :デフォルトの名無しさん2011/02/17(木) 23:47:33
【調査】アラゆる世代の女性に聞きました!「好きな鍋料理は?」→全世代キムチ鍋−笑っていいとも[11/02/17]
http://yuzuru.2ch.net/test/read.cgi/liveplus/1297914086/
633 :デフォルトの名無しさん2011/02/18(金) 04:00:15
韓国のオバサンが素足でキムチを踏んでるシーンをテレビで見てから食えなくなった。
ちなみに、フランスの若い女がぶどうを踏んで作ったワインは飲める。
634 :デフォルトの名無しさん2011/02/18(金) 10:43:35

>>633は白人コンプレックス
635 :デフォルトの名無しさん2011/02/18(金) 11:17:09
もりあがってるところすみませんが
シングルクリックとダブルクリックを区別したいのですが
ダブルクリックを受け取るときにどうしても
シングルクリックが同時に来てしまうのです
助けてください
636 :CS_DBLCLKS2011/02/18(金) 11:57:29
いやです
641 :デフォルトの名無しさん2011/02/18(金) 20:44:15
>>635
当たり前だけど最初のクリックの後次が来るかどうかなんてわからないので
大抵はダブルクリックの動作の布石になるような動作処理をシングル側に書いたりする

どうしてもイヤなら待つ
642 :デフォルトの名無しさん2011/02/18(金) 20:47:07
ちなみに布石ってのは、例えばダブルが何かを確定させる動作なら
シングルはその 何 を選択させる動作、みたいな
参考:Explorerの動き
644 :デフォルトの名無しさん2011/02/18(金) 22:38:50
>>642
何いっちゃってちゃっててっててるのこいつ?
649 :デフォルトの名無しさん2011/02/19(土) 05:45:46
自前でDLLを作って
BOOL WINAPI DllMain(HINSTANCE hInstDLL, DWORD dwReason, LPVOID lpvReserved)
の hInstDLL の値を
dwReason が DLL_PROCESS_ATTACH のときにテスト表示させています
Windows 2000 とか Windows XP とかだと起動する exe 毎にこの値が変化するのですが
Windows Vista だと (Windows 7 は持ってないので試せない) exe を複数同時に起動しても同じ値になります
この辺の事情について詳しく解説されているサイトなど検索してみたのですが見つからず
ご存知の方いらっしゃいましたら教えて頂けるとありがとう
650 :デフォルトの名無しさん2011/02/19(土) 10:33:57
>>649
異なるプロセス空間ですから、同じ値になっても不思議はありません。もちろん異なる値になっても不思議はありません。
hInstanceの値は単なるハンドルなので、同一プロセス空間内で区別が出来ること意外のことは関知しません。
その値の内容について気にしてはいけません。
それをふまえた上で、その結果が偶然ではないとすると、単純にDLLがロードされるアドレスに由来する値が
返されていたのが、ASLRの関係でそうではなくなっただけではないでしょうか。
652 :デフォルトの名無しさん2011/02/19(土) 18:41:19
XP以前はベースアドレスが他のDLLと被っててリロケーションが発生してるだけだろ
653 :デフォルトの名無しさん2011/02/19(土) 18:56:09
リロケーションが発生しても再配置ルーチンが一緒なんだから毎回同じアドレスになるはずでは?
659 :デフォルトの名無しさん2011/02/20(日) 23:48:47.16
ここを見て勉強中です。
ttp://www.geocities.jp/ky_webid/win32c/041.html
hButton や hButton1, hButton2, hButton3 等を作ったあと
プログラムの最後(WM_DESTROY?)に破棄していないようですが、
これはほっといてもOSが勝手に破棄してくれるということでしょうか?
661 :デフォルトの名無しさん2011/02/21(月) 05:05:44.51
今「一式戦闘機 隼」を見てるけど
ナレーションはまだしも、チンケなBGMなんか付けるなよ。

エンジン音が聞こえん。。
662 :デフォルトの名無しさん2011/02/21(月) 10:31:20.02
SetForegroundWindow() を呼んでいなかったのが原因でした
本当にありがとうございました
664 :デフォルトの名無しさん2011/02/21(月) 18:47:54.71
Window の拡張スタイルに WS_EX_LAYERED というのがあって、半透明の
Window が作れるけれど、MDI で開いた Window にはこれを設定する
方法が見つからない。CreateMDIWindow() には Ex 付きはないし、
MDICREATESTRUCT にもそのエントリーがない。SetWindowLong(),
SetWindowLongPtr() でも WS_EX_LAYERED がセットできない。
半透明にする裏技はないんでしょうか。
665 :デフォルトの名無しさん2011/02/21(月) 22:13:33.14
トップレベルウィンドウ用の属性が何故使えると思ったのかね?
667 :デフォルトの名無しさん2011/02/22(火) 06:29:01.56
MDIっていまどき流行らないよ
668 :デフォルトの名無しさん2011/02/22(火) 09:30:10.72
流行り廃りはどうでも良い
本人はそれを行う方法を探してるのだ
669 :デフォルトの名無しさん2011/02/22(火) 13:18:58.08
>>667
否定だけで何の解決も示さない存在価値のないレスかっこいいですね
670 :デフォルトの名無しさん2011/02/22(火) 13:21:26.72
>>667
知らないならレスしないで下さい。ウザいだけです。
674 :6642011/02/23(水) 10:36:41.65
折角ですから、お笑いネタ。
MDI 子ウインドウに対して
long lStyle = GetWindowLong(hWnd, GWL_EXSTYLE);
SetWindowLong(hWnd, GWL_EXSTYLE, (lStyle | 0x00080000));
を実行しても、GWL_EXSTYLE の値は変わりません。
LastError を見ると、両方とも実行後は「正常終了」。
念のため、各実行前に SetLastError(-1); を入れると
実行後両方とも "-1" 。
675 :デフォルトの名無しさん2011/02/23(水) 10:49:21.07
>>674
665 名前:デフォルトの名無しさん[sage] 投稿日:2011/02/21(月) 22:13:33.14
トップレベルウィンドウ用の属性が何故使えると思ったのかね?
677 :デフォルトの名無しさん2011/02/23(水) 11:26:42.06
>>674
それがどうかしましたか?
678 :デフォルトの名無しさん2011/02/23(水) 12:25:56.24
>>674
どこがおもしろいのか教えてくれないか?
679 :デフォルトの名無しさん2011/02/23(水) 13:07:38.96
>>674-678
>>667さんの人気が羨ましいからって、自演してまで同じことしても無駄ですよ
680 :デフォルトの名無しさん2011/02/23(水) 14:18:01.76
マウスカーソルが98画面内にあるときは98のマウスカーソル
画面外にあるときはWindowsのマウスカーソル
自動的に切り替えられるエミュってできないのかなぁ
684 :デフォルトの名無しさん2011/02/23(水) 18:28:47.60
PC-98 を絶滅に追いやったのは Windows98 なんですか?
685 :デフォルトの名無しさん2011/02/23(水) 19:02:19.82
価格だろう
PC-9821Ap3になんやかんや付けて70万くらいした気がする
687 :デフォルトの名無しさん2011/02/23(水) 19:09:57.35
済みません、質問なのですが宜しくお願いします

既にPopupで作成されたウインドウをOverlapに変更する方法はありませんでしょうか?
ウインドウのオーナーを直接変更する関数はAPIに存在しないようですが、何か方法があれば教えてくださいませ。
他にオーナーウインドウを持つPopuoウインドウを、他にオーナーウインドウを持たないOverlapウインドウに変更したいです。
689 :デフォルトの名無しさん2011/02/23(水) 19:17:33.75
レス有難うございます。
Parentでなく、オーナーを変更したいのです。
0 をいれてParent をデスクトップにしてもオーナーは元のままになって、最小化した時にタスクバーに隠れません
691 :デフォルトの名無しさん2011/02/23(水) 20:20:30.19
レス有難うございます。
最小化時にタスクバーに隠れました。
でも、オーナーウインドウを閉じると一緒に終了してしまいますので、Overlapにはなっていないかも知れません。
当面の目的を達せましたので、これで色々と書いてみます。
692 :デフォルトの名無しさん2011/02/23(水) 21:04:36.48
アプリ(A)が起動時に他のアプリ(B)からウィンドの操作を行いたいと思います。
たとえば、Aが最小されている場合BがAに対してSendMessageでSC_RESTOREを送信すると、最前に表示されます。
ここから質問なのですが、
Aが他のアプリのバックグランドに隠れているときに最前に表示をさせたいときはどのようにすればよいでしょうか?

やりたいことは、タスクトレイアプリ(B)がGUIアプリ(A)を起動させるのですが、
Aがすでに起動している場合は最前に表示を行いたいだけです。
Aのハンドルはもちろん外部ファイルかでBも知っているのでSendMessageで何かを送信すればよいと思うのですが・・・
長文ですいません。
693 :デフォルトの名無しさん2011/02/23(水) 21:11:34.98
>>684
マジレスするとCバスとそのための独自サウスブリッジのコストと性能じゃね?
694 :デフォルトの名無しさん2011/02/23(水) 22:24:15.55
>692
setforegroundwindow attachthreadinputでぐぐれ
695 :デフォルトの名無しさん2011/02/23(水) 22:28:12.98
印刷前提の描画処理内で太い点線
(PS_GEOMETRIC | PS_ENDCAP_SQUARE | PS_DASH)を描いているのですが、
これに太い輪郭を付けようとすると、どういう方法が考えられますか?

線の太さを変えて同じ位置に描く
→点線だからずれてしまう

同じ太さでループで回しながら周囲に描く
→何百回も描画が必要な上に、斜め線のときには輪郭が8方向に角張ってしまう

と、自前で調べた方法ではうまい描画にならず、困っています。
700 :6922011/02/24(木) 10:58:05.21
>>694
ありがとうございます。簡単に解決しました(^^

マイクロソフト ワイヤレス ブルートラック マウス Arc Touch Mouse RVF-00006
マイクロソフト ワイヤレス ブルートラック マウス Arc Touch Mouse RVF-00006