[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 2chのread.cgiへ]
Update time : 08/02 03:19 / Filesize : 168 KB / Number-of Response : 617
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

くだすれVisual C++(超初心者用)その4



1 名前:デフォルトの名無しさん [2006/11/29(水) 17:00:54 ]
このスレッドは、他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だか分からない質問を勇気を持って書き込むスレッドです。
Visual C++使いが優しくコメントを返しますが、
お礼はVisual C++の布教と初心者の救済をお願いします。

■過去スレ
前スレ
pc8.2ch.net/test/read.cgi/tech/1150105712/
前々スレ
pc8.2ch.net/test/read.cgi/tech/1141087248/

■遠い親戚スレ
くだすれC++/CLI(初心者用)
pc8.2ch.net/test/read.cgi/tech/1142144110/l50

■関連ページ
Visual C++ Home Page
www.microsoft.com/japan/msdn/visualc/



263 名前:デフォルトの名無しさん mailto:sage [2007/02/24(土) 08:42:31 ]
諦めずに再エスパー。
アイコンの内32x32の方だけ書き換えていて、16x16は空のまま、とか。
イメージ - 現在のアイコンイメージタイプ をチェックしてみ。

264 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 23:38:32 ]
>>263
あるある

265 名前:デフォルトの名無しさん mailto:sage [2007/02/26(月) 00:33:49 ]
>>263
遅くなってすいません
見事にそれでした
エスパーさんありがとう!

266 名前:デフォルトの名無しさん mailto:sage [2007/02/26(月) 03:30:05 ]
エスパーされるってことは、質問の情報が不足してるってことだぞ

267 名前:デフォルトの名無しさん mailto:sage [2007/02/26(月) 05:04:43 ]
つまり、馬鹿にされているってこった。

268 名前:デフォルトの名無しさん mailto:sage [2007/02/26(月) 06:17:41 ]
関係ないけどFLVPというフリーソフトも小さいアイコンの表示が変だ
大きいやつは赤いアイコン、小さい方はMFCの青いアイコン

269 名前:デフォルトの名無しさん mailto:sage [2007/02/26(月) 07:39:04 ]
昔からそうだけど、MFCの吐き出す既定コードが手抜きだから。
LoadIconしたアイコンを大小両方に割り当てる所為で、
タイトルバーには16x16では無く、32x32のアイコンが縮小されて使われている。
両方描くのが面倒な時は、どちらか一方を削除しておくのが無難だな。

270 名前:デフォルトの名無しさん mailto:sage [2007/02/27(火) 18:10:22 ]
>>269
最初から16x16も作ってくれちゃうしなあ
アイコン作ったときは、小さいほうはとりあえず消して
小さいアイコンの見栄えが気になってから追加するようにしてる。

271 名前:デフォルトの名無しさん [2007/02/27(火) 19:27:48 ]
ソースが同封されてるツールがあって、自分でVisual Studioで
ビルドしてみたのですが、同封されているexeと比べると何故か
サイズが大きいのはどう言ったことが原因と思われるのでしょうか?

あと何個か警告が出たのですが、一応exeが出来ています。
どんな警告も出ないように作ると勝手に想像していたのですが
ある程度の許容範囲内の警告が出るくらいは無視されるものなのでしょうか?
よろしくお願いします。



272 名前:デフォルトの名無しさん mailto:sage [2007/02/27(火) 19:51:26 ]
さあ

273 名前:デフォルトの名無しさん mailto:sage [2007/02/27(火) 21:57:38 ]
作成者とまったく同じコンパイラと
作成者とまったく同じコンパイルオプションと
作成者とまったく同じライブラリをリンクすれば

たぶん同じサイズの実行ファイルになるんじゃないかな

274 名前:デフォルトの名無しさん mailto:sage [2007/02/27(火) 22:07:01 ]
覆水盆に帰らず

275 名前:デフォルトの名無しさん mailto:sage [2007/02/27(火) 23:45:12 ]
同じCPUで、同じOSな必要もあるんじゃね?

276 名前:デフォルトの名無しさん mailto:sage [2007/02/28(水) 14:56:54 ]
size = GetFileSize( hFile, NULL );
SetWindowText(label,(char)size);

こんな風に書いて、sizeにhFileのファイルサイズを
スタティックコントロールのlabelに表示したいんですが、
labelの表示が変わらないんです。
(char)を取ると、めちゃくちゃな文字列が出ちゃう。
これ、このスレでいいんかな?

277 名前:デフォルトの名無しさん mailto:sage [2007/02/28(水) 15:05:06 ]
SetWindowTextなんだからテキストを渡さないと

278 名前:デフォルトの名無しさん mailto:sage [2007/02/28(水) 16:32:12 ]
VisualC++2005ExpressEditionを久々に起動しようとおもったんですが
”一つ以上のコンポーネントがみつかりません。再インストールしてください”
とでて、
アンインストールしようとしてもなにかのファイルがみつからないとかいうエラーがでてアンインストールできず
それでも再度インストールしようと試みたらエラーとおもわれるものがでました。
以前にはしっかりと登録もしたはずなんですが
どうすればいいでしょうか。

279 名前:デフォルトの名無しさん mailto:sage [2007/02/28(水) 16:45:11 ]
パソコン買い換え

280 名前:デフォルトの名無しさん mailto:sage [2007/03/01(木) 08:29:53 ]
最後の手段っぽいけど、Windows Installer CleanUp ユーティリティを使う、とか。
サポート技術情報を文章番号290301で。

281 名前:デフォルトの名無しさん mailto:sage [2007/03/01(木) 13:38:53 ]
SetFilePointer(hFile,1,NULL,FILE_BEGIN);
ReadFile(hFile,buf,3,&readsize,NULL);
buf[3] = ('\0');

教えてください。
上のように書いて、hFileのファイルの先頭3バイトを読み
そこにヌル文字を加える、これで先頭3バイトを受け取りたいんです。
でも、これだと2バイト目+3バイト目+ヌル文字になってしまいます。
相当馬鹿なことしてるかもしれませんが・・・



282 名前:デフォルトの名無しさん mailto:sage [2007/03/01(木) 14:07:26 ]
>>281
>SetFilePointer(hFile,1,NULL,FILE_BEGIN); 
先頭から読みたいなら0じゃない?
SetFilePointer(hFile,0,NULL,FILE_BEGIN); 

283 名前:デフォルトの名無しさん mailto:sage [2007/03/01(木) 14:23:25 ]
この世はすべて1から始まっている

という世界ですな

284 名前:281 mailto:sage [2007/03/01(木) 14:36:34 ]
>>282
どうもです。できました。
かなり馬鹿なことしてたんかな?
また、質問するかもしれないんでよろしくお願いします。

285 名前:デフォルトの名無しさん mailto:sage [2007/03/01(木) 20:15:19 ]
ここでいいかどうかよく判らないですが、質問です。

Web ブラウザから起動される Java アプレットがあり、そこに表示されている情報を
現在作成しているツール(Visual C++ .NET, ダイアログ)から読み取ろうとしています。
・アプレットのクラス名を指定して FindWindow()
・EnumChildWindows() で子ウィンドウを列挙
・子ウィンドウに対して GetWindowRect() や GetWindowText()
という感じで、ラベル(SunAwtLabel)のキャプションは GetWindowText() で取得できるんですが
エディットボックス(Edit)の現在の値が取れません(""となります)。
また、コンボボックス(ComboBox)もあるんですが、これは値の取り方すら分かりません。

エディットボックスとコンボボックスの現在の値を取得するには、どうしたらいいでしょうか?

286 名前:デフォルトの名無しさん mailto:sage [2007/03/01(木) 21:13:20 ]
みためがエディットボックスとコンボボックス

287 名前:デフォルトの名無しさん mailto:sage [2007/03/01(木) 23:40:19 ]
VC2005ってPDBの埋め込みできないの?

288 名前:デフォルトの名無しさん mailto:sage [2007/03/02(金) 09:45:51 ]
SetFilePointer(hFile,1,NULL,FILE_BEGIN); //(1)先頭3バイト読む
ReadFile(hFile,buf,3,&readsize,NULL); // bufはchar
buf[3] = ('\0');

SetFilePointer(hFile,0,NULL,FILE_CURRENT); //(2)先頭から4バイト目を読む(1)の続きを読みたい
ReadFile(hFile,buf,1,&readsize,NULL);
buf[1] = ('\0');

if (buf==0x01)
{
MessageBox(hWnd,"aaa","bbb",MB_OK); //(3)4バイト目は01だからメッセージが出るんじゃ?
}

度々質問ですが、
こんな感じで、まず(1)で先頭から3バイトバイナリを読みます。
次に(2)で(1)の続き(先頭から4バイト目)を読みます。
例えば、バイナリで「41 42 43 01」なら(1)はABCになると思います。
でも、(3)のメッセージが出ません。
if の所の比較が変なんでしょうか?

289 名前:デフォルトの名無しさん mailto:sage [2007/03/02(金) 09:46:54 ]
C++とDelphiどっちが簡単なわけ

290 名前:デフォルトの名無しさん mailto:sage [2007/03/02(金) 09:54:02 ]
>>288
> SetFilePointer(hFile,1,NULL,FILE_BEGIN);
0から数え始めるからこれでは最初の1バイトを飛ばすことになる

> SetFilePointer(hFile,0,NULL,FILE_CURRENT);
無意味

> if (buf==0x01)
上を治したとして、buf[0]に書き込まれているはずだからif (buf[0] == 0x01)では?

291 名前:デフォルトの名無しさん mailto:sage [2007/03/02(金) 10:00:12 ]
実験ならいいけど
こまぎれで読んだらパフォーマンス悪そうだな



292 名前:デフォルトの名無しさん mailto:sage [2007/03/02(金) 10:04:37 ]
実験する場合はデバッガ使った方がいい

293 名前:288 mailto:sage [2007/03/02(金) 10:07:08 ]
>>290
thanxです、buf[0]だったんですね。
それにしてもこのスレで教えてもらうたびに
自分の実力の無さを感じてしまう。

294 名前:デフォルトの名無しさん mailto:sage [2007/03/02(金) 11:05:57 ]
実力以前の話だから気にするな

295 名前:デフォルトの名無しさん mailto:sage [2007/03/02(金) 11:20:40 ]
イイハナシダナー( ;∀;)

296 名前:デフォルトの名無しさん mailto:sage [2007/03/02(金) 18:14:24 ]
イイハナシダナー( ;∀;)

297 名前:デフォルトの名無しさん mailto:sage [2007/03/02(金) 18:30:16 ]
イナバウアー( ;∀;)

298 名前:デフォルトの名無しさん mailto:sage [2007/03/02(金) 21:30:16 ]
>>289

GUIアプリを作るなら

Delphi>>>(超えられない壁>>>VC++(MFC)


299 名前:デフォルトの名無しさん mailto:sage [2007/03/02(金) 23:32:56 ]
やりたいことができなくなったらVC++へ。

300 名前:デフォルトの名無しさん mailto:sage [2007/03/04(日) 21:23:56 ]
www.kumei.ne.jp/c_lang/
初心者でここを見ながらVisual C++2005の勉強してるのですが、
現在時刻を表示するのに

case WM_TIMER :

GetLocalTime(&st);
wsprintf(str,"%02d:%02d:%02d",st.wHour,st.wMinute,st.wSecond);

でstatic char str[256]に格納して
WM_PAINTでTextOutでこの文字列を出力しようとするとVisual C++では文字化けしてしまいます。
borland c/c++コンパイラでコンパイル実行させるとちゃんと時間が表示されます。
これを直すにはVCの何処を弄ったら良いのでしょうか?

301 名前:デフォルトの名無しさん mailto:sage [2007/03/04(日) 21:35:44 ]
ひろってきたソース弄ってるのは勉強とは言わない



302 名前:デフォルトの名無しさん mailto:sage [2007/03/04(日) 21:38:25 ]
>>300
プロジェクトのプロパティ → 全般 → 文字セット → マルチバイト文字セットを使用する
にしてみる。
または、
wsprintf(str, TEXT("%02d:%02d:%02d"), st.wHour, st.wMinute, st.wSecond);
にしてみる。

303 名前:デフォルトの名無しさん mailto:sage [2007/03/04(日) 21:38:50 ]
第一引数にはLPTSTRを渡さないと

304 名前:デフォルトの名無しさん mailto:sage [2007/03/04(日) 21:38:58 ]
>>301
十分勉強だろ

305 名前:デフォルトの名無しさん mailto:sage [2007/03/04(日) 21:47:06 ]
>>302
「strの宣言をstatic TCHAR str[256];に直す」が抜けている。

これくらい警告やエラーになりそうな気がするんだがな。
常に/W4 /Wp64付けておけ。

306 名前:デフォルトの名無しさん mailto:sage [2007/03/04(日) 22:05:01 ]
糞サイトの無料サポートをほいほい引き受けるお人良しがいたとは

307 名前:300 mailto:sage [2007/03/04(日) 22:14:39 ]
>>302-303,>>305
ありがとうございます、出来ました!
今までbccだと通っていたので気にしていませんでしたが、
VCだと型に対してキビしいのですね。
仮引数の型を教えてくれる機能があるようなのでこれからは気をつけます><
またプロパティで警告のレベル等を変えられるのも初めて知りました。
親切に教えてくださり本当にありがとうございました。

308 名前:デフォルトの名無しさん mailto:sage [2007/03/04(日) 22:42:49 ]
>>307

単に VC8(VS2005)は、デフォがUNICODEになってて、BCCは MBCSに
なっているってだけだよ。
BCCでも UNICODEにすると同じようになるはず。


309 名前:デフォルトの名無しさん mailto:sage [2007/03/06(火) 11:59:45 ]
Visual c++
で、ソフト作成にチャレンジしようと思うのですが、
Visual C++ 2005 Express Edition ってのが
マイクロソフトからダウンロードできるんだけど、
それでいいのですか。

ここの皆さんが使っているのはこれですよね。
違ったら教えてください。
似たような名前のソフトがたくさんあって
どれがどれなのかさっぱり分かりません。
どうかお願いします。


310 名前:デフォルトの名無しさん mailto:sage [2007/03/06(火) 12:04:59 ]
>>309
EEじゃないけど、まあそれだ。
PlatformSDKとかMSDNライブラリとかも一緒にな

311 名前:デフォルトの名無しさん mailto:sage [2007/03/06(火) 17:15:26 ]
ツールボックスのList Controlについて質問です。

List Controlに対する処理(後で記述)を関数化しています。
「変数の追加」でList Controlをm_listctrlとしました。
プロパティは、Viewをレポートにしてるだけです。

関数の処理を行うと「説明」のColumn部分が二つになってしまいます。
m_listctrl.DeleteColumn(1);
で消しているのですが、どうしてでしょうか?
Columnをうまく初期化する方法をおしえて下さい。



312 名前:311 mailto:sage [2007/03/06(火) 17:18:23 ]
m_listctrl.DeleteColumn(0);
m_listctrl.DeleteColumn(1);
m_listctrl.DeleteAllItems();

// 詳細表示のときのコラムのヘッダーの設定
LVCOLUMN myColumn; // 列情報を保持するオブジェクト
myColumn.mask = LVCF_TEXT|LVCF_WIDTH; // pszText,cxを有効にする

RECT myRect;
m_listctrl.GetClientRect(&myRect); // リストビューサイズを得る
myColumn.cx = (myRect.right - myRect.left) / 3; // 横幅の1/3を表題にする
myColumn.pszText = "項目"; // 列タイトル文字列
m_listctrl.InsertColumn(0, &myColumn); // 0列目を確保する

myColumn.cx = (myRect.right - myRect.left)*2 / 3; // 横幅の2/3を説明にする
myColumn.pszText = "説明"; // 列タイトル文字列
m_listctrl.InsertColumn(1, &myColumn); // 1列目を確保する

// リストビューにアイテムを設定する
static LVITEM myITEM; // 初期値をクリアするためにstaticを使用
myITEM.mask = LVIF_TEXT; // pszTextを有効にする
myITEM.iItem = 0; // 項目0
myITEM.iSubItem = 0; // 列0
myITEM.pszText = "リスト1"; // タイトル文字列
m_listctrl.InsertItem(&myITEM); // 設定する
myITEM.mask = LVIF_TEXT; // pszTextを有効にする
myITEM.iSubItem = 1; // 列1
myITEM.pszText = "ああああああ"; // 説明文字列
m_listctrl.SetItem(&myITEM); // 設定する

313 名前:デフォルトの名無しさん mailto:sage [2007/03/06(火) 17:32:44 ]
何がどうなってるのかよくわからんが、
(0) で0個目を消したら1個目は前にずれるから
それも消すのはまた(0)じゃないか?

314 名前:311 mailto:sage [2007/03/06(火) 17:36:17 ]
すみません、追加です。
プロジェクトの内容は
テンプレート:MFCアプリケーション
アプリケーションの種類:ダイアログベース
「ユニコードライブラリの使用する」のチェックを外す

315 名前:311 mailto:sage [2007/03/06(火) 17:44:06 ]
>>313
レスどうもです。

m_listctrl.DeleteColumn(0);
m_listctrl.DeleteColumn(0);

で、できました!
しかし、なんかもっとスッキリしたやり方はないのかな・・・。
Columnの数を計算して、ループでDeleteColumn(0);とするんでしょうか・・・。

316 名前:デフォルトの名無しさん mailto:sage [2007/03/06(火) 17:47:58 ]
今見たけど、ヘルプのDeleteColumn の例はそうなってるな。

317 名前:311 mailto:sage [2007/03/06(火) 18:06:45 ]
>>316
なるほど、そうなってますね。
勉強になりました。
ありがとうございます。

318 名前:デフォルトの名無しさん mailto:sage [2007/03/08(木) 13:22:56 ]
strcat(all,rectform.top);


all(char[]で宣言)にstrcatでフォームの高さ(位置)を入れたいんですが

'.top' : 左のオペランドが 'struct' へのポインタです。'->' を使用してください。

というようなエラーが出てしまいます。
. を -> に変えると強制終了しちゃうし。
何かキャストが要るんかな?

SDKです。

319 名前:デフォルトの名無しさん mailto:sage [2007/03/08(木) 13:28:27 ]
はい。

320 名前:デフォルトの名無しさん mailto:sage [2007/03/08(木) 13:34:14 ]
キャストが必要と言うより、プログラミングの基礎知識が必要かと思われます。

321 名前:デフォルトの名無しさん mailto:sage [2007/03/08(木) 14:21:44 ]
数値と文字列の相互変換からやっとけ



322 名前:デフォルトの名無しさん mailto:sage [2007/03/08(木) 14:28:54 ]
キャストもsdkも100年早い

323 名前:デフォルトの名無しさん mailto:sage [2007/03/08(木) 16:05:22 ]
char tmp[20];
sprintf(tmp,"%d",rectform->top);
strcat(all,tmp);

324 名前:デフォルトの名無しさん mailto:sage [2007/03/08(木) 16:16:14 ]
こう書くのは駄目か?
int len = strlen(all);
_snprintf(tmp + len, sizeof tmp - len, "%d", rectform->top);

325 名前:デフォルトの名無しさん mailto:sage [2007/03/08(木) 17:38:26 ]
>>324
ダメすぎ。

326 名前:323 mailto:sage [2007/03/08(木) 17:42:54 ]
お、俺のはどう・・?

327 名前:324 mailto:sage [2007/03/08(木) 17:43:09 ]
ほんとだ、323に影響されてallとtmpをごっちゃにしてる
すまん

328 名前:デフォルトの名無しさん mailto:sage [2007/03/08(木) 18:00:32 ]
>318が低レベル過ぎてそれに対するフォローしても妥当かどうかの判断しようがない件。

329 名前:デフォルトの名無しさん mailto:sage [2007/03/08(木) 18:35:12 ]
エラーが出たらまずキャストって誰に教わったんだか

330 名前:デフォルトの名無しさん mailto:sage [2007/03/08(木) 18:38:25 ]
strcat使うべきところかどうかもあやしい

331 名前:デフォルトの名無しさん mailto:sage [2007/03/08(木) 19:56:32 ]
どうみても厨房です。本当にありがとうございました。



332 名前:デフォルトの名無しさん mailto:sage [2007/03/08(木) 19:59:12 ]
strcatは安全じゃないってばぁちゃん言ってた

333 名前:デフォルトの名無しさん [2007/03/08(木) 20:58:50 ]
いっそ全部stringにしちゃえ

334 名前:デフォルトの名無しさん mailto:sage [2007/03/08(木) 22:23:41 ]
最適化なしだと意図通りに動いて、最適化ありだとバグが起こるって
よくあることですかね?

335 名前:デフォルトの名無しさん mailto:sage [2007/03/08(木) 22:26:20 ]
変数の未初期化

336 名前:デフォルトの名無しさん mailto:sage [2007/03/08(木) 22:30:09 ]
volatileが必要な変数とか?

337 名前:デフォルトの名無しさん mailto:sage [2007/03/08(木) 23:15:54 ]
マルチスレッドのプログラムで、外部でフラグを立ててスレッドを終了させ
ようとしています。フラグの変数はvolatileをつけてます。
いろいろ試してみましたが、プログラムサイズの最適化だと意図したとおりに
動くようです。でも実行速度の最適化のオプションではだめなようです。

338 名前:デフォルトの名無しさん mailto:sage [2007/03/08(木) 23:29:51 ]
>>337
そうならないためのvolatileなのに変だね。
別の原因なのかな。

339 名前:デフォルトの名無しさん mailto:sage [2007/03/08(木) 23:57:27 ]
Win32のイベントを使えばいいだろ。
C/C++のvolatileはそもそも対マルチスレッド専用に作られたわけではないから、
マルチスレッド時にvolatileを付けておけば絶対に大丈夫ということはない。

340 名前:デフォルトの名無しさん mailto:sage [2007/03/09(金) 00:09:12 ]
この使い方が駄目なら、volatileの存在意義が無いんじゃね?
とりあえず、プログラムをupしる。

341 名前:デフォルトの名無しさん mailto:sage [2007/03/09(金) 00:23:26 ]
じゃあ〜volatileはなんなんだよ〜


最適化による期待はずれの動作は奥が深そうだな。
volatileでは解決しないことの原因なら
勉強のためにも
というかマルチスレッドを使う俺としてはぜひ知りたいところだ。



342 名前:デフォルトの名無しさん mailto:sage [2007/03/09(金) 01:10:07 ]
とりあえず重要そうなとこだけ抜粋してみました。
ひょっとかしたら根本的な間違いがあるかもしれませんが。
// グローバル変数
volatile bool exitflag;

int WINAPI WinMain()
{
    (中略)
    hThread = reinterpret_cast<HANDLE>(_beginthread(childThread, 0, NULL));
    (中略)
    // 終了処理
    exitflag = true;
    WaitForSingleObject(hThread, INFINITE);
    return 0;
}

void childThread(void *arg)
{
    (省略)
    while(!exitflag){
        // いろいろな処理
    }
    if(exitflag)
        return;
    (省略)
    while(!exitflag){
        // いろいろな処理
    }
    return;
}
最適化なし、プログラムサイズ最適化はスレッドが終了しますが、
実行速度最適化にするとスレッドが終了しないようです。

343 名前:デフォルトの名無しさん mailto:sage [2007/03/09(金) 09:33:46 ]
とりあえず_beginthreadexに変えてみる、とか。
_beginthreadは、CloseHandleが生成されたスレッドで処理されるので、
スレッド終了時点で、返されたハンドルの保証ができなくなる。
運が悪いと、別のスレッドを指してしまう可能性もある。

344 名前:デフォルトの名無しさん mailto:sage [2007/03/09(金) 18:31:44 ]
main.cpp
main.h
func.cpp
func.h
・・・
という感じでソースを書いてるんですが、
main.cppの方でfunc.cppの関数を呼び出す際、引数に構造体のアドレスを渡して、関数内でその構造体の中身を変更、としたいんです。
この場合構造体の型と構造体の宣言はどこにどういう風にすればいいんでしょうか。
externを使ったりしてやってみてるんですがどうもエラーがでてしまいます・・・

345 名前:デフォルトの名無しさん mailto:sage [2007/03/09(金) 18:42:04 ]
手取り足取り教えてくれる親切な人がいるといいね

346 名前:デフォルトの名無しさん mailto:sage [2007/03/09(金) 18:45:49 ]
>>344
func.cpp の関数や構造体をfunc.hで宣言して両方でinclude
つーかcppなのにそれでいいのか、、って気はするが
もうちょっと他のソースやIDEの吐き出したソース参考にしてくれ。

あんまり初歩的だと>>345 みたいになる

347 名前:デフォルトの名無しさん mailto:sage [2007/03/09(金) 19:02:01 ]
すみません,伺わせてください.
Windowsフォームで何らかの処理をした際に出現する
フォームの多重起動を防ぐ方法についてなんですが.

グローバルな領域にフォームのオブジェクトを持たせて,
一度目にnew生成,終了時にnullを代入することで,
nullチェックを行えばできるのですが.
グローバル領域を使用せずにする方法があったら教えてください.
お願いします.

348 名前:344 mailto:sage [2007/03/09(金) 19:08:30 ]
>>346
なんとかなりました。
まだCしか使えないのでこんな形になっています。
C言語質問の方で聞くべき事だったかもしれません。
回答ありがとうございました。

349 名前:デフォルトの名無しさん mailto:sage [2007/03/09(金) 19:35:54 ]
一応__beginthreadexに書き換えてみました。しかし駄目でした。
最適化段階で終了条件が消えてしまっているような。。

350 名前:デフォルトの名無しさん mailto:sage [2007/03/09(金) 20:08:26 ]
>>342
exitflagをlong型にしてtrueの代入の代わりにInterlockedIncrementを使ったらどう?

351 名前:デフォルトの名無しさん mailto:sage [2007/03/09(金) 21:15:32 ]
>>350
試してみました。でも駄目でした。やっぱり速度最適化が駄目です。

volatile修飾ちゃんと利いてるのかな。。それとも俺の書き方が悪いのかorz



352 名前:デフォルトの名無しさん mailto:sage [2007/03/09(金) 21:23:19 ]
回っているときにブレークしてみたらどうなる?

353 名前:デフォルトの名無しさん mailto:sage [2007/03/09(金) 21:39:55 ]
動作中にブレークポイントを設定してみたら、最適化なしのときには
|if(exitflag)
●| return;
こんな感じで設定できたのですが、
最適化コンパイル後の動作中だとreturnの横クリックしても数行後の
処理に移動してしまいます。

説明が悪くて、わかりにくかったらすいません。

354 名前:デフォルトの名無しさん mailto:sage [2007/03/09(金) 21:41:10 ]
>>353
最適化するとソースの行とプログラムコードが一致しないからな
ステップ実行がへんになることある。

355 名前:デフォルトの名無しさん mailto:sage [2007/03/09(金) 22:04:57 ]
ダイアログアプリケーションを作っていますが、エディットボックスなどの
コントロールの配置が終わるのはいつでしょうか?
最初の表示が終わった契機でコントロールの表示位置を取得しようと
OnInitDialog() でコントロールの座標を調べてみましたが
なぜか位置が(0,0)となってしまいます。
コントロールの表示位置を取得するのに最適な契機を教えてください。

356 名前:デフォルトの名無しさん mailto:sage [2007/03/09(金) 22:06:54 ]
OnInitDialogで設定した0秒のSetTimerが到着する頃には出来てるんじゃないの。

357 名前:デフォルトの名無しさん mailto:sage [2007/03/09(金) 22:29:24 ]
あとから動的にコントロール追加とか普通にやるから
そのタイミングでいいんじゃないかな

358 名前:355 mailto:sage [2007/03/09(金) 22:41:51 ]
>>356
確かに OnInitDialog() 内でタイマをセットするやり方もありますね
もっとスマートな方法がなければこれしかないですね

>>357
「そのタイミング」とは OnInitDialog() で、ということですか?

やりたいのは、ダイアログエディタで配置したコントロールの座標を取得することです。
コントロールは動かさないので、一回だけ座標を取得できればいいのです。

359 名前:デフォルトの名無しさん mailto:sage [2007/03/09(金) 22:46:30 ]
>>355
OnInitDialog() でコントロールの座標を調べるなんておれやったことあるけどなあ。
おかしいなあ。

360 名前:355 mailto:sage [2007/03/09(金) 23:01:51 ]
済みません。
私の初歩的なミスっぽいです。
コントロールの座標を GetClientRect() で取ってたんですが
左上が (0,0) になるので取れてないと思っていました。
OnInitDialog() で GetWindowRect() を発行してみたら
どうやらダイアログ上の座標が取れたようです。
もうちょっと調べてみます。

361 名前:355 mailto:sage [2007/03/10(土) 02:03:43 ]
OnInitDialog() にて

CRect rect;
CEdit* pEdit=(CEdit*)GetDlgItem(IDC_EDIT_HOGEHOGE);
pEdit->GetWindowRect(&rect);
ScreenToClient(&rect);

でダイアログ相対の座標が取れました。
大変お騒がせ致しました。



362 名前:デフォルトの名無しさん mailto:sage [2007/03/10(土) 05:18:31 ]
>>351
駄目っていうのはスレッドが終了しないの? or デバッガ上でのトレースで
returnの行が飛ばされるの?後者ならあまり気にする必要が無い気がする。
前の方の書き込みを見る限り前者なのかな....
XP上のVC6 & VC2005で試してみたけどvolatile longとInterlockedIncrement
の組み合わせでスレッドは終了してたよ。試行回数各10回ほど。

_beginthreadでマルチスレッドやったのは今日がはじめてだけど、MFCでやる場合は
同期オブジェクトを使って終了を通知してる。APIでいうとCreateEventなど。

363 名前:362 mailto:sage [2007/03/10(土) 05:24:03 ]
追記
最適化は実行速度






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<168KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef