Win32API質問箱 Build ..
[2ch|▼Menu]
136:デフォルトの名無しさん
07/09/13 22:17:50
プログラムを動かしてるOSにないAPIを使ったらどんなことが起こるのでしょうか。
例えばWin9xでW系APIや、Win2000でuxthemeのAPIなどです。
その関数が実行されないだけとか、何かエラーが発生する、そもそも起動できないとか。
試す環境がないので聞いてみました。

137:デフォルトの名無しさん
07/09/13 22:25:17
爆発する

138:デフォルトの名無しさん
07/09/13 22:38:32
>>136
スタティックリンクならエントリポイントが見つからないとかなる
動的リンクなら実行されないかエラーになる

139:デフォルトの名無しさん
07/09/13 22:40:13
URLリンク(www.uploda.org)
起動はする(CreateProcess == TRUE)けど、エントリーポイントに行く前にcsrss.exeが爆発させるので
ユーザー視点では起動しないのと同じ

140:デフォルトの名無しさん
07/09/13 22:55:22
9xのW版APIはエントリポイントだけあるはず。
そして稀にMessageBoxWやTextOutWなど機能するものがある。

141:デフォルトの名無しさん
07/09/13 22:55:24
dllからアタッチしたプロセスIDやウインドウハンドルとか取得するには何を使えばいいんですか。
ヒントください。

142:デフォルトの名無しさん
07/09/13 22:58:50
あたっちすれっどなんとかとか

143:デフォルトの名無しさん
07/09/13 23:08:56
>>140
忘れてけどそういえばそうだった 単純に失敗を返すだけの実装になってるんだった
で、たいていRegisterClassで失敗して無言でWinMainを終える、と

144:デフォルトの名無しさん
07/09/13 23:16:57
プログラミングWindowsで、RegisterCassExが失敗したら
MessageBoxで9x非対応というメッセージを表示して終了するコードを見て、
なるほどと思った。

145:141
07/09/13 23:19:59
>>142
ありがとん
DWORD GetCurrentThreadId(VOID);を見つけました。

146:デフォルトの名無しさん
07/09/14 00:03:42
>>140
MSLU使えば強制ANSI変換で一応動くはずだしな

147:デフォルトの名無しさん
07/09/14 00:07:00
>>146
つい先日、MSLUの浮動小数点のバグではまった。

148:デフォルトの名無しさん
07/09/14 00:08:35
だがすぐに抜け出した。

149:デフォルトの名無しさん
07/09/14 00:56:25
そしてまたはまった。

150:デフォルトの名無しさん
07/09/14 01:07:53
なんかエロい話だな

151:デフォルトの名無しさん
07/09/14 02:56:13
出して、入れて、出して、入れて、これがプログラムの基本です。

152:デフォルトの名無しさん
07/09/14 04:01:22
SNEG?

153:デフォルトの名無しさん
07/09/14 05:09:26
挿入が先だ。POPは後だ

154:デフォルトの名無しさん
07/09/14 05:14:05
朝からinserterだのpush_backだのと

155:デフォルトの名無しさん
07/09/14 05:18:01
Oh,Yes!Come on Fuck me!!

156:デフォルトの名無しさん
07/09/14 07:10:43
Yes,pussy

157:デフォルトの名無しさん
07/09/14 07:46:26
Shell_NotifyIcon の uTimeout が10秒より短くしても無視される件、
突破する方法しりませんか?

3秒がいいんだけど。

158:デフォルトの名無しさん
07/09/14 07:55:35
The system minimum and maximum timeout values are currently set at 10 seconds and 30 seconds, respectively.

159:デフォルトの名無しさん
07/09/14 08:21:35
通知アイコン専用スレッド作っちゃえ。
Shell_NotifyIconがタイムアウトするのは、
別の重い処理が走っているという事だから、
焦らず待ってもいい気はするけどね。

160:デフォルトの名無しさん
07/09/14 17:33:22
shit

161:157
07/09/14 18:13:00
>>158
それは読んだ。レジストリとかで変更できるのかな。
まさかシステムのDLLにハードコードされてるのか??

>>159
szInfoにNULLを渡すと消せるみたいなので、自分でタイマ制御するかな。。。

162:デフォルトの名無しさん
07/09/14 20:32:52
もしスレ違いだったらすみません。

ウィンドウを複数表示させて(子ウィンドウなど)、
ひとつのウィンドウをドラッグして移動させたら、
他のウィンドウも一緒に移動するようなことってできないんですかね?
グループ化のようなことです。

163:デフォルトの名無しさん
07/09/14 21:06:13
>>162
ハンドル保持してるんなら
WM_MOVEとかで設定したら?

164:デフォルトの名無しさん
07/09/14 21:25:23
>>162
>>163はなしで
WM_MOVEは移動後に送られるもんだった


165:デフォルトの名無しさん
07/09/14 21:43:40
WM_MOVING

166:デフォルトの名無しさん
07/09/14 23:39:20
素朴な疑問です。
皆さんにとってTCHAR型は現役ですか?

typedef std::basic_string<TCHAR> tstring;
とか
#ifdef UNICODE
とか、
もうそんな時代じゃないのでしょうか?
コード量を増やし、可読性を下げる、ゴミ虫のような存在でしかないのでしょうか?

167:デフォルトの名無しさん
07/09/14 23:50:03
TCHARで思い出したけど。
Win32APIのワイド文字はあくまでWCHARであり、wchar_tは違うよね。

168:デフォルトの名無しさん
07/09/14 23:59:01
俺はTCHARを現役にさせている。
使わないけど目の前にWindows 98マシンを置いている影響かも。

しかし、#ifdef UNICODEはメインのコード中には出現させない。
比較的ライブラリ的な部分で吸収するようにしている。

>>167
そうかもしれないけど、
でもきっとみんなごっちゃに扱っているよ。
少なくとも俺はそう。

169:デフォルトの名無しさん
07/09/15 00:02:43
俺も現役だな。
文字列は LPCTSTR とか _T() で囲ってたりする。

ただ tstring も使ってはいるんだけれど、
サロゲートペアの問題により
TCHAR* 変数を ++ した所で次の文字を指す保証は無いと知って、
CharNext() を利用する CString の方が安全という事を最近知った。

170:デフォルトの名無しさん
07/09/15 00:07:36
VC2005でプロジェクト作ってまずするのは、「マルチバイト文字セットを使用する」

171:デフォルトの名無しさん
07/09/15 00:20:17
はい、>>166はゴミ虫のような存在でしかありません。

172:デフォルトの名無しさん
07/09/15 01:32:40
> TCHAR* 変数を ++ した所で次の文字を指す保証は無いと知って、
どうして?

173:デフォルトの名無しさん
07/09/15 01:33:10
ごめんサロゲートペアって書いてあるな

174:デフォルトの名無しさん
07/09/15 01:33:17
>サロゲートペアの問題により

175:デフォルトの名無しさん
07/09/15 01:44:12
漏れはTCHAR撲滅
STLでstd::string使うようにした
コードはUTF-8
API呼ぶときだけWCHARにして渡してる
戻り値も変換してから使う
無駄なこと考えなくて済むようになったので
プログラミングに専念出来るようになった

176:デフォルトの名無しさん
07/09/15 01:49:24
std::stringにUTF-8を突っ込むとな?

177:デフォルトの名無しさん
07/09/15 01:56:34
>>169
CharNextはサロゲートペア非対応って書いてあるけど。
URLリンク(blogs.msdn.com)
でも結合文字列に対応しているのは立派。

あと、tstring/CStringで、インクリメントして次の文字にならないと言えば、
サロゲートペアや結合文字列の前に、ANSI時のマルチバイト文字があるだろうに。

178:デフォルトの名無しさん
07/09/15 02:05:26
>>169
サロゲートペアでなく、マルチバイトの問題のことを言っているのか?

現時点ではCharNextを使ってもサロゲートペアは扱えず、
IS_SURROGATE_PAIR
IS_HIGH_SURROGATE
IS_LOW_SURROGATE
というマクロを使って判定するしかないそうな

参考
URLリンク(slashdot.jp)

179:デフォルトの名無しさん
07/09/15 02:06:55
かぶった...orz

180:デフォルトの名無しさん
07/09/15 02:44:17
>>176
なんか問題あるの?

181:169
07/09/15 02:44:40
>>177-178
うそん orz

182:デフォルトの名無しさん
07/09/15 02:52:03
質問です。
VB6 でファイルのプロパティ(バージョンや製品名など)を取得するのに
GetFileVersionInfo等を使っています。
ロケールIDをVerQueryValueで取得できたので、言語名をGetLocaleInfo(ロケールID, LOCALE_SENGCOUNTRY)で
取得すると、"Japan"という英語の文字列が返ってきました。
しかしシェルの「ファイルのプロパティ」で表示されるのは「日本語」や
「英語(米国)」など日本語の文字列です。
これを取得するにはどうしたらいいんでしょうか?

183:デフォルトの名無しさん
07/09/15 02:55:14
ジャパーン♪

184:デフォルトの名無しさん
07/09/15 03:33:22
FAR PASCALとかNEARって書いてあるコードをたまに
見かけますが
どういう意味があるんですか?

185:デフォルトの名無しさん
07/09/15 03:41:58
16ビットの名残

186:デフォルトの名無しさん
07/09/15 10:31:59
_stdcallとか_cdeclって書いてあるコードをたまに
見かけますが
どういう意味があるんですか?

187:デフォルトの名無しさん
07/09/15 10:37:18
聞く前にドキュメント嫁

188:デフォルトの名無しさん
07/09/15 10:37:35
ググれ

189:デフォルトの名無しさん
07/09/15 10:40:16
ドキュメントなんてないし
ぐぐってもでないからきいてるんだよ
わかんないなら書き込むなよ

190:デフォルトの名無しさん
07/09/15 10:43:44
すいません 調べたらなんとなくわかりました
スレ汚しすまそ

191:デフォルトの名無しさん
07/09/15 10:49:28
>>189
死ね

192:デフォルトの名無しさん
07/09/15 11:00:09
>>182
MSDNよく読めや、ボケが。

と言いたいところだが、これに関してはwinnls.hを直接読んだ方が遥かに手っ取り早い。
たぶん、必要なフラグは LOCALE_SNATIVELANGNAME だと思う。

193:デフォルトの名無しさん
07/09/15 11:14:18
クイズの答えをEditコントロールに入力し、
その文字列を取得し、比較し正解か不正解か

というものを作りたいんですが、文字列を取得する方法を教えてください。
一応調べたら、GetWindowTextではできないってことはわかったんですが・・。

194:デフォルトの名無しさん
07/09/15 11:19:30
次の質問をどうぞ

195:193
07/09/15 11:37:50
すみません。自己解決しました☆GetWindowTextでできました。

196:デフォルトの名無しさん
07/09/15 13:35:36
おめでとう☆

197:デフォルトの名無しさん
07/09/15 15:42:58
以前、マウスカーソルの移動とキーの自動入力を行うプログラムを作る必要があり、
その時は、調べて解決したのですが、今調べるとどうしても見つかりません。

たしか、APIをコールした後、開放しないと入力を受付けなくなるタイプと、
入力を受付けるタイプ(たしか、こちらは非推奨だったような)の二つがあったと思います。
そのような、マウスカーソルの移動とキーの入力を行う
APIの名前をご存知のかたがいらっしゃったら教えてください。

198:デフォルトの名無しさん
07/09/15 15:50:48
チートしたいから教えて下さいってはっきり言えや

199:デフォルトの名無しさん
07/09/15 17:26:15
チートしたいから教えてください!

200:デフォルトの名無しさん
07/09/15 17:48:13
ISAPIでのメールスロットについて悩んでおります。

まず、メールスロットのサンプルプログラムを作りました。
HANDLE hSndSlot = CreateFile(SLOTNAME, GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL ) ;
この通りにCreateFileしますと問題なくハンドル作成できます。

次にISAPIのDLLの中で全く同じCreateFileの一文を書いたのですが、
ERROR_ACCESS_DENIEDのエラーになってしまいます。
(CreateMailSlot無しですと、ISAPI-DLLの中でもERROR_FILE_NOT_FOUNDが返ってきます)

ISAPI-DLL内でCreateFile()に失敗する原因としてどのようなものが挙げられるでしょうか。
二時間以上悩んでおりますが全く抜け出せません・・・

201:デフォルトの名無しさん
07/09/15 18:59:20
セキュリティー上危なくない?

202:デフォルトの名無しさん
07/09/15 23:06:26
すみません。
OleLoadPictureを使ってjpegを読み込みたいのですが、
読み込んだ直後にIPicture::get_Height、 get_Widthでサイズを取得すると、
実際の画像の大きさよりかなり大きな値になりました。
例えば113 は 2990に、640は16933になります。
OleLoadPictureの戻り値は正常です。
何か原因でしょうか?

203:デフォルトの名無しさん
07/09/15 23:11:32
>>202
それ単位がPixelじゃないんだ
HIMETRICなんだ

URLリンク(msdn2.microsoft.com)(VS.80).aspx

204:デフォルトの名無しさん
07/09/15 23:52:07
>>203
なるほど。おかげ様で正常にピクセル単位に変換できました。
ありがとうございました。

205:デフォルトの名無しさん
07/09/16 00:50:29
>>192
回線切ってwinnls.h を読んできました。なんとかなりそうです。
SENGCOUNTRY って、English Country のことですね。
そこら辺に落ちてたサンプルの作者が分かってなかったみたいです。
人のせいにします。
ありがとうございました。


206:デフォルトの名無しさん
07/09/16 00:53:00
このスレの人たちはMFC使ってない人が多いのかな?
個人的にはMFCきらいなんでWin32そのまま使ってます

207:デフォルトの名無しさん
07/09/16 00:56:36
MFCは別スレなんだから、ここは使ってない人が多いのは当たり前。

208:デフォルトの名無しさん
07/09/16 01:10:04
>>205
一応追伸
俺が求めていたのはLOCALE_SLANGUAGE(localized name of language)
だったようです。では。

209:200
07/09/16 08:46:51
もう5時間試行錯誤しているのに
さっぱり進めないッスorz

210:デフォルトの名無しさん
07/09/16 08:52:10
>>209
>>201

211:デフォルトの名無しさん
07/09/16 08:55:31
>>209
死ぬまで彷徨えばいいよ

212:デフォルトの名無しさん
07/09/16 09:25:48
>>209
ISAPI全然しらんけど
MSDNライブラリの「Reading from a Mailslot」っての読んだ?

213:デフォルトの名無しさん
07/09/16 09:27:23

SHFileOperation でフォルダ・ファイルのコピー等の操作をしています
Explorerでは、出てくるダイログが最前面表示でしっかり出てきますが、
Flagの設定等でそれと同じようにできるでしょうか、教えてください。


214:デフォルトの名無しさん
07/09/16 09:35:37
できます

215:デフォルトの名無しさん
07/09/16 09:38:50
>>209
正直IIS全然詳しくないけど、ISAPIってNetworkServiceで動作するんじゃないの?
メールスロットの作成元がよく判らないけど、
既定では作成ユーザかSystem位しかアクセスできないような気がする。

216:デフォルトの名無しさん
07/09/16 09:41:25
>>214

どうもありがとうございました!!

217:デフォルトの名無しさん
07/09/16 09:43:06
bool(BOOL)は扱いが楽だが、たまに情報量が少なくて戻り値型を変えてほしいと思うケースがある

218:デフォルトの名無しさん
07/09/16 09:52:10
HRESULTにしろってか

219:デフォルトの名無しさん
07/09/16 10:00:27
>>214
ところで、Flag引数のバリエーションにはヘルプによると

fFlags
FOF_ALLOWUNDO
FOF_CONFIRMMOUSE
FOF_FILESONLY
FOF_MULTIDESTFILES
FOF_NOCONFIRMATION
FOF_NOCONFIRMMKDIR
FOF_NO_CONNECTED_ELEMENTS
FOF_NOCOPYSECURITYATTRIBS
FOF_NOERRORUI
FOF_NORECURSION
FOF_NORECURSEREPARSE
FOF_RENAMEONCOLLISION
FOF_SILENT
FOF_SIMPLEPROGRESS
FOF_WANTMAPPINGHANDLE
FOF_WANTNUKEWARNING

とありましたが、これ以外にもありますでしょうか?該当の内容のFlagが
見つけられずにいます、よろしければご教示のほどよろしく!

220:デフォルトの名無しさん
07/09/16 10:34:25
ヘッダ眺めれ

221:デフォルトの名無しさん
07/09/16 10:45:58
hwnd

222:デフォルトの名無しさん
07/09/16 13:39:59
>>220-221

hwnd ではゼロポインタを指定しています。これを別のものに設定すると
可能になるでしょうか。
じつはWin32APIはほとんどこれしか使っていない.NETユーザーなもので
この辺のことがよくわかりません。すみませんが、よろしくお願いします。


223:デフォルトの名無しさん
07/09/16 15:19:06
>>222
C言語暦1ヶ月のわて思うに
hwndをゼロポインタにしてるから、SHFileOperationがいじけたんじゃね!
ゼロ以外のhwndにしなきゃ駄目なんじゃない。とにかくゼロ以外の、たとえば
1とか2とかに変更して試してみたらいいんじゃね。オーナーウインドウが何か知らないけど、
出来ればオーナーウインドウのHWNDが指定できると申し分ないと思うんだけど。


224:デフォルトの名無しさん
07/09/16 15:26:18
>>223
あなたのいるプロジェクトは危険だというのが
その文章からヒシヒシと伝わってくる

上達にするようにがんばれ。超がんばれ。

225:デフォルトの名無しさん
07/09/16 15:29:51
オーナーを指定すれば、必ずその上にウインドウが来ると言うだけの話。

226:デフォルトの名無しさん
07/09/16 15:48:49
>>224
わてはプロジェクトにいないづら。学校に居て教室で講義子守唄にzzzz
間違ってC言語の授業とってしまった,orz。
Cは一々型を指定しなきゃならないから鬱陶しいなり。
動的言語が主流の時代にC言語を教えてる学校だから、やっぱ危ないよなわての学校

227:デフォルトの名無しさん
07/09/16 16:00:35
何でここにおんねんw

228:デフォルトの名無しさん
07/09/16 16:04:21
>>226
Cはやっておかないとだめよ

229:デフォルトの名無しさん
07/09/16 16:10:29
その主張は重々わかるんだが、それでもソフトウェアする上で避けられないのがCなんだよなあ。
Java, C#マンセーな俺だがそれでもC使えないヤツはだめだと思う。

230:デフォルトの名無しさん
07/09/16 16:11:24
>>227
宿題スレ行くつもりが、スレタイよくを見ずにクリックしたらココが現れたなり
これ何かの縁づら。

231:デフォルトの名無しさん
07/09/16 16:29:05
はいw雑談スレになりましたw

232:デフォルトの名無しさん
07/09/16 16:50:42
>>226
学校の授業はそれくらい保守的なのが相場。

233:デフォルトの名無しさん
07/09/16 16:57:24
東大ってことしからpython教えてなかったか?

234:222
07/09/16 17:28:32
>>223
どうもです。確かな縁で教えていただくことができました。助かりました!!

>>225
あーそうだったんですか、、やっとわかりました。うまくできているのですね!!

みなさんどうもありがとうございました!!


235:デフォルトの名無しさん
07/09/16 18:26:42
Windows画像とFAXビューアの高速版を自分で作ろうとしていたら、
FindFirstFile、FindNextFileでは、エクスプローラで表示されている順番で
ファイル名を取得することができませんでした。
例えば、更新日時でソートしてあるフォルダでは更新日時順に画像を表示したいです。
適切なAPIがあれば教えて下さいませ。

236:デフォルトの名無しさん
07/09/16 18:38:23
RegQueryValueEx

237:デフォルトの名無しさん
07/09/16 19:15:08
IShellFolder, IShellFolder2

238:デフォルトの名無しさん
07/09/16 20:38:44
>>236>>237
そのキーワードで検索して色々と知ることができました。
後は自分で調べていきたいと思います。
どうもありがとうございました。

239:200
07/09/16 21:53:54
IISの権限の問題でした。
admin権限で動かしてみたところ成功いたしました。
レスくださったかたありがとうございました。

240:デフォルトの名無しさん
07/09/17 04:26:08
InsertMenuItemでMENUITEMINFOを指定しますが、メニューの
文字色を変えるにはどのようにしたらいいのでしょうか?

fTypeをMFT_STRINGにすると色を指定できないようですし

241:デフォルトの名無しさん
07/09/17 04:29:28
MFT_OWNERDRAW を指定して自分で描く

242:デフォルトの名無しさん
07/09/17 04:43:21
>>241

こんな時間に即レスthx
トライしてみます

243:デフォルトの名無しさん
07/09/17 10:15:08
VC についてるspy++なんですが、アプリ起動の際に、メッセージ横取りを禁止させる関数ってあるんすかね?

244:デフォルトの名無しさん
07/09/17 10:16:04
無い

245:243
07/09/17 10:20:28
関数といったのが、まずかったか・・・方法でもいいんですけど・・・
凄い人が集まってそうなので聞いてみたんですが、アプリ解析対策とかしないんですか?

246:デフォルトの名無しさん
07/09/17 10:22:06
逆に聞きたいのだが、>243からどうやったら>245の意味を読み取れると思うのだ?

247:デフォルトの名無しさん
07/09/17 10:23:04
フックを禁止する方法が無いんじゃね

kernel32に手出ししてみるとか?

248:244
07/09/17 10:24:19
メッセージ見られるとやばいようなら最初からCUIにするよ

249:デフォルトの名無しさん
07/09/17 10:24:37
故意か天然かしらんけど、煽り口調になってるぞ。
煽ってもなにも出ないばかりか、袋にされるだけさ。

250:デフォルトの名無しさん
07/09/17 10:29:10
rootkitみたいなものを作って叩かれたいマゾなんだね。

251:デフォルトの名無しさん
07/09/17 10:41:39
チートしたい人とチートされたくない人って似た質問するんだよね

252:デフォルトの名無しさん
07/09/17 10:44:21
敵を知り己を知ればなんとやら

253:デフォルトの名無しさん
07/09/17 10:45:26
>>251
チートておまえ・・・。

254:デフォルトの名無しさん
07/09/17 10:47:40
メッセージレベルでクラック対策しようってのがそもそも間違ってる

255:デフォルトの名無しさん
07/09/17 10:55:36
そういえばそんなフィルタドライバのソースがどっかに転がってたな
読もう読もうと思っててそのままURLもとろも失くしてしまったが

256:デフォルトの名無しさん
07/09/17 10:56:17
もとろも!   orz

257:デフォルトの名無しさん
07/09/17 11:20:11
         ,-、            ,.-、
        ./:::::\          /::::::ヽ
       /::::::::::::;ゝ--─-- 、._/::::::::::::::|
       /,.-‐''"´          \:::::::::::|
     /                ヽ、::::|
    /                    ヽ
     l    \                  l
    .|    ●          /     |
     l  , , ,           ●     l    にゃんだばかやろー
    ` 、      (_人__丿    、、、   /
      `ー 、__               /
         /`'''ー‐‐─‐‐‐┬'''""´
        ./        ___ l __
         l   ./    /  |/ |
         `ー-<    /  ./  ./
           `ー‐--{___/ゝ、,ノ

258:デフォルトの名無しさん
07/09/17 13:01:25
フックされても問題ないように
パラメータを暗号化すれば医院で内科医


259:デフォルトの名無しさん
07/09/17 13:53:37
文字列テーブルの文字を使うのに
文字配列用意してそこにコピーしないとだめっていうのは
面倒ですねぇ・・・。
文字配列の大きさの問題(文字列が入りきらない可能性)もあるし。
無駄に大きな配列用意するのもどうかなってかんじ。

260:デフォルトの名無しさん
07/09/17 14:42:50
よくわからんが、必要なサイズぴったしに malloc すればいいんでないの?

261:デフォルトの名無しさん
07/09/17 16:45:47
ListBoxとか使うときに
自分で持ってる構造体があるのに
API用にもうひとつ作ってコピーしないといけない理不尽
のことを言ってるのかな?


262:デフォルトの名無しさん
07/09/17 17:06:36
>>261
 >API用にもうひとつ作ってコピーしないといけない理不尽
 コピーした領域をOSに渡す形なら、OS側は任意の時点で領域解放できる。

・アプリが持っている領域を、直接OSに渡した場合、その領域を解放するタイミングを知るスマートな方法はあるか?
(OS側の処理が先に終わった場合、アプリに、その領域を解放してよいか問い合わせるのか?
 それとも、解放要求をアプリに対して発行するのか?
 どちらも本末転倒でしょ?)


263:262
07/09/17 17:08:04
261じゃなくて >>259 だった。すまん

264:デフォルトの名無しさん
07/09/17 17:23:44
ニワトリが先か、タマゴが先か論争に発展してきますた。

265:デフォルトの名無しさん
07/09/17 17:26:01
Javaや.NETはもう一度コピーしてるんだからまだマシ

266:デフォルトの名無しさん
07/09/17 18:18:56
>>265
kwsk

267:デフォルトの名無しさん
07/09/17 18:21:53
>>266
ahsg

268:デフォルトの名無しさん
07/09/17 19:01:46
そもそも>>259はLoadStringの話に見えるのは気のせいか?

269:デフォルトの名無しさん
07/09/17 21:25:47
そうなんです。
LoadString で文字列を取り出すとき
文字列の長さを気にせずに柔軟に取り出せる良い方法ないのかなぁと悩んでます。
いろいろ調べて MFC か ATL 使えばいけるのはわかったんですが
Windows プログラミングの勉強はじめたばかりで
両方ともよくわかってないんで
とりあえず MFC も ATL も使わないで出来る方法ないのかなぁと悩んでたんですけど
三日ぐらいあれこれ考えたんですけど
コレといったのが見つからないんでもう悩むのやめます。

270:デフォルトの名無しさん
07/09/17 21:38:28
それならLoadResourceとかを使えばいいんだよ。
俺もやった。リソース内ではUTF-16LEのくせに、
なぜか9xがLoadResourceWを実装していないというケチさのおかげで。

271:デフォルトの名無しさん
07/09/17 21:40:25
NULLを含まない格納した文字数が返るのだから nBufferMaxの値-1
が返ってきたときはたぶんバッファを増やさないといけないと判断できると思う

最初 260 とかでスタックにとって、それで足りなそうな場合だけ動的に 260*2 。
それでもだめなら 260*2 *2 。それでにだめなら 260*(ry
って感じか?



272:デフォルトの名無しさん
07/09/17 21:51:57
俺はめんどくさいからそんな仕様にしない

273:デフォルトの名無しさん
07/09/17 22:25:38
ネットで勉強してウィンドウとメニューバーまでは作れるようになったけどあと
がまったくわかりません(´・ω・`)
フリーソースのを見て勉強するのがいいってよくみるけど読んでみてもチンブンカンブン
需要はあるはずなのになんでWin32APIの書籍ってこんなに少ないんだろ…
どこかいいサイトか本ありませんか?

274:デフォルトの名無しさん
07/09/17 22:27:22
>>271
そーいやリソース文字列は、最大65536バイトまでだったけ?

275:デフォルトの名無しさん
07/09/17 22:32:51
>>273
猫でも読んでろ

276:デフォルトの名無しさん
07/09/17 22:34:23
>>273
知識つけたきゃテンプレの猫とかAPI入門嫁

アドバイスしとくと、どこまで覚えるかより何をしたいかが重要だったりする
それと人のソースはあくまで一例と捉える

277:デフォルトの名無しさん
07/09/17 22:34:28
>>274
URLリンク(msdn2.microsoft.com)
[quote]
For 16-bit string resources, 255 characters is the maximum length.
For 32-bit string resources, 65535 characters is the maximum length.
[/quote]

278:デフォルトの名無しさん
07/09/17 22:36:58
>>277
おーいえ
さんくす

279:デフォルトの名無しさん
07/09/17 23:59:48
>>275-276
d 猫ってAPIのもあったのね。HPは見づらいから今度探して買ってくる

280:デフォルトの名無しさん
07/09/18 00:13:28
>>279
あほは死ね

281:デフォルトの名無しさん
07/09/18 00:23:21
>>280
「あはは死ね」だと思った。

282:デフォルトの名無しさん
07/09/18 00:42:50
>>279
あはは死ね

283:262
07/09/18 02:02:37
>>279
 猫は「apiの使い方の外枠をつかむ」目的に限定した方がいいです。 コードは問題ありすぎ……。
(コーディングに関しては、オライリーの牛本を参照してください。)

ページが見づらいのは「書籍を買ってくれ」って事なのかね?

284:デフォルトの名無しさん
07/09/18 02:10:05
>>262は死ね

285:デフォルトの名無しさん
07/09/18 02:50:39
みんな死ななくていいよ

286:デフォルトの名無しさん
07/09/18 04:08:18
ツールバーのちらつき対策で質問があります。
ウィンドウサイズを変更するとツールバーがちらついて困ってます。
メインウィンドウは仮想画面化してるのですが、ツールバー部分はHDCがなくてちらついてしまってます。
書き換えタイミングを0.1秒単位にづらすとかはやりましたが軽減できてもちらつき自体をなくす事はできませんでした。
どういった解決方法があるでしょうか?ご教授お願いします。

287:デフォルトの名無しさん
07/09/18 04:10:29
子ウィンドウをクリッピング領域からはずす

288:デフォルトの名無しさん
07/09/18 04:14:22
背面消去をなくす

289:286
07/09/18 04:30:28
>>287
すみません。クリッピング領域から外すということは書き換えないってことでしょうか。。
今のサイズ変更部分はこうなってます。
case WM_SIZE:
MoveWindow(hTool, 0, 0, LOWORD(lParam), 50, TRUE);
break;
出来ればもう少し詳しくお願いできないでしょうか・・・orz

290:デフォルトの名無しさん
07/09/18 04:32:17
ツールバー作成時に
WS_CLIPCHILDRENとWS_CLIPSIBLINGSを追加

試してない

291:290
07/09/18 04:34:01
ごめん超勘違いしてた
俺のは忘れろ

292:デフォルトの名無しさん
07/09/18 10:27:18
>>286
うろ覚えだが
メインウィンドウのクラスのスタイルから、CS_HREDRAW、CS_VREDRAWをはずすか、
またはメインウィンドウのWM_ERASEBKGNDで何もしないように対処すればよいと思われ

293:286
07/09/18 10:33:24
>>292
既にそれは、やってしまってるんです。。
それでもちらつくんですよね。。
今も悩んでいて、面倒臭いですが一つ一つのボタンにハンドルを持たせればクリアできるのはないかと考え、
プログラム作成中です。

294:デフォルトの名無しさん
07/09/18 10:50:11
気になるのなら自前で描くしかない

295:デフォルトの名無しさん
07/09/18 10:59:43
ちらつくのは所詮描画の問題なので、普通に考えれば
メインウィンドウの背景(WM_ERASEBKGND)、メインウィンドウの描画(WM_PAINT)、
ツールバーの背景、ツールバー自身の描画
のいずれかで無駄な背景初期化を行っているくらいしかないと思うのだが

メインウィンドウの仮想画面化とかツールバー部分のHDCって何?
あとボタンにハンドルに持たせるとかも意味が分からない

ツールバーの描画で何か特別なことやってる?

296:286
07/09/18 11:13:46
>>295
ツールバーにHDCみたいなのあればメモリ上にメモリDC取ってちらつき対策できないかと考えてました。
ハンドルというかボタン一つ一つにHWND型で持たせてクリアしようかと。。ツールバーの場合、ツールバーのHWND
単体でサイズ変更してるため、ちらついてるんじゃないかと考えています。

297:デフォルトの名無しさん
07/09/18 11:42:52
>>296
ツールバーはOS標準のコントロールなんだから単体で対処可能なちらつき対処くらいやってるだろ
そんなことに力をそそぐくらいなら、>>292あたりもう一度見直したほうがいいのでは?

スタイル設定したつもりが反映されていないとか
メッセージハンドラを定義してみたけど名前が違ってたりして呼び出されてないとか
実はメインウィンドウの子のビューがツールバーと重なっていて、ビューの背景消去が問題だとか

298:デフォルトの名無しさん
07/09/18 12:03:26
標準コントロールはちらつき対策なんて元から考えていないが、
対処くらいやっているだろうとか考えられてしまうそのおめでたい頭がうらやましい。

299:デフォルトの名無しさん
07/09/18 12:26:19
そもそもツールバーってちらついたっけ?
VC2005+MFC+WinXPSP2だと、ToolBarのみとReBar+ToolBarの構成で作れるが、
どちらもちらつきは発生しなかったぞ。
昔のMFC自前実装の奴(ペイントとか)はちらつくけど。

300:デフォルトの名無しさん
07/09/18 12:31:11
>>298
いや言い方はよくなかったもしれないけど、そんな高度なことを議論する
つもりはなくて、普通メインウィンドウのリサイズで気になるほどちらついたり
はしないんじゃないのってことを言ったつもりだった

そうでないと、ツールバーを使う人は全員描画のカスタイズをしないといけなく
なるけど、自分でもそんなコードは書いたことがないし、それで特に気になったこともない

>>286の気にしているのがどの程度なのかは知らないので断言はできないけど

301:デフォルトの名無しさん
07/09/18 12:33:25
ちらつく理由を考え、それがあってるか検証し、
それを元に対策を考える。

302:デフォルトの名無しさん
07/09/18 12:51:23
>>299
言われるまで気づかなかったが、最近の標準コントロールはちらつかないな。
Explorerのウィンドウをムキになってリサイズしてみたが悔しいほどちらつかないw
ツールバーよりウィンドウの幅が狭くなったときに出る>>のマークだけがちらついてる。

303:デフォルトの名無しさん
07/09/18 13:02:01
チラリズム

304:デフォルトの名無しさん
07/09/18 13:39:06
WM_SIZE時、TOOLBARにWM_SIZEを送る
クライアント部分は子ウィンドウにしてToolbarと重ねない

305:デフォルトの名無しさん
07/09/18 13:58:03
専門用語でフリッカーと言うんだよ

306:デフォルトの名無しさん
07/09/18 14:26:04
>case WM_SIZE:
>MoveWindow(hTool, 0, 0, LOWORD(lParam), 50, TRUE);
>break;
なんかこの辺が間違ってる気が

307:デフォルトの名無しさん
07/09/18 14:30:39
>>298
死ね

308:286
07/09/18 19:24:40
>>306
サイズ変更時に書き換えなさいって命令なので、その部分をカットすればちらつきませんが、
その場合、サイズ変更時ツールバーが変になってしまうので・・・。
検証の結果、ボタン一つ一つにHWNDを持たせるか、>>294さんの言うようにオーナードローで描くか。
現在は、この2択です。もっと簡単にできないか、考えて見ますね。

309:デフォルトの名無しさん
07/09/18 19:33:51
>>308
あほは死ね

310:デフォルトの名無しさん
07/09/18 19:51:28
MoveWindow の最後の引数ってなんだっけ。

311:デフォルトの名無しさん
07/09/18 19:53:58
            ∩_
           〈〈〈 ヽ
          〈⊃  }
   ∩___∩  |   |
   | ノ      ヽ !   !
  /  ●   ● |  /
  |    ( _●_)  ミ/ <こいつ最高にアホ
 彡、   |∪|  /
/ __  ヽノ /
(___)   /


312:デフォルトの名無しさん
07/09/18 19:56:22
>>310
ググれよ。カス。

313:デフォルトの名無しさん
07/09/18 20:34:30
>>310が一番的確な解決方に導いていると思うぞ

314:デフォルトの名無しさん
07/09/18 20:38:02
             ∩_
           〈〈〈 ヽ
          〈⊃  }
   ∩___∩  |   |
   | ノ      ヽ !   !
  /  ●   ● |  /
  |    ( _●_)  ミ/ <こいつ最高にアホ
 彡、   |∪|  /
/ __  ヽノ /
(___)   /

>>313
>>308
最後の引数には気付いている。
おかしいのは最後の引数ではない。

315:デフォルトの名無しさん
07/09/18 22:18:15
そもそもツールバーをAPIで作ったときにMoveWindowなんて書いた記憶が無い件

316:デフォルトの名無しさん
07/09/18 22:55:03
そもそもメインウィンドウは仮想画面化してるとか
ツールバー部分はHDCがないとか言う不思議君だから
リサイズでMoveWindowくらいするだろう


317:デフォルトの名無しさん
07/09/18 23:47:20
検証もせずに批判ばかりする奴より、検証しようと努力してる奴の方が俺は好感を持つ。

318:182
07/09/18 23:51:20
すみません
GetLocaleInfo() でファイルの言語を取得できるようになったんですが、
.net で作ったexeの場合、自分で取得すると「日本語」が返ってくるんですが
「ファイルのプロパティ」だと「ニュートラル言語」になってるんですが、
どうすりゃ取れるんでしょうか。


319:デフォルトの名無しさん
07/09/18 23:57:10
>>317
正解が既に>>304で出てるのに無視されてるからじゃないの?

>>308
ツールバーのリサイズはMoveWindowでなく、WM_SIZEを直接SendMessageする

URLリンク(msdn2.microsoft.com)


320:デフォルトの名無しさん
07/09/19 00:38:22
>>319
MoveWindowはダメとかSendMessageとか命令の問題じゃない気がするが・・・
試しに俺が検証してみた。

* ツールバーを作成する */
hTool = CreateWindowEx(
WS_EX_TOOLWINDOW, TOOLBARCLASSNAME, NULL,
WS_CHILD | WS_VISIBLE | WS_THICKFRAME,
0,0,0,0,
hWnd, (HMENU)IDR_TOOLBAR, hInst, NULL);

ボタン略。

>case WM_SIZE:
>SendMessage(hTool, WM_SIZE, wParam, lParam);
>break;

ちらついてるじゃねーか。orz

321:デフォルトの名無しさん
07/09/19 01:45:18
>>320
俺も今試してみたが(WinXP SP2)、特にちらつきはないぞ?

//ツールバー作成部分(ボタンは2個)
hToolBar = CreateToolbarEx(hWnd, WS_CHILD | WS_VISIBLE, ID_TOOLBAR, 2,
hInst, IDB_TOOLBAR, tbb, 2, 0, 0, 16, 15, sizeof(TBBUTTON));
//他は省略

ベースはVC2005のWin32アプリのウィザード生成物で、ツールバー処理追加以外に以下を修正
×wcex.style = CS_HREDRAW | CS_VREDRAW;
○wcex.style = 0;
×wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
○wcex.hbrBackground = (HBRUSH)NULL;

なお、WM_SIZEの追加コードは

(a)SendMessage(hToolBar, WM_SIZE, wParam, lParam);
(b)MoveWindow(hToolBar, 0, 0, LOWORD(lParam), 50, TRUE);

の両パターンを試したがどちらも問題はなし

322:デフォルトの名無しさん
07/09/19 02:12:26
>>321
ちらつきの考え方の違いかな。。
ウィンドウの枠、右部分を(マウス左)ドラッグして左右に振ってみて欲しい。
ツールバーのボタンがちらついてない?
俺もCreateWindowExとCreateToolBarExだと違いがあるのかと思って両方試してみたが
両方ともちらつかないか?俺も気になってきたw

323:322
07/09/19 02:27:21
補足
ちらつきが分かりやすいように、ラージサイズのアイコン使用中。

324:デフォルトの名無しさん
07/09/19 02:28:22
ちらしの裏にでも書いてろ低脳

325:デフォルトの名無しさん
07/09/19 02:31:20
Vista使えばちらつきなんて気にならん

326:デフォルトの名無しさん
07/09/19 02:34:06
>>322
OSは何?
こちらで試したプログラムでは、メニューの文字はわずかにちらつくが、ツールバーは
それよりずっと安定していて目で認識できる範囲のちらつきはない

ボタンのデザインはグレーの背景に手書きで1、2と書いてあるだけなので
目立ちにくいかもしれないが、少なくともメニューと同じくらいちらついてくれれば確実に分かる

327:322
07/09/19 02:40:27
>>326
環境 (WinXP SP2)
ボタンのデザインは、既存のBMP。フォルダアイコンのラージサイズを貼り付けてる。

tbBmp.hInst = HINST_COMMCTRL;
tbBmp.nID = IDB_STD_LARGE_COLOR; /* 標準の大サイズのアイコンを使う宣言

328:デフォルトの名無しさん
07/09/19 09:38:55
ちらつくのはいちいち消して(バックグラウンド塗りつぶし)描くからだよ
もともと全部描きなおすタイプならけさんでいい

329:デフォルトの名無しさん
07/09/19 12:07:36
再度試してみた

背景消去を行わない(ウィンドウクラスの背景ブラシをNULLにするか、WM_ERASEBKGNDを無視)
とした場合でも、クラスのスタイルにCS_HREDRAW | CS_VREDRAW が残っていると、ボタン部分が
かすかにちらつく(メニュー文字のちらつきの半分程度)

>>322>>286の言ってるちらつきがこれってことはないのか?

330:デフォルトの名無しさん
07/09/19 12:19:23
WS_CLIPCHILDRENしてるか?

331:デフォルトの名無しさん
07/09/19 17:39:11
Visual Basic 6.0ってありましたよね?
あの言語でIsNumericって関数があったんですけど、
あれをVC++側で実装する場合、
OLE関連の関数群に存在するのでしょうか?
もし、存在するなら、その名称を教えていただきたいです。


332:デフォルトの名無しさん
07/09/19 17:44:40
>>331
市ね

333:182
07/09/19 18:06:08
>>318
VerLanguageName() で自己解決しました。
LangID は LocaleID の下位4バイトでした。
帰ります。


334:デフォルトの名無しさん
07/09/19 19:19:25
>>331
VariantChangeTypeで数値関連の種類に変換できるか試せば、
同じような動作になると思う。

335:デフォルトの名無しさん
07/09/19 21:14:29
Win98からVistaまで動作するプログラムを作ろうと思ってます。
Vistaのフォルダ書き込み権限を取得するために、ConvertStringSidToSidを
使っているんですが、Win98でこのプログラムを動作させようとすると
ConvertStringSidToSidがないとエラーになってしまいます。

ConvertStringSidToSidを使いつつ、両方のOSで動作するようにするためには
どうすればいいんでしょうか?

336:デフォルトの名無しさん
07/09/19 21:16:52
>>335
LoadLibrary, GetProcAddress

337:デフォルトの名無しさん
07/09/19 21:17:21
むり

338:デフォルトの名無しさん
07/09/19 21:20:28
>>336
ありがとうございます。
試してみます。

339:デフォルトの名無しさん
07/09/19 23:23:04
> Win98からVistaまで動作するプログラムを作ろうと思ってます

ムダな努力だと思うがどうよ?
依頼主からの指示?

340:デフォルトの名無しさん
07/09/19 23:51:17
98-Me
2000-XP
Vista
と3種類のリリースに分けて作る方が得


341:デフォルトの名無しさん
07/09/20 01:02:59
最初にOSのバージョン調べて、それを元に挙動変えるのはだめなん?

342:デフォルトの名無しさん
07/09/20 01:10:52
98でSIDとかあったっけ

343:デフォルトの名無しさん
07/09/20 01:18:23
> Win98からVistaまで動作するプログラムを作ろうと思ってます
 Win16で作れば、Win3.1から動くのが作れます。

冗談はともかく、Win98,Me対応は面倒な筈です。
OSのバージョン依存部分に1枚皮を被せて、呼び分ける必要があります。
OS依存部分を別DLLにして、LoadLibraryするとか。

344:デフォルトの名無しさん
07/09/20 02:03:21
>>343
> Win16で作れば、Win3.1から動くのが作れます。
残念ながら64bit版Windowsで動きません。

345:デフォルトの名無しさん
07/09/20 03:09:00
.Netでつくる

346:デフォルトの名無しさん
07/09/20 03:51:25
Win95って.netインストールできないんじゃなかった?

347:デフォルトの名無しさん
07/09/20 03:53:24
>>343はWin98からと言ってるから問題ない

348:デフォルトの名無しさん
07/09/20 04:19:38
まだ98つかってる香具師いるのか

349:デフォルトの名無しさん
07/09/20 05:48:08
買い換えるまでWin98という奴はいるだろ

350:デフォルトの名無しさん
07/09/20 06:40:37
オレは win98 + winXP。去年から win98 -> vista と思っているが、評判が
よくないので、ママ。win98 機は gateway なんだが、keyboard に慣れていて
ホレ今も、それと coding にも使っている。hardoff で見つけた 6GB HDD で
動かしていて、元の HDD は後生大事にとってある。時々換装しないといけない
が、今年はやってない。フラットケーブルが煎餅みたいに割れそう。

351:デフォルトの名無しさん
07/09/20 06:44:20
Win98をWebに繋ぐなんて最早犯罪だろ。

352:デフォルトの名無しさん
07/09/20 07:09:11
ダブルバッファリングのコードを書いたつもりでしたが、上手くいきません。

InvalidateRect()関数によってWM_Paintが要請されるまで、描画が行われない予定
なのですが、InvalidateRect()を呼び出さずにもWM_Paintが発行されているようで、
TextOutによる文字列が描画されてしまいます。ご教授お願いします。

URLリンク(sakuratan.ddo.jp)

353:デフォルトの名無しさん
07/09/20 07:21:51
>>335
もう見てないかもしれんが、俺のプログラムでは同様の事例で
リンカーオプション「/DELAYLOAD」を使っている

354:デフォルトの名無しさん
07/09/20 07:44:06
見てるよ
ずーっと見てる
君を見てる

355:デフォルトの名無しさん
07/09/20 07:48:07
質問に答えろぉぉぉおおお!

356:デフォルトの名無しさん
07/09/20 07:50:29
>>355
m9(^Д^)プギャー アホスギ

357:デフォルトの名無しさん
07/09/20 07:52:40
>>352
せいぜい、WM_PAINT内でii.hScreenを使っていいかどうかを見る
フラグでも用意しておくしかないと思う。

358:デフォルトの名無しさん
07/09/20 07:55:20
>>352
とりあえず、ダブルバッファがどうとか考える前にメッセージを理解してくれ


359:352
07/09/20 08:03:57
サンプルがわるかたかな・・・。
hScreenに描画している限り無効領域は発生せず、
WM_Paintは発行されないと思ってたんだけど、その認識が間違ってるのかな。

360:デフォルトの名無しさん
07/09/20 08:05:23
>>359
fとWindowProcは同じスレッド?

361:352
07/09/20 08:07:38
>>360
fという関数は、WM_Createで行うとエラーがでる部分を退避させるため
だけに暫定処置として作りました。

362:デフォルトの名無しさん
07/09/20 08:20:11
ああすまん、WM_CREATE内から呼んでいるね。
ってそれだとWM_CREATE内から呼んでいることに変わりはないだろ。

363:デフォルトの名無しさん
07/09/20 08:26:04
どう見てもAPI以前のレベルです、本当にありがとうございました。

364:352
07/09/20 08:31:52
一応、猫でもわかるのサンプルみて作ったつもりなんだけど、
なんで描画されるんだろ。



365:デフォルトの名無しさん
07/09/20 08:40:02
>>359
ウィンドウ作った時点じゃ、最初から無効領域

366:352
07/09/20 09:32:48
>>365
なるほど!動作確認の仕方が間違っていたのですね。
おかげさまで問題を解決することができそうです。
ありがとうございました。

367:デフォルトの名無しさん
07/09/20 09:34:31
重なっている上のウィンドウが移動したり、新しくウィンドウが作られたり、
そのウィンドウがリサイズしたりして、新たに描画しなければならないところが無効領域。
InvaridateRectは、そういった条件にかかわらず無効領域にするAPIだから。

368:デフォルトの名無しさん
07/09/20 12:21:27
>366
この手のタイプは、「できませんでした。教えてください。」ってまた来るんだよな・・・orz

369:デフォルトの名無しさん
07/09/20 13:29:37
教えて頂きたいのですが、MDIにおいて、
親ウインドウと子ウィンドウの透過率を変えることは可能でしょうか?

親ウィンドウに色のついた透明な子ウィンドウを重ねたいのです。
(一旦メモリデバイスにコピーした後、AlphaBlend()により色を付ける方法は
成功しました。)

SetWindowLong(),UpdateLayeredWindow()などが関連してくると思うのですが。

370:デフォルトの名無しさん
07/09/20 13:40:03
子ウィンドウをレイヤードウィンドウすることはできない


次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

4259日前に更新/104 KB
担当:undef