[表示 : 全て 最新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/



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 ]
追記
最適化は実行速度

364 名前:デフォルトの名無しさん mailto:sage [2007/03/10(土) 10:18:30 ]
>>362
スレッドが終了しないってことです。
ってことは書き方が悪いのかなー。。

365 名前:デフォルトの名無しさん mailto:sage [2007/03/10(土) 10:48:13 ]
>>361
本当は、ScreenToClientよりMapWindowPointsがお勧め。
まあ、RTL(RightToLeft)環境で動かすようなことは、まずないだろうけど。
MFCのScreenToClient実装は、過去互換の関係で放置してる予感。
あと、GetDlgItemで取るより、メンバ変数に割り当てた方がいい。

>>364
アセンブリコード吐き出させて、頑張って読む。

366 名前:デフォルトの名無しさん mailto:sage [2007/03/10(土) 23:02:34 ]
visualC++でプログラム作れるように
なるには、C言語をまず勉強しないといけない
と聞いたのですが、本当ですか?
あとその次にポインタというのを勉強して
それからVisualC++の本買った方が良いというのも
本当でしょうか?

なんか知らないけどどうせならVisualC++でソフトを作ってみたいです。
憧れみたいのがあります。

367 名前:デフォルトの名無しさん mailto:sage [2007/03/10(土) 23:15:47 ]
小説を書くにはまず日本語を勉強しないといけないのですか?
みたいな質問だな

368 名前:デフォルトの名無しさん mailto:sage [2007/03/10(土) 23:31:20 ]
>>366
C++はC言語+アルファ(語弊あるけど)。
だからC言語を学ぶことは有効だけど
いけないっていうこともないだろうな。

C++って難しい部分もあるから
簡単なところからはじめたほうがいいっていう意味で
先にC言語を学べってことになってしまう。

ポインタは壁にぶつかるやつが多いからな。
ポインタがわからないやつにC++を使わせるのは危険ともいえる。
そもそもC言語を使わせるのも危険だけど
ポインタを理解してからC++をはじめたほうがいいな。

369 名前:デフォルトの名無しさん mailto:sage [2007/03/10(土) 23:32:27 ]
>>366
きにすんな。
作っちゃいなよ。
壁にぶつかっちゃいなよ。



370 名前:デフォルトの名無しさん mailto:sage [2007/03/10(土) 23:39:58 ]
Visual C++ =
CとC++などのコンパイラ(独自拡張有) +
CとC++の標準ライブラリ(独自拡張有) +
Platform SDK(ただしExpressは別) +
MFCやATLなどMS製のライブラリ +
IDE(デバッガこみ) +
MSDN ライブラリ +
各種ツール

およそこんな感じ

371 名前:デフォルトの名無しさん mailto:sage [2007/03/10(土) 23:45:37 ]
>>366
コンパイラの使い方とかデバッグの仕方とかは
ツールによって異なるからな。
バージョンによってメニューとかも多少変わるぞ。

自力で判るとか
友達に手取り足取り教えてもらえるとか
ヘルプをみながら判るやつなら不要だが
初心者はバージョンも合っている解説書的本があったほうがいいな。


372 名前:デフォルトの名無しさん mailto:sage [2007/03/12(月) 00:07:58 ]
すまんが聞きたい事がある。フリーソフトでアナログ時計を作って
ベクターに公開しているのだが、ウィンドウズの時計部門の人気順で20位以内に
入っている。オレのプログラミングのレベルはどの位か評価してほしいのだが、頼む。
自分ではVisual C++のレベルが初級を脱した位だと思っているのだが。

373 名前:デフォルトの名無しさん mailto:sage [2007/03/12(月) 00:13:54 ]
そんなことわかるわけがない。
良いプログラムが書けるかどうかと人気のあるプログラムが書けるかどうかというのは別問題。

374 名前:デフォルトの名無しさん mailto:sage [2007/03/12(月) 00:17:06 ]
人気とプログラミングレベルに相関関係があると思ってるん?

375 名前:デフォルトの名無しさん mailto:sage [2007/03/12(月) 02:15:16 ]
ソースアップしてリンク張ってくれれば見るよ
ここだと辛口な意見が多そうだが

376 名前:デフォルトの名無しさん mailto:sage [2007/03/12(月) 05:25:50 ]
プログラミングのレベルと人気は必ずしも関係ないでそ。
自分は、どの程度的確に言語仕様を理解しているか、とか、
プロジェクトに適した方法で開発できるか、とか、
そういうことだと思う。

ただ、人気のあるソフトを作れるってことは
良いクリエイターなんじゃないかな。

なんていうかな、Flashとか使えるWebDesignerが、
必ずしもプログラムの技術があるとは限らないっていうか。

377 名前:デフォルトの名無しさん mailto:sage [2007/03/12(月) 06:20:07 ]
サイズのでかいのが結構上位に入ってるな
常駐系はサイズが小さいのが常識だと思ってたけど時代は変わっていく

378 名前:デフォルトの名無しさん mailto:sage [2007/03/12(月) 17:08:25 ]
非矩形ウィンドウ
システムトレイへの登録
レジストリ操作
多重起動の防止

ぐらい実装していれば中級ではないか

379 名前:デフォルトの名無しさん mailto:sage [2007/03/12(月) 19:17:13 ]
コピペでも作れるだろ。そのくらい



380 名前:デフォルトの名無しさん mailto:sage [2007/03/12(月) 19:27:50 ]
通信関連のマルチスレッドと低レベルAPI
コピペでやると一発で落ちる

381 名前:デフォルトの名無しさん mailto:sage [2007/03/12(月) 19:37:45 ]
非矩形ウィンドウは時計の初歩






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

前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