Win32API質問箱 Build ..
[2ch|▼Menu]
203:デフォルトの名無しさん
08/05/21 23:33:54
>>195
別にWM_CREATE時じゃなくていいよ。
ちらつきを抑えたいからダブルバッファしたいんだろうからBMPは常にメモリ上にあるという仮定で、
WM_CREATEがきたときに別途mallocでもnewでもいいからバッファを確保して
そのバッファに背景BMPと表示したいBMPを合成したものを作成。
それをBitBltやStretchDIBitsのような描画関数で表示。

204:デフォルトの名無しさん
08/05/22 00:00:22
WindowsX.h にある
HANDLE_MSG() マクロを WM_COMMAND に対して使うとき、なんで return 0; になるんだ?

HANDLE_MSG() に渡すfn は void func(HWND...) でvoid型だし、HANDLE_MSG() 自体も

#define HANDLE_MSG(hwnd, message, fn) ¥
case message):return ((fn)(hwnd,...),0L)

でマクロ展開で「return 0;」が出てくる理由がよく解らん。

case message: return func(hwnd,...); //func() はvoid型

になるんじゃないの?

205:デフォルトの名無しさん
08/05/22 00:10:42
カンマ演算子
return a, b;
returnされるのはbの値。

206:デフォルトの名無しさん
08/05/22 06:15:18
メッセージクラッカって定義おかしくね?

WM_DRAWITEMとか、
> If an application processes this message, it should return TRUE.
って書かれてるのにvoidでreturn 0;されてるし

207:デフォルトの名無しさん
08/05/22 06:17:56
さんくす>>205
カンマ演算子、か。K&Rの演算子の表の一番下に確かにそんなのあるな。いままで意識した事無かった

ありがと

208:デフォルトの名無しさん
08/05/22 08:01:40
>>205
間違っています。
以上。
↓次の方どうぞ

209:デフォルトの名無しさん
08/05/22 08:58:29
キモ

210:デフォルトの名無しさん
08/05/22 09:05:15
キモ

211:デフォルトの名無しさん
08/05/22 10:19:57
ゲーム作ってるんだけど、メモリ内のデータ書き換え防止する方法とかある?
外部アプリからメモリ内サーチして書き換えるやつ防止したい。助言よろ。

212:デフォルトの名無しさん
08/05/22 10:34:36
PCの電源切れ

213:デフォルトの名無しさん
08/05/22 11:03:18
>>211
オンラインゲームじゃないなら、改造対策は不要では?

俺もゲーム作ってるんだが、ブログで改造対策のこと書いたら、
「改造対策する時間があるなら、ゲームのボリュームを増やすこととか、
もっとまともなことに使って欲しい」ってコメントが多かったよ。
改造するかはユーザーの自由なんだし、ユーザーとしては当然のコメントだが。

あと、いまどきの改造は、プロセスメモリエディタ+ルートキットで
やるから、改造を防止するなら、ユーザーから非難されることを覚悟のうえで
ルートキットじみたことをするしかないでしょうね。

214:デフォルトの名無しさん
08/05/22 12:37:49
VC++のリソースエディタでダイアログボックスが作れますが、
そのような外観の(ダイアログでない)ウィンドウを、
ウィンドウクラスで作ったウィンドウに、コントロールぺたぺた貼って作ろうと思ったら、
(CWndではなく、RegisterClassEx、CreateWindow使って)

・ウィンドウの背景色は何故かCOLOR_BTNSHADOWが(ダイアログと)等しい
・エディットボックスはCreateWindowExの第1引数にWS_EX_CLIENTEDGEにしないと立体の縁にならない
・フォントはWM_SETFONT使ってサイズを変更しないと文字がでかい
・そもそもデフォルトのフォントが当然MS shell dlgではないようで、よくわからない
 (ただ、画面のプロパティから、故意にダイアログとウィンドウのフォントを違うものにした覚えはない…)

実際CreateDialogマクロでダイアログが作られるとき、ここら辺の設定ってどうなっているのですか?
このマクロもCreateWindowExを使ってウィンドウを作ると書いてあるので、
同じようなことが再現できるのではと思ったのですが…

(CreateDialogがウィンドウの大きさを決めるとき、フォントを元に作ってあるのはわかったのですが…)

215:デフォルトの名無しさん
08/05/22 13:05:33
Process Explorerで表示できるWindow Titleと同じものを取得したいと思っています。
どうもGetWindowTextで取得できるものとは別物らしく、
Process ExplorerでJuneブラウザのWindow Titleを見ると、
GetWindow〜で取得した名前とは違うものを表示しているのがわかります。

一体Process Explorerで表示できるWindow Titleとは何者か、
どうすれば取得できるのでしょうか?


216:デフォルトの名無しさん
08/05/22 13:19:39
>>215
URLリンク(msdn.microsoft.com)
> GetWindowText cannot retrieve the text of a control in another application.

217:デフォルトの名無しさん
08/05/22 13:34:18
使えないAPIなんですか。エディットコントロールじゃなければいいはず…ですよね。
そうするとWindow Titleってなんだろうという話になりまして、

たとえばJaneブラウザを表示したとき、以下のようになります。

・キャプションバー、およびProcessExplorer上WindowTile列の表示
 →”Jane Doe Style 【プログラム】 - Win32API質問箱 Build66”

・GetWindowText、およびタスクマネージャ上の表示
 →”Jane”

”Jane Doe Style 【プログラム】 - Win32API質問箱 Build66”の文字列を取得したいわけですが、
その方法はご存知でしょうか?

218:デフォルトの名無しさん
08/05/22 13:44:31
Delphiアプリケーションには実は見えないアプリケーションウィンドウがあって・・・

219:デフォルトの名無しさん
08/05/22 14:00:33
>>218
VBアプリもそんな感じだったな
だからタスクバーに表示しないプロパティなんてのがあるんだけど

220:デフォルトの名無しさん
08/05/22 14:07:52
spy++ とか眺めてみるといいと思う

221:デフォルトの名無しさん
08/05/22 14:14:12
あー…なんとなくイメージ掴めてきました
メインウィンドウに見えたのは子ウィンドウで、だから取得できなかったと。

子ウィンドウのウィンドウタイトルの取得とか、そのあたりを調べてみます。

ありがとうございます

222:デフォルトの名無しさん
08/05/22 14:14:17
>>217
こんなんでいいのかな?
#include<windows.h>
#include<stdio.h>

int main(void){
char title_buf[256], *class_name="TMainWnd";
int title_len;
HWND hwnd;

hwnd=FindWindow(class_name, NULL);
if(hwnd==NULL){
printf("Window not found. class name [%s]\n", class_name);
return 1;
}

title_len=GetWindowText(hwnd, title_buf, sizeof(title_buf)-1);
if(title_len>=0) printf("%s\n", title_buf);

return 0;
}

223:デフォルトの名無しさん
08/05/22 14:59:33
>>222
どうもです
実行結果とSpy++を併せて見て、おおよそ理解できました。

デルファイでもVBでもデフォルトのクラス名でウィンドウを検索したのち、
目的の名前を取得する事ができました

ありがとうございます

224:デフォルトの名無しさん
08/05/22 15:05:00
WM_GETTEXTでいいのでは

225:デフォルトの名無しさん
08/05/22 16:22:09
> title_len=GetWindowText(hwnd, title_buf, sizeof(title_buf)-1);
今時こんなソース書く奴はJavaか.NETで開発してろよと思う

226:デフォルトの名無しさん
08/05/22 16:25:53
>>225
この場合同書くのがいいのかも示して欲しいです

227:デフォルトの名無しさん
08/05/22 16:28:58
>>225
>>226に同意
どう書けばよいのでしょう?
TCHARの話でしょうか?

228:デフォルトの名無しさん
08/05/22 16:29:51
TCHARじゃないとかARRAYSIZE, _countofを使えとかnullは考慮されてるから-1はいらないとか
あたりじゃない?

229:デフォルトの名無しさん
08/05/22 16:54:54
grep で include 内を探したけど ARRAYSIZE と _countof とは無かった
(使用しているのは MinGW)

230:デフォルトの名無しさん
08/05/22 16:59:28
>>229
ARRAY_SIZE と countof はあったの?

231:デフォルトの名無しさん
08/05/22 17:01:22
>>230
無いです

232:デフォルトの名無しさん
08/05/22 17:12:16
_countofはMFCで定義されていてVC2005ぐらいからCRTでも定義されてた気がする
SDKにはwinnt.hにRTL_NUMBER_OFがある

いずれにしろ>>222は人に教えられる立場で無いのは確か

233:デフォルトの名無しさん
08/05/22 17:20:27
結局は、どう書くのが模範解答になるんでしょう?

234:デフォルトの名無しさん
08/05/22 17:24:19
WinAPIはよく知らんのだが、GetWindowText()の戻り値ってエラーチェックくらいしか使い途ないのかな。
>222もエラーチェックにしか使ってないようだし、>228によればナルターミネートはしてくれているようだし。
つーか、溢れたかどうかは単純には判らないのね。


235:デフォルトの名無しさん
08/05/22 17:27:19
>>222
if(title_len>=0) printf("%s\n", title_buf);

if(title_len>0) printf("%s\n", title_buf);
にしないとエラーチェックになってない


236:デフォルトの名無しさん
08/05/22 18:18:19
>>234
GetWindowTextLengthで事前にバッファ長を調べておけば済むだろ

237:デフォルトの名無しさん
08/05/22 18:27:58
GetGlyphIndices()という、文字列からグリフインデックスに変換するAPIがありますが、
この逆のことをするAPI、つまりグリフインデックスから文字列に変換する方法って解りますか?

238:デフォルトの名無しさん
08/05/22 18:28:29
バッファ足りなくてもバッファサイズまでコピーする仕様なの?
そうだとしても戻り値にNULL文字は数えないって書いてあるから
指定サイズ==戻り値ならあふれてるのでは。

239:デフォルトの名無しさん
08/05/22 18:31:24
>>238
馬鹿丸出し

240:デフォルトの名無しさん
08/05/22 18:37:47
>>236
しかし長さを調べた直後には別のウィンドウタイトルに変わっているかもしれない
そのアプリケーションがどう振舞うか想定できない

241:デフォルトの名無しさん
08/05/22 18:50:52
そんな事を気にするなら他プロセスのテキスト取得なんて考えないことだ

(そろそろフックネタ出す奴が現れる頃か)

242:デフォルトの名無しさん
08/05/22 18:50:58
仮にバッファ長が100だったとして、GetWindowTextLength()が99を返した後GetWindowText()が99を返しても、
その間にタイトルが書き換わっていたら溢れたかどうかは判らないのね。

243:デフォルトの名無しさん
08/05/22 19:10:58
>>240>>242
必要十分なサイズのバッファを渡せば溢れる可能性は無くなる。

LPTSTR buffer = (LPTSTR)malloc(sizeof(TCHAR) * 0x7fffffff);
if (buffer == NULL) {
  MessageBox(NULL, _T("この環境では使用できません"), _T("メモリ買いましょう"), 0);
  exit(-1);
}
GetWindowText(hwnd, buffer, 0x7fffffff);

244:デフォルトの名無しさん
08/05/22 20:36:32
32bit環境だと/3GBスイッチ使っても厳しそうだ。
VirtualAllocのMEM_RESERVEでアドレスだけ確保して、
SEHで動的にメモリを割り当てるのが現実解だな。

245:デフォルトの名無しさん
08/05/22 20:59:09
ヒント:APIフック

246:デフォルトの名無しさん
08/05/22 21:19:35
>>245
ヒント:お前は馬鹿

247:デフォルトの名無しさん
08/05/22 21:23:10
たまにはブローとかアッパーとかさぁ

248:デフォルトの名無しさん
08/05/22 21:34:08
まずはジャブから

249:デフォルトの名無しさん
08/05/22 21:51:37
このスレの質が低下したのは、優秀な人は.NETに移ったからかもな。

250:デフォルトの名無しさん
08/05/22 21:58:09
正解

251:デフォルトの名無しさん
08/05/22 22:06:48
今頃気付いたのか

252:デフォルトの名無しさん
08/05/22 22:25:19
Advanced Windowsの著者だって.NETの本を書くこんな世の中じゃ

253:デフォルトの名無しさん
08/05/22 23:38:50
poizun

254:デフォルトの名無しさん
08/05/22 23:47:16
poison

255:デフォルトの名無しさん
08/05/22 23:49:58
prison

256:デフォルトの名無しさん
08/05/22 23:57:59
ぬるぽ

257:デフォルトの名無しさん
08/05/23 00:07:37
ga

258:デフォルトの名無しさん
08/05/23 00:35:25
てか、sizeof(title_buf)-1を最後の引数に指定してるから、
溢れる可能性など皆無だが?
溢れるとかなに言ってるんだ?

259:デフォルトの名無しさん
08/05/23 00:47:09
↑理解していない何か

260:デフォルトの名無しさん
08/05/23 06:45:56
↑話を理解している天才

261:デフォルトの名無しさん
08/05/23 10:20:45
↑流れを読む天才

262:デフォルトの名無しさん
08/05/23 10:22:11
↓通常の流れに戻すという偉業を成し遂げた天才

263:デフォルトの名無しさん
08/05/23 10:30:46
#include<stdio.h>
#include<windows.h>

int main(void)
{
/**/MSG msg;

/**/while(0 < GetMessage(&msg,NULL,0,0)){
/******/switch(msg.message){
/**********/case WM_KEYDOWN:
/**************/puts("keydown");
/**************/break;
/******/}
/**/}
/**/return 0;
}

これで何かkey押してもダメなんだけどどうすればいい?

264:デフォルトの名無しさん
08/05/23 11:01:41
ウィンドウが無いじゃんか

265:デフォルトの名無しさん
08/05/23 11:06:59
コンソールに表示させたいん

266:デフォルトの名無しさん
08/05/23 11:52:02
な ん で ( ´∀` ) や ね ん !

267:デフォルトの名無しさん
08/05/23 12:31:48
プロシージャならメッセきたら処理するけど
コンソールの場合はどうやるのか気になって

268:デフォルトの名無しさん
08/05/23 13:12:02
CreateWindowでスタティックテキストを作りました。
テキストの背景色を透過したいんだけど、いい方法ありませんか?

hStatic = CreateWindowEx(0, "STATIC", cString, WS_VISIBLE | WS_CHILD | SS_SIMPLE,
X, Y, Width, Height, hWnd, (HMENU)Static, (HINSTANCE)hInst, NULL);

269:デフォルトの名無しさん
08/05/23 13:20:55
WS_EX_TRANSPARENTじゃダメ?

270:268
08/05/23 13:31:00
>>269
ダメでした。。
レバーコントロールに入れたツールバーにスタティックテキスト置いてます。

hStatic = CreateWindowEx(WS_EX_TRANSPARENT, "STATIC", cString, WS_VISIBLE | WS_CHILD | SS_SIMPLE,
X, Y, Width, Height, hWnd, (HMENU)Static, (HINSTANCE)hInst, NULL);

271:デフォルトの名無しさん
08/05/23 13:39:40
ツールバー、もしくはメニューの背景にブラシを使う事は出来ますか?

272:デフォルトの名無しさん
08/05/23 13:40:07
WM_CTLCOLORSTATICでNULL_BRUSHを返す

273:デフォルトの名無しさん
08/05/23 14:12:15
あるプロセスが、自分を起動したプロセス(親プロセス)を知る方法はありますか。

274:デフォルトの名無しさん
08/05/23 14:20:00
ある

275:デフォルトの名無しさん
08/05/23 14:21:19
レバーじゃなくてリバーだと思う

276:デフォルトの名無しさん
08/05/23 14:23:18
"レバーコントロール" の検索結果 約 1,270 件中 1 - 10 件目 (0.13 秒)
"リバーコントロール" の検索結果 約 185 件中 1 - 10 件目 (0.13 秒)


277:デフォルトの名無しさん
08/05/23 14:27:41
>>276
それ「レバー」「コントロール」別単語として検索した結果だから

278:デフォルトの名無しさん
08/05/23 14:27:45
どっちもすくな!

279:デフォルトの名無しさん
08/05/23 14:28:42
リバーコントロールでググると

もしかして: レバーコントロール
と出るなw

280:268
08/05/23 14:28:43
>>272
どうも。WM_CTLCOLORSTATICメッセージ勉強してみます。

281:デフォルトの名無しさん
08/05/23 14:41:49
>>277
馬鹿

282:デフォルトの名無しさん
08/05/23 15:02:53
レバー ReBar に一致する日本語のページ 約 268 件中 1 - 30 件目 (0.03 秒)
リバー ReBar に一致する日本語のページ 約 277 件中 1 - 30 件目 (0.24 秒)

283:デフォルトの名無しさん
08/05/23 15:28:05
rebarの発音はrí:bà:rだからリバーと読む方が実際の発音に近い
つまりレバーと読みたいならパーチーとかボデーとか言ってろってこった

284:デフォルトの名無しさん
08/05/23 15:33:15
↑アホ

285:デフォルトの名無しさん
08/05/23 15:35:16
↑話を理解してない馬鹿

286:デフォルトの名無しさん
08/05/23 15:36:33
ReBarをレバーっていうのは斬新だなw

287:デフォルトの名無しさん
08/05/23 15:39:09
↑馬鹿

288:デフォルトの名無しさん
08/05/23 15:40:32
>>281=>>284=>>287=大馬鹿

289:デフォルトの名無しさん
08/05/23 15:41:46
↑はずれ

290:デフォルトの名無しさん
08/05/23 15:43:10
>>281,>>284,>>287∈大馬鹿
という意味だろ

さすが大馬鹿

291:デフォルトの名無しさん
08/05/23 15:45:37
レバーという表現は日本語としても定着してるんだからいんじゃね?

292:デフォルトの名無しさん
08/05/23 15:49:00
>>290
はずれ

293:デフォルトの名無しさん
08/05/23 15:51:19
意味が通じるなら、それでおk。

294:デフォルトの名無しさん
08/05/23 15:59:11
>>291
定着していません。
ほとんどの日本人はレバーと聞くと肝臓の事だと認識します。

295:デフォルトの名無しさん
08/05/23 16:05:50
取っ手(lever)と認識する人も居るよ


296:デフォルトの名無しさん
08/05/23 16:09:36
ReをReTryとかのReって解釈する人もいる

297:デフォルトの名無しさん
08/05/23 16:11:51
Win API ReBar レバー 11件
Win API ReBar リバー 100件

Yahoo

298:デフォルトの名無しさん
08/05/23 16:13:41
↑全角数字馬鹿

299:デフォルトの名無しさん
08/05/23 16:17:03
>>296
語源的には同じ

300:デフォルトの名無しさん
08/05/23 16:17:51
うーん、、、全角数字の時点で言い訳できないな

301:デフォルトの名無しさん
08/05/23 16:19:22
ほとんどの日本人はリバーと聞くと川の事だと認識します。

302:デフォルトの名無しさん
08/05/23 16:23:40
ReBarって書けばいいんだよ
カタカナ読みに拘ると面倒事になるだけだ

303:デフォルトの名無しさん
08/05/23 16:27:03
このスレで「リバー」だとriverよりはrebarだろう。
このスレで「レバー」だとliverやleverよりは「rebarのことなんだろうなぁ」だろう。

304:デフォルトの名無しさん
08/05/23 16:27:55
↑話を理解してない馬鹿

305:デフォルトの名無しさん
08/05/23 16:35:18
え?あれ取っ手付いてるからレバーなんだと思ってたよ
別モノだったのかw

306:デフォルトの名無しさん
08/05/23 16:44:39
URLリンク(msdn.microsoft.com)
では一応「リバー コントロール」でも他のページに見当たらない

307:デフォルトの名無しさん
08/05/23 16:44:40
BitBltやStretchBltで表示した画像が解像度を変更すると消えてしまい困っています。
WM_DISPLAYCHANGEでWM_PAINTを投げたりInvalidateRectを投げたりしましたが再描画されません。
SW_MINIMIZEとSW_NORMALを立て続けに投げる方法は表示される時とされない時があり駄目なようです。
どうすれば解像度変更直後にきちんと再描画出来るようになるのでしょうか。

308:デフォルトの名無しさん
08/05/23 16:52:59
おっ!質問きたぞ
雑談はこれまでだ

309:デフォルトの名無しさん
08/05/23 16:55:21
>>307
WM_PAINTで描画してるんだよな?
再描画されないことは無いと思うが、いったいどうやってんの?
再描画されないとは具体的にどうなんのの?
>WM_PAINTを投げたり
まあこれ見て怪しいのはわかるが。

310:デフォルトの名無しさん
08/05/23 17:01:56
InvalidateRectの後にUpdateWindow呼んでる?

311:309
08/05/23 17:02:18
一応書いておくけど
WM_PAINTを投げたくなったら、
InvalidateRect → UpdateWindow のコンボで。

InvalidateRect自体は投げてるみたいだから、この場合は解決策じゃないけど。

312:デフォルトの名無しさん
08/05/23 17:10:39
>>311
RedrawWindowにRDW_UPDATENOWを指定すればいい

313:デフォルトの名無しさん
08/05/23 17:17:34
なんちゃってAI作った人いる?

314:デフォルトの名無しさん
08/05/23 17:21:43
>>313
const char* msg[] = {
"↑話を理解してない馬鹿",
"知らないならレスしないでください",
"それぐらい察してほしかったってのが本音"
};
for(;;) post2ch(msg[rand()%3]);

315:デフォルトの名無しさん
08/05/23 17:32:59
>>313
スレタイ

316:307
08/05/23 18:17:10
InvalidateRect(hWnd, NULL, FALSE);
UpdateWindow(hWnd);
RedrawWindow(hWnd, NULL, NULL, RDW_UPDATENOW);
これらを投げても駄目でした。

画像のみを表示するソースはウィンドウを透過すれば(SetLayeredWindowAttributes)特に何もしなくても表示されました。
透過しないとやはり何も表示されません。

CreateWindowExでボタン、ステータスバー、ツールチップを追加している問題のソースではこれらコントロールは再描画されるのに画像が表示される場所はまるで非表示にしたかのように背景色のみになっています。
もう訳が分からないですo...rz。

もしかしたらウィンドウプロシージャの書き方に問題があるのかも知れませんが、以下の各caseのbreak;をreturn 0;に書き換えると何故かウィンドウの挙動も表示もおかしくなり、CPU使用率も100%になってしまいます。
因みに今回の場合はreturn 0;に書き換えても症状は改善しません。

LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp)
{
switch (msg)
{
(中略)
case WM_PAINT:
SetStretchBltMode(hDC, STRETCH_DELETESCANS);
StretchBlt(hDC, 10, 10, 256, 192, hCompatDC, 0, 0, bmp.bmWidth, bmp.bmHeight, SRCCOPY);
break;
(中略)
}
return DefWindowProc(hWnd, msg, wp, lp);
}

317:デフォルトの名無しさん
08/05/23 18:25:29
>>316
・・・BeginPaintとEndPaintは・・?
hDCはどこからきたの?

318:デフォルトの名無しさん
08/05/23 18:28:02
やはり怪しかったのね

319:デフォルトの名無しさん
08/05/23 18:34:01
>>317が正解だな
的を射ている

320:デフォルトの名無しさん
08/05/23 18:44:10
WM_PAINTでBegin/EndPaint忘れって上にもあるし前スレにもあったな
いったい何を見て勉強してるんだ?

321:デフォルトの名無しさん
08/05/23 18:45:07
猫だろ。どうせ。

322:デフォルトの名無しさん
08/05/23 19:04:37
犬希望

323:デフォルトの名無しさん
08/05/23 19:18:07
WM_PAINTワンBeginPaintワンワン

324:デフォルトの名無しさん
08/05/23 19:19:40
MFC使えとまでは言わないけど、コンストラクタ・デストラクタでBegin/EndPaintをラップした
クラス程度は作っておくと便利よ。

325:デフォルトの名無しさん
08/05/23 19:27:38
それならOnPaintをオーバーライドするだけで描画できるクラスを作った方が遥かに便利

326:デフォルトの名無しさん
08/05/23 19:30:54
CpaintDC と OnDraw ですね

327:デフォルトの名無しさん
08/05/23 19:33:07
つうか今時MFCやWTLを使わずに素のWin32SDKでアプリ作る奴なんているの?
死ぬほど面倒じゃん

328:316
08/05/23 19:39:21
static PAINTSTRUCT ps;
(中略)
BeginPaint(hWnd, &ps);
SetStretchBltMode(hDC, STRETCH_DELETESCANS);
StretchBlt(hDC, 10, 10, 256, 192, hCompatDC, 0, 0, bmp.bmWidth, bmp.bmHeight, SRCCOPY);
EndPaint(hWnd, &ps);
return 0;

にしたら正常に表示されました。本当にありがとうございました。
一見正常に動いていたのはDefWindowProcに処理を回していたからなんですね。

因みに参考にしたサイトはこちらです。

Programing Place
URLリンク(www.geocities.jp)

>>324-327
VC++2008EEでC及びC++の勉強中です。
まだC++はまともに使えないのでクラスの使い方も(VB.NETやC#はともかく)分かりません。
今後の課題としてクラスの勉強を始めようと思います。

329:デフォルトの名無しさん
08/05/23 19:43:13
そのサイトにも、
>描画の処理を行うとき、必ずBeginPaint()とEndPaint()を使って、描画処理を挟み込む形を取っていましたが、これは必ずそうしなければなりません。
って書いてるじゃん

330:デフォルトの名無しさん
08/05/23 19:44:22
>>328
そこ、前スレにもトンデモサイトとして出てたよ
特にこれ
URLリンク(www.geocities.jp)


以下を次スレからテンプレ化キボン

●参考すべきでない所
Programing Place
URLリンク(www.geocities.jp)

331:デフォルトの名無しさん
08/05/23 19:44:23
>>328
志村!足りない!足りない!

332:デフォルトの名無しさん
08/05/23 19:45:32
と思ったら、BitBltのあたりでいきなりはしょってるなw

333:デフォルトの名無しさん
08/05/23 19:46:42
"Programing"の時点で糞確定だけどな

334:デフォルトの名無しさん
08/05/23 19:47:04
>>328
hDCはBeginpaintの戻り値かps.hdc 使う

335:デフォルトの名無しさん
08/05/24 06:15:24
本当の所、BeginPaintを必ず使わなければいけないという決まりはない。
ただ、これ一回の呼び出しで行われる処理内容を考慮すると、使わない理由が無いな。

336:デフォルトの名無しさん
08/05/24 07:17:06
>>330
それよりお勧めサイト書いてくれたほうがうれしい

337:デフォルトの名無しさん
08/05/24 07:52:52
>>336
英語版MSDN

338:デフォルトの名無しさん
08/05/24 10:56:51
調べても分からなかったので質問させてください
CreateMenuでよくアプリケーション上部にあるFile(F)とか表示(V)のようなメニュー作成しています。
メインウィンドウのサイズを変更したとき、Menuのサイズを変更しないようにしたいです。
メニューの横幅固定で。この場合、メニューサイズを固定するAPIか、メニューの構造体に横幅指定することができるとか
方法がありましたら、ご教示ください。よろしくおねがいします。

環境はVC + SDKです。

339:デフォルトの名無しさん
08/05/24 10:58:48
無理

340:デフォルトの名無しさん
08/05/24 11:35:06
ツールバーで代用するとか
苦労の割に見返りがサイズ固定だけって泣けるけど

341:デフォルトの名無しさん
08/05/24 11:44:03
標準と違う動きをするアプリって違和感があるよね。

342:338
08/05/24 11:48:09
単刀直入に言うと、ウィンドウサイズ変更時にメニューのちらつきをなくしたいです。
勉強中なので間違ってるかもしれないですが、CreateMenuで作成してもWNDCLASSEXで
wc.lpszMenuName=MAKEINTRESOURCE( IDR_MENU);登録にしても、
結局はメインウィンドウの再描画に巻き込まれる形になるので、ちらつきます。
Janeとかのメニューはどうやって実現してるのかなぁ。。

343:338
08/05/24 12:54:04
もうちょっと考えて見ます
お騒がせしました。

344:デフォルトの名無しさん
08/05/24 12:57:53
>>341
IEのメニューはツールバーで出来てるが
コマンドバーって呼ばれてる

WTLにCCommandBarCtrlってクラスがあるけどこれはバグが多すぎてあまり使えない

345:デフォルトの名無しさん
08/05/24 14:20:04
>>344
CCommandBarCtrlのバグって例えばどんな?

346:デフォルトの名無しさん
08/05/24 15:09:32
>>345
とりあえず致命的なのを2点ほど

メニューをクリックするとCommandBarにフォーカスを持って行かれる
→フォーカスを元に状態設定を行っていると正常に機能しなくなる

IEのようなReBar上で右クリックメニューを出すようなのを作っていると
メニューが出ているときにメニュー項目上で右クリックすると落ちることがある
→DoTrackPopupMenuに再入してしまうのが原因なので適当にフラグ立てて回避するしかない


Donut系ブラウザはこの辺のバグを回避するためにCCommandBarCtrlを使っていない
俺もこの辺のバグを回避するためにDonutのソースを参考にして自作した

347:デフォルトの名無しさん
08/05/24 15:10:10
>>338
>メインウィンドウのサイズを変更したとき、Menuのサイズを変更しない
??
ウインドウを小さくした時メニューがはみ出してもいいの?
変なアプリーw

348:デフォルトの名無しさん
08/05/24 15:15:16
サイズ固定でシェブロン出すのよくあるけど。

349:デフォルトの名無しさん
08/05/24 15:15:46
右端に >> を付けたいって事だろ
そういうのはコマンドバーって言うんだよっていうのが以後の流れ

350:デフォルトの名無しさん
08/05/24 15:40:07
APIの話では無いのでスレ違いだと思いますが
Windows XPで外部信号に対して±10mS程度以内で
応答を返すことは可能なのでしょうか?

351:デフォルトの名無しさん
08/05/24 15:51:28
エスパーじゃないしマイナスは厳しいんじゃないか。

352:デフォルトの名無しさん
08/05/24 16:26:25
え、-10ms以内で応答を返せないの?
近頃のWindowsは糞だなぁ

353:デフォルトの名無しさん
08/05/24 16:31:12
さすがのWINDOWSでも、時をかけるのは難しいんじゃないか?

354:デフォルトの名無しさん
08/05/24 16:53:26
待ってられない信号がある。

それはさておき、「何らかのインターネット接続が存在するかどうか」を知る方法はありますか?
今は自分のグローバルIPアドレスに対してpingを打っているのですが、激しく間違っている気がします。

355:デフォルトの名無しさん
08/05/24 16:58:33
それはすれ違いじゃないか?
ネットワーク相談室の方がいい気がする。。

356:デフォルトの名無しさん
08/05/24 17:05:24
Network Managementで接続を列挙するとか
wininetでonline/offlineをとるとか

357:デフォルトの名無しさん
08/05/24 17:31:55
wininet.dll が使えるなら(というか使えない環境のほうがレアだろうが)、
InternetGetConnectedStateEx だろう。

358:デフォルトの名無しさん
08/05/24 17:50:12
>>357
インターネット環境が無いと使えない某ソフトが確かそのAPIでチェックしてたような
勿論nopで埋めうわ何をするやmくぁwせdrftgyふじこlp

359:デフォルトの名無しさん
08/05/24 18:02:39
>>358
日本語でそっち関連の情報を提供してるとこある?
中国語とかならわんさかあるんだけど...

360:デフォルトの名無しさん
08/05/24 18:06:37
そんな物自分で勉強しろよ
スレ違いな上にグレーゾーンな事をここで聞くな馬鹿

361:デフォルトの名無しさん
08/05/24 18:09:26
>>359
英語を苦にしないならMSDN。
ていうか、なんで日本語版にはwininet関数が載ってないんだ。

362:デフォルトの名無しさん
08/05/24 18:22:47
昔はWinAPIの日本語ヘルプが付いてたのに、今やWin95時代から更新止まってる古い情報しか無いのはどうよ
そもそもMSKBですら最近は機械翻訳だらけだし、中国語とかの方が翻訳されてるなんておかしい

もう日本のIT技術者は世界から見捨てられてるという事?

363:デフォルトの名無しさん
08/05/24 18:23:14
>>350
デバイスドライバならともかく、
一介のアプリケーションで100%確実の保証は絶対無理だな。

364:デフォルトの名無しさん
08/05/24 18:24:59
>>362
おかげで、英語を読むことの抵抗感がなくなったから感謝しているw
日本のIT技術者はもっと世界に羽ばたけということだよ。

365:デフォルトの名無しさん
08/05/24 18:26:49
>>362
正解

366:デフォルトの名無しさん
08/05/24 18:32:43
まぁIMEが中国で開発されてるぐらいだから仕方ないか
日本のプログラマはもう用済みなんだろうな

367:デフォルトの名無しさん
08/05/24 18:39:15
英語も中国語もできる俺は勝ち組。



368:デフォルトの名無しさん
08/05/24 18:41:12
>>367
すぐにプログラマから足を洗って商売でも始めるんだ。

369:350
08/05/24 18:41:48
>>351-353
ですな〜
信号を受けて50mS±10mSとかです。

皆さん親切だ。w



370:デフォルトの名無しさん
08/05/24 18:47:08
Windows上であるいじょう、確実な保障はできないが、
そのくらいの精度なら、大抵の環境で余裕だろ。

371:デフォルトの名無しさん
08/05/24 18:47:36
>>369
50±10ms ぐらいなら可能なはず。
Windows のタイマの精度が 16ms ぐらいだから結構ギリだがな。
リアルタイム性を Windows に求めるのは少しつらいかも知れん。

372:デフォルトの名無しさん
08/05/24 18:48:52
そこでRTLinuxですよ、俺は使ったこと無いけど

373:デフォルトの名無しさん
08/05/24 19:16:19
Windowsで精度を求めるなら。
URLリンク(msdn.microsoft.com)(VS.85).aspx

374:デフォルトの名無しさん
08/05/24 19:34:05
ダイアログに関する質問です。
SS_BITMAPを指定してスタティックコントロールを作って画像を表示した場合、画像がウィンドウより大きいとはみ出しますが、StretchBlt()のように固定サイズ内での縮小表示は出来ますか。
事前に何処かで縮小処理を行ったビットマップを読むしかないのでしょうか。

375:デフォルトの名無しさん
08/05/24 19:38:28
>>374
つ SS_REALSIZECONTROL

XP以降でダイアログのビットマップやアイコンが潰れてる元凶

376:350
08/05/24 19:50:25
やはり10mSの精度は無理っぽいですね。
出来たとしても15mSくらいが限界なんでしょうな。

全然分ってないけど、デバイスドライバーにすればタイムスライスの
壁は越えられるのでしょうか。。

377:デフォルトの名無しさん
08/05/24 19:51:39
>>375
手書きでリソースファイルを修正したら出来ました、ありがとうございます。
ResEdit1.4.3のバグでSS_REALSIZECONTROLをtrueにしてもリソースファイルに反映されないのが原因だったようです。

378:デフォルトの名無しさん
08/05/24 20:04:34
CreateWindow関数って使われなくなったのですか?
何故か、自動的にCreateWindowExAと解釈されてしまうのですが……。

ちなみに環境はVC++2008ExpOSはXP使ってます。

379:デフォルトの名無しさん
08/05/24 20:08:38
すみません自己解決しましたorz
マクロのコンパイルエラーだった。

380:デフォルトの名無しさん
08/05/24 20:21:55
>>376
タイムスライスの壁は越えられないこともないが下手な実装だと Windows 全体が不安定になるわな。
デバイス側から割り込みをかけられる機構があるなら手っ取り早い。(割り込みはほぼ最大優先度で処理されるため。)

381:デフォルトの名無しさん
08/05/24 20:51:01
Webダウンローダー等でダウンロードしたファイル名に
?等が入っている場合があるのですが、これは問題ないのですか?

382:デフォルトの名無しさん
08/05/24 20:58:11
>>381
問題あり
ウイルスに感染していると自動的に?等が入る仕組みなので中身を見る前に捨てましょう

383:デフォルトの名無しさん
08/05/24 21:02:10
>>382
例えば
.cgi?name=abcd等では?

384:デフォルトの名無しさん
08/05/24 21:07:51
せめてAPIの質問してくれよ

385:デフォルトの名無しさん
08/05/24 21:12:11
>>384
ファイルの新規作成では?使えないのに
CreateFileが?使えるのは何故ですか?

386:デフォルトの名無しさん
08/05/24 21:14:13
>>376
> Windows XPで外部信号に対して
今実装してる方法では、どうやって信号取得してるの?
もうちょっと話が具体的にならないと、これ以上アドバイスできない。

387:デフォルトの名無しさん
08/05/24 21:14:41
>>385
Explorerのバグだろ
".htaccess"とかも作成できない

388:デフォルトの名無しさん
08/05/24 21:17:57
>>387
バグですか、
?をファイル名に含むファイルをプログラムが生成する事に何か問題はありますか?

389:デフォルトの名無しさん
08/05/24 21:19:35
そんな事知るか
MSに聞け

390:デフォルトの名無しさん
08/05/24 21:20:20
>>389
あなたの予想で構いません

391:デフォルトの名無しさん
08/05/24 21:21:51
>>387
それについてはこういう理由
URLリンク(blogs.msdn.com)

392:デフォルトの名無しさん
08/05/24 21:25:46
>>391
ありがとうございます。

393:デフォルトの名無しさん
08/05/24 21:34:14
>>391
以前その記事を見てバグだと確信した

・拡張子を表示しない設定にしていても".txt"のようなファイル名は拡張子含めて表示すればいい
・拡張子を表示する設定にしていれば".txt"のようなファイルを作成できるようにすればいい
・そもそも拡張子を表示しない設定なんて不要 (セキュリティ的に)

選択肢は色々あるし、.htaccessなんて比較的PCに詳しくない人間でも作る時代なのに
Win95以来から今に至るまで放置状態なんて開発者の傲慢だろ
自分でシェル拡張作れとか、もうアホかと

394:デフォルトの名無しさん
08/05/24 21:39:21
・そもそも拡張子でのファイル識別がアホ

395:350
08/05/24 21:39:23
>>386
未だ具体的な実装レベルの話にはなっていません。
Windowsで10mS応答は無理(?)なのでリアルタイム処理が必要な
部分は機器側で実装しないと無理〜・・・のような話をしている段階です。

396:デフォルトの名無しさん
08/05/24 21:41:23
>>394
Macみたいにファイルの先頭にゴミ付けて識別するのもどうかと思う

397:デフォルトの名無しさん
08/05/24 21:41:52
この流れの中で質問するのは恐縮なのですが、「Wininet」を使用したFTP通信で困った状態になっています。

APサーバからファイルサーバ上の複数のFTPサイトに対して、ファイルをFTP PUTするサービスがあるのですが、
特定のFTPサイトだけ「550 access denied」になってしまいます。

ファイルサーバ上のFTPサイトは「書き込み:可」になっていますし、フォルダの権限も同様です。
新規ファイルのPUTなので上書きに失敗している訳でもありません。
使用しているユーザーは共通のものを使っているので、他のFTPサイトにPUTできることから、
権限は足りていると判断しています。でも、アクセス拒否エラーが発生してしまいます。
ファイルサーバを再起動しても改善しません。

このような場合、他にどの点を疑って調査すれば良いでしょうか?

398:デフォルトの名無しさん
08/05/24 21:41:52
いい加減ファイルシステムにファイルタイプ情報持たせろよ

399:デフォルトの名無しさん
08/05/24 21:42:41
>>396
いつの話?

400:デフォルトの名無しさん
08/05/24 21:44:26
いまどき拡張子でタイプ判別なんてうんこプログラム書いてる奴はいないだろ…


401:デフォルトの名無しさん
08/05/24 21:45:27
>>400
つExplorer

402:デフォルトの名無しさん
08/05/24 21:47:09
>>398
Vistaで間に合わなかったアレか

403:デフォルトの名無しさん
08/05/24 21:49:16
>>393
いやちょっとまて、一体どこを読んだらそういう解釈になるんだよ。
そりゃまあ、世の中には.htaccessぐらい余裕で書ける婆ちゃんがいるかもしれんさ。
でもな、世の中はそーじゃねーんだよ。
だから一番バカに合わせておくんだ。

404:デフォルトの名無しさん
08/05/24 21:49:44
間に合わなかったっつーか、Windowsの機能として入れる計画は無くなった。

405:デフォルトの名無しさん
08/05/24 21:54:14
>>401
いやMS以外で

406:デフォルトの名無しさん
08/05/24 21:54:27
>>403
バカはPCを使わなくていい
バカに合わせると使いづらくなるだけ
バカは紙と鉛筆で十分

407:デフォルトの名無しさん
08/05/24 21:55:39
バカにはTablet PCでも与えてとけばおk

408:デフォルトの名無しさん
08/05/24 21:56:41
カプセルPCでおk

409:デフォルトの名無しさん
08/05/24 22:03:45
>>405
Windowsのファイルシステム系APIを使うほぼ全てのアプリがそうじゃない?
バイナリフォーマットを扱うアプリであれば、最初に拡張子で選別して、次に中身を見るだろうけど。
(適切かつ安全に見ることができないアプリも多いが)

410:デフォルトの名無しさん
08/05/24 22:09:35
あ〜もういいや

411:デフォルトの名無しさん
08/05/24 22:16:11
やいいうも〜あ

412:デフォルトの名無しさん
08/05/24 22:18:00
あぃいおまぁ

413:デフォルトの名無しさん
08/05/24 22:21:45
>>398
NTFSなら副次ストリームとか使えるけど、
古いファイルシステムも捨てられない。
Windowsは互換性をけっこう気にするからな。

414:デフォルトの名無しさん
08/05/24 22:27:31
古いファイルシステムってFATの事を言いたいのか?
USBメモリやSD/CFカードではまだまだ現役バリバリだろ

415:デフォルトの名無しさん
08/05/24 22:30:02
>>378
CreateWindowとCreateWindowExだったら、
どっちでもいいときは好きなほうを使えばいい。

仮に、CreateWindowが実在したとしても、どうせ中でCreateWindowExを呼ぶだけ。
それだったらCreateWindowはヘッダでCreateWindowExに展開する今の方式なら、
システムDLLがCreateWindowの実装を省ける分サイズ削減できる。

416:デフォルトの名無しさん
08/05/24 23:24:53
>>415
大抵内部で〜Exを呼んでる (LoadLibraryとか)
むしろマクロで済ませてるCreateWindowが特殊

417:デフォルトの名無しさん
08/05/24 23:50:21
>>395
10mS精度ぐらいならおおむねできるけど、ほかの処理で数百ミリ遅れることは多々ある。だからリアルタイムを現実的に無理。デバイスドライバでも同じ。
でもHALでリアルタイム実行させたり、windowsを仮想化させてリアルタイム実行させるるソフトがあるから、リアルタイムHALやRTXでググってみれれ


418:デフォルトの名無しさん
08/05/25 09:35:17
>>397
ほかのFTPソフトを使うとそのサイトにはうpできるんんか?

419:デフォルトの名無しさん
08/05/25 09:53:00
んんか?

420:デフォルトの名無しさん
08/05/25 10:01:00
できるんんか の検索結果 約 1,850,000 件
w

421:デフォルトの名無しさん
08/05/25 10:02:13
よく見たら一つ上のレスを真似しただけかな

実行させるるソフト
ググってみれれ

今時カナ打ちかよw

422:デフォルトの名無しさん
08/05/25 10:41:50
かな入力の方が日本語のタイピングは速い。

423:デフォルトの名無しさん
08/05/25 10:45:00
というのは間違い。

424:デフォルトの名無しさん
08/05/25 10:47:13
キーをタイプする回数が減るから事実。

425:デフォルトの名無しさん
08/05/25 10:51:25
かな入力じゃ10分間で5000タッチできる気がしない

426:デフォルトの名無しさん
08/05/25 10:56:24
それは慣れていないだけ。

427:デフォルトの名無しさん
08/05/25 11:07:29
まあどうせ俺なんか入力速度に脳が追いつかないからどうでもいいんだけどね

428:デフォルトの名無しさん
08/05/25 11:09:03
しかし日本語は読みから漢字に変換しなければならないので、
いくら読みがなを早く入力できたからといって、それほど早くはならない気がする。
完璧に変換してくれるIMEは存在しないし。

429:デフォルトの名無しさん
08/05/25 11:28:27
そこでT-Code

430:デフォルトの名無しさん
08/05/25 12:54:12
ライターじゃあるまいし日本語のタイピング速度なんてどうでもいいだろ
それともひまわりでプログラミングしてるのか?

431:デフォルトの名無しさん
08/05/25 12:57:08
日本語のレスに対する突っ込みだったから。

432:デフォルトの名無しさん
08/05/25 13:04:24
>>417=>>422=>>431って事でいいの?
とりあえず君がカナ入力マンセーなのは分かったからもういいよ

433:431 = 424 = 422;
08/05/25 13:07:11
>>432
違う。俺はローマ字入力。事実を伝えただけ。スレ違いなので終わる。

434:デフォルトの名無しさん
08/05/25 13:08:42
なんで怪しい日本語になるダヨ

435:デフォルトの名無しさん
08/05/25 13:14:17

/* ここまで雑談 */


436:デフォルトの名無しさん
08/05/25 13:15:51
>>433
431 = 424 = 422;
          ↑
こうやって反射的にセミコロンを付けてしまう事ってよくあるよねw

437:433
08/05/25 13:19:53
>>436
板を考慮して付けた。

438:デフォルトの名無しさん
08/05/25 13:23:08
もういいから

439:デフォルトの名無しさん
08/05/25 13:31:24
こういう空気読めない奴ってホントどこにでもいるな
リアルでも空気読めなくて周囲からウザく思われてるんだろうな

440:デフォルトの名無しさん
08/05/25 13:34:53
>>439
いい加減ウザイよ君

441:デフォルトの名無しさん
08/05/25 15:33:05
質問がないと暇を持て余すんだろう
質問来ても、その調子なら邪魔以外の何者でもないが・・・

442:デフォルトの名無しさん
08/05/25 16:37:35
int 21Hとか割り込み命令って今でも使える?
Win32API使わないとだめ?

443:デフォルトの名無しさん
08/05/25 17:05:30
試せば分かるだろ

444:デフォルトの名無しさん
08/05/25 18:55:52
>>442
DOSアプリからなら使えるよ。32ビットアプリだとクラッシュ。
9x系だと確か一部のものはクラッシュしなかったような?
動かないだろうけど

445:デフォルトの名無しさん
08/05/25 19:09:09
>>444
後半二行の不確かな情報は要りません

446:デフォルトの名無しさん
08/05/25 20:43:34
>>444
DOSアプリのみということは、
Win32 コンソールアプリではだめなのか
なるほど

447:デフォルトの名無しさん
08/05/25 20:46:32
Invalid icon format ってエラーが出るんですけど、アイコンの絵そのものが
問題あるってことですよね?XPのペイントで書いてみたのが問題ですか?



448:デフォルトの名無しさん
08/05/25 20:48:03
アイコンって、大きさ正方形だったかサイズ固定だったか
決まりがあったような気がする。

449:デフォルトの名無しさん
08/05/25 20:50:56
>>447
icon≠windows bitmap
そもそもフォーマットが違います
アイコンエディタを使いましょう

450:デフォルトの名無しさん
08/05/25 20:57:13
>>448
それはgoogle検索で出てきたので、32×32にしてます。
>>449
そうなんですか、分かりました。

皆さんありがとうございました。

451:デフォルトの名無しさん
08/05/25 21:23:51
そういえばVistaのPNG形式アイコンがあるとRC.EXEがエラー吐いたりしたけど
最近のバージョンのRC.EXEでは直ってるの?

452:デフォルトの名無しさん
08/05/25 21:48:19
>>444
9xで、32ビットアプリケーションからファンクションコールをするとしたら、
DeviceIoControlを呼ぶのが正式な手段。全部使えるわけではないけど、
ディスクを直接読み書きするときとかに使った。

453:デフォルトの名無しさん
08/05/25 22:00:33
9xの話を今頃されてもオッサン乙で終わるのだが

454:デフォルトの名無しさん
08/05/26 00:19:42
ウィンドウプロシージャを差し替えたいんだけど、
なんかできないんだよね。

SetClassLong(hWnd, GCL_WNDPROC, (LONG)AnotherMyWindowProc);
この関数を用いる上でなんか注意点ある?
マウスやアプリのアイコン変更も反映されないんだけど。

455:デフォルトの名無しさん
08/05/26 00:33:58
注意点 msdnをよく読む事

456:デフォルトの名無しさん
08/05/26 00:43:49
>>453
そのオッサンのやりとりにお前が絡む必要はないのに、何が乙なんだ

457:デフォルトの名無しさん
08/05/26 00:45:43
俺の家の玄関に「硫化水素発生中」って貼った奴、氏ねよ

458:デフォルトの名無しさん
08/05/26 01:04:43
そのネタはもう旬を過ぎてるよ


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

5006日前に更新/190 KB
担当:undef