トップページ⇒tech
1001コメント306KB

★初心者にVisual C++を教えるスレ★ Part5

■ このスレッドは過去ログ倉庫に格納されています
0001987NGNG
タイトルのとおり、
Visual C++ 初心者用スレッドです。

前スレ・関連スレは、>>2 ぐらい。
0482デフォルトの名無しさんNGNG
>>481
PostThreadMessage なんてのがあるんですね。
メッセージキューってすべてのスレッドで自動的に
作られるんじゃないんですか?

>>480
どうもです。こっちはペゾルドにも書いてありますた。
0483あNGNG
>>482
それは失礼しますた。

ちょっと強引だが、
Windowsでは、プロセスに自動的にメッセージが「送られて」くるが
それを 「受け取る」&「中身を見る」のは、プログラマの仕事です。
あくまでイメージね。
0484デフォルトの名無しさんNGNG
>>482
メッセージキューは自動的に作成されるが、
スレッドを生成したら自動的にメッセージキューが作成されるわけではないので注意。
ヘルプとか見ると受け取りスレッド側でAPI関数を呼べば自動的に作成されるようだが、
全てのAPI関数がそうなのかはよくわからん(藁)
一番確実なのは受け取りスレッド側でPeekMessage()を呼べはメッセージキューが作成される。
0485デフォルトの名無しさんNGNG
個人的にはPostThreadMessageはお勧めしない。
見えないウィンドウを作ってそのウィンドウにPostMessage
する方が紛れがない。
思わぬAPIがスレッドのメインウィンドウの存在を前提に
してたりする、んじゃなかったかな。
0486デフォルトの名無しさんNGNG
>>485
なるほど。つまりメッセージでコントロールするなら、
わざわざ新規スレッドで作る必要は無いってこと
なのかな。

それとも新スレ作ってもhInstanceで何かのウインドウを
作るべきってこと?
0487デフォルトの名無しさんNGNG
>>485
あ、すんません。理解しました。
ウインドウ作ると SendMessageが使えるってことですね。
0488デフォルトの名無しさんNGNG
最近プログラミング覚えようとおもったものです。
Visual Studio 6.0はあるんですが、Visual Studio NETって買う必要ありますか?
0489デフォルトの名無しさんNGNG
無いです。もうすぐVisualStudio.NET2003が出ます。
0490488NGNG
>>489
VisualStudio.NET2003は買ったほうがいいということでしょうか。
0491デフォルトの名無しさんNGNG
>>490
現状と予算と目的次第。
0492デフォルトの名無しさんNGNG
プログラミング覚えるならVS6.0で充分
0493デフォルトの名無しさんNGNG
というか覚えようと思ってる段階なのにVS6.0をすでに持ってるってのが怪しい
0494485NGNG
>>486-487
新規スレッドの先頭でCreateWindowするってこと。
まあ面倒だし、PostThreadMessageってのは
そういう面倒なことをなくすためのAPIじゃないのかって
話もあるだろうけどね。

待てよ。そこまで気にするならイベントオブジェクトを
使って自前でキューを実装した方がいいかも。
うん、そうだ。その方がいい。
0495デフォルトの名無しさんNGNG
他のプログラムの起動とともに処理を開始して、終了したら処理をとめるような
プログラムを組みたいのですが、この場合グローバルフック使ってメッセージを
監視するのでいいのでしょうか?
他にもっと簡単な方法はありますか? 諸先輩方、アドバイスお願いします。
0496山崎渉NGNG
   ∧_∧
  (  ^^ )< ぬるぽ(^^)
0497山崎渉NGNG
   ∧_∧
  (  ^^ )< ぬるぽ(^^)
0498デフォルトの名無しさんNGNG
厨な質問ですが、
m=objFolder.SubFolders.Count
としたとき、mにはフォルダの個数がはいるのですが、
m=objFolder.SubFolders
ならmにはなにがはいるんでしょう?
0499ネタにマジレスNGNG
>>498
ほんとに厨だな。
objFolderの型情報さえも書いてない。
MSDN調べろよ。
0500デフォルトの名無しさんNGNG
>>498
ちゃんとした参考書を1冊こなせば、
そういう質問はでてこないはず。
0501デフォルトの名無しさん NGNG
Visual C++6.0を日本橋まで意気揚揚と買いに行ったら
プロフェショナルしか売ってなかった・・・・・(しかも一店だけ)。ヽ(`Д´)ノウワァァァァン
早く.NETが使える環境になりてぇ・・・(;_;)
0502デフォルトの名無しさんNGNG
.NETなんか(゚�听)イラネ
0503デフォルトの名無しさんNGNG
Professionalでいいじゃん……
0504デフォルトの名無しさんNGNG
managedはイラネけどVC++.NET2003はホスィ。
0505デフォルトの名無しさんNGNG
MFCって進化してるの?
0506.NGNG
漏前らに質問があります。
まずは何でも良いからフォルダを開きます。
アドレスバーにはデスクトップ、マイコンピュータ、3.5インチFD、、、
と続いていますが、ここでデスクトップを選びます。
このデスクトップをプログラムで開く方法を教えて下さい。

ちなみに
C:\Documents and Settings\administrator\デスクトップ
などではありません。

環境:Win2000Pro、VisualC++6.0
0507デフォルトの名無しさんNGNG
>アドレスバーにはデスクトップ、マイコンピュータ、3.5インチFD、、、
>と続いていますが
続いていません
〜終了〜
0508デフォルトの名無しさんNGNG
>>506
言わんとすることがよく分からん。
0509.NGNG
>>507-508
ではCドライブを開いてから、Backspaceキーを2回押してください。
デスクトップが開かれるはずです。その事です。
0510デフォルトの名無しさんNGNG
>>509
>何でも良いから
とりあえずここから修正しろ
0511デフォルトの名無しさんNGNG
SHGetDesktopFolderの事か?
0512C言語GW宿題NGNG
下記の入園料金を計算するプログラムを作成しなさい。
ユーザーに大人の人数と子供の人数を入力してもらい、
大人は一人1000円、子供は300円で合計を算出し、結果を表示する。
0513デフォルトの名無しさんNGNG
ShellExecuteで
"start C:\Documents and Settings\administrator\デスクトップ "
とかそういうのじゃないだろうなあ。
厨房様は何が言いたいのかさっぱりわからん。
0514デフォルトの名無しさんNGNG
>>512
氏ね

C/C++の宿題やらせてください。おながいします
http://pc2.2ch.net/test/read.cgi/tech/1045074808/l50
0515デフォルトの名無しさんNGNG
>>514
優しいな(・∀・)
0516デフォルトの名無しさんNGNG
>>506
ttp://www.hidecnet.ne.jp/~sinzan/tips/win/win_tip24.htm
0517デフォルトの名無しさんNGNG
VC++6でSTLを使っているのですが、コンパイル時に

 デバッグ情報で識別子が 255 文字に切り捨てられました。

というwarningがいくつもでて煩わしく思ってます。
このwarningだけ表示させないようにすることはできないでしょうか?
0518デフォルトの名無しさんNGNG
256文字以上もある識別子?あほですか?
0519デフォルトの名無しさんNGNG
//stdafx.h
#ifdef NDEBUG
#undef _STLP_DEBUG
#undef _STLP_DEBUG_ALLOC
#else
#pragma warning(disable:4786)
#define _STLP_DEBUG 1
#define _STLP_DEBUG_ALLOC 1 //or #undef
#endif
0520デフォルトの名無しさんNGNG
つーか、単なるSTLなら_STLP関係いらねーや。
0521デフォルトの名無しさんNGNG
>>517
どんな識別子使ってるんだ?
0522デフォルトの名無しさんNGNG
>>518
あほ発見
0523デフォルトの名無しさんNGNG
>>521
STLがソースの中で使ってるんだよ。
0524デフォルトの名無しさんNGNG
世の中って想像以上にあほが多いんだな
>>518 >>521
0525デフォルトの名無しさんNGNG
おまいら、C++を使うなら STL(STLPort) ぐらい嫉妬家!
0526517NGNG
>>519
それらを埋め込むことで表示されなくなりました。
ありがとうございます。
0527デフォルトの名無しさんNGNG
俺も517と同じ警告出てた
リリースモードではでないけど

519のコード埋めればいいんだね?

STLPortは知らんかった
ちょっと調べてみようかな
0528デフォルトの名無しさんNGNG
517のコード入れてみたけど相変わらず警告が
何がいけないのやら・・・
0529デフォルトの名無しさんNGNG
>>528
stdafx.hの上の方に入れてみろ。
#pragma warning(disable:4786)の一行だけでいいと思うけど。
0530デフォルトの名無しさんNGNG
>>528
何の警告よ
0531デフォルトの名無しさんNGNG
MFCアプリケーションウィザードで作った
SDIのCEditViewを使ってプログラムしてるんですが
何かちょっと編集して×ボタンを押すと
「Save changes to Untitled?」
っていうメッセージボックスがでるんですが
そのメッセージを出さないようにするには
どうすればいいんでしょうか?

0532デフォルトの名無しさんNGNG
>>531
セーブしなくて良いってこと?

0533531NGNG
>>532
ただログをEditViewにダラダラ出してくだけなんで
セーブの警告なんていらないんです。
よろしくお願いします。
0534デフォルトの名無しさんNGNG
>>533
Doc-View使ってる?だとすれば、
とりあえず↓のようにCDcoument::SetModified()をオーバーライドすればできる。
やったことないから、もしかしたら他にいい方法あるかも。

BOOL CHogeDoc::SaveModified()
{
return TRUE;
}
0535531NGNG
>>534
ありがとうございました!
できました!
0536デフォルトの名無しさんNGNG
別アプリケーションの、
特定のウィンドウにフォーカスを変更したいのですが、
どうすればいいのでしょうか?
0537デフォルトの名無しさんNGNG
別アプリのウィンドウのフォーカス取得
↓
SetFocus
0538デフォルトの名無しさんNGNG
>>530
黙れ
0539デフォルトの名無しさんNGNG
>>518=>>521=>>530なのかな
0540デフォルトの名無しさんNGNG
APIの SendKeys や keybd_event は Win2000、XPではNumLockやEnterキー押下に問題があるのでしょうか?

SendInput を使えということですが....
0541540NGNG
>>540
すみません
誤爆です
0542デフォルトの名無しさんNGNG
536ぢゃないけど・・

>>537
これウインドウハンドルが必要でしょ。
ウインドウクラス名とかまで分かっていれば探すことも
できるけど、ソースの分からないアプリの場合は
どうすればできるのかな。

0543デフォルトの名無しさんNGNG
Use Spy++.
0544デフォルトの名無しさんNGNG
アプリA 他人が作った普通のWinアプリ
アプリB 他人が作ったゲームなどDirectXフルスクリーン(排他)
自作アプリC

アプリBを「フォアグラウンドのまま」、自作アプリCからキーフックを使ってアプリAのダイアログにメッセージを送っています。(SendMessage,,,WM_SETTEXTで)

さらにアプリBが「フォアグラウンドのまま」そのアプリAのダイアログでリターンキーを押したいのですがこれは可能でしょうか?
0545デフォルトの名無しさんNGNG
1ダイアログに255個以上のコントロールが貼り付けられないのですが仕様ですか?
0546デフォルトの名無しさんNGNG
DirectInput等つかってなければ、可能ナリ。
0547デフォルトの名無しさんNGNG
すいません。教えてください。

BOOL型のメンバ変数m_Tempを追加したのですが、
ソースにカーソルを当てると、ポップアップで
int CTestView::m_Temp
とINT型で表示されるのですが、BOOL型なのになぜINTなのでしょうか?

例えば、
if(m_Temp == true){ ・・・ と記述すると以下の警告がでます。
「warning C4805: '==' : 演算中の 'int' 型と 'const bool' 型の混用は安全ではありません」

#define TRUE 1 が、Afxstd.hで宣言されてるので、
if(m_Temp == TRUE){・・・ と記述すれば警告はでなくなるのですが
なんか胸の中がすっきりしません。どういう事なのでしょうか?
0548547NGNG
ちょっと訂正します
誤 #define TRUE 1 が、Afxstd.hで宣言されてるので、
正 #define TRUE 1 が、AFX.Hで宣言されてるので、
0549デフォルトの名無しさんNGNG
>>547
bool = 1bit
BOOL = int = 32bit

という説明でよろしいか?
0550デフォルトの名無しさんNGNG
>>549
ありがとうございます!!!なるほど納得&警告でなくなりました!
0551デフォルトの名無しさんNGNG
気持ちわかる↓
>なんか胸の中がすっきりしません

BOOLをboolする関数でも組めば?

inline bool BOOL2bool(BOOL f)
{
  return (f == TRUE) ? true : false;
}

inline BOOL bool2BOOL(bool f)
{
  return (f == true) ? TRUE : FALSE;
}
0552デフォルトの名無しさんNGNG
>>544
Aのダイアログにメッセージが送れるなら、Aのダイアログのボタンで生成
されるメッセージをそのまま送るわけにはイカんのですか?

0553デフォルトの名無しさんNGNG
>>551
レスどうもです。そういうやり方もあるんですね。参考になりました。
0554本7 ◆HON7/awDa. NGNG
金ないんでVC++4.0でがんばってます。
winsockでTCPソケット通信でtelnetサーバを作りたいです。
ソケットを起動(っていうんですか?)して > 接続要求待ち >
要求があれば > サーバの紹介文を送りログインを求める  >
パスワードが照合すればクライアントにDOS画面を送る

というのはどういう流れにすればよいですか?関数とかも挙げて説
明頂けるとありがたいです。よろしくお願いします。
0555デフォルトの名無しさんNGNG
>>545
仕様。
自前でCreateしる。
0556デフォルトの名無しさんNGNG
>>554
とりあえず、それ用の本買うことをお勧めする。
ここで聞いて理解できるようなら、たぶんで作成できるだろうし・・・。

金ないならネットで検索しとけー。
レス1つや2つで終わるような話じゃないと思うぞー。
なんせ、それだけで本1冊かけるしな。

ネットワーク質問スレの過去ログ全部読んでみるのもいいのでは?
0557デフォルトの名無しさんNGNG
ttp://www.google.co.jp/search?hl=ja&inlang=ja&ie=Shift_JIS&q=winsock%83v%83%8D%83O%83%89%83%7E%83%93%83O&lr=
0558本7 ◆HON7/awDa. NGNG
ありがとうございます。いろいろ試してがんばまります。
0559デフォルトの名無しさんNGNG
>>551
>return (f == TRUE) ? true : false;
( ´_ゝ`) フーン
0560デフォルトの名無しさんNGNG
ってか両方とも==で比較しなくていいよね
0561デフォルトの名無しさんNGNG
ってかキャストでいいよね
0562名無し@沢村NGNG
>>551
そのコード、バグの温床だな。
0563デフォルトの名無しさんNGNG
「BOOLはint」って話の流れで「f == TRUE」は無いよね
0564デフォルトの名無しさんNGNG

つか、 true と TRUE を使い分ければ良い話でわ?
わざわざ変換関数必要なん?

0565デフォルトの名無しさんNGNG
>>564
STLとか使って普通にWindowsプログラミングをしていたら必要になってくるだろ、ボケ。
0566デフォルトの名無しさんNGNG
>>565
簡単な例出してみ。総ツッコミ入るだろうけど。
0567デフォルトの名無しさんNGNG
>>565
簡単な例出してみ(ゲラ 総ツッコミ入るだろうけど(嘲笑激藁
0568デフォルトの名無しさんNGNG
教訓:ここは初心者に教えるスレであって、初心者が知ったかするスレではない。
0569デフォルトの名無しさんNGNG
全然Visual C++関係ないじゃないか・・・
0570デフォルトの名無しさんNGNG
>>566

std::bitset<10> aho;
aho.set(0, ::IsWindowEnabled(hWnd));

さあ、ツッコミ入れろ。vector<BOOL>にしろとか言うなよ。
0571デフォルトの名無しさんNGNG
唐突ですみませんがgetmemoryってどういうことなんでしょうか?
0572デフォルトの名無しさんNGNG
>>570
ツッコミも何もそのコード自身、変換関数なんて使ってないじゃん。
0573デフォルトの名無しさんNGNG
今までの流れ
>>564「わざわざbool<->BOOL変換関数必要なん?」
  ↓
>>565「STLとか使って普通にWindowsプログラミングしてたら変換関数が必要だろボケ」
  ↓
>>566「変換関数が必要になる例出してみ」
  ↓
>>570「std::bitset<10> aho; aho.set(0, ::IsWindowEnabled(hWnd));」
  ↓
>>572「どこにも変換関数使って無いじゃん(;´Д`)」
0574ドアフォ。NGNG
あんのー、Visual BasicとBasicだけ微妙に触ったことある程度のド素人なんだけど、
せっかくMicrosoft Visual C++ 6.0も入ってるのに学校ではやらないそうなんです。
で、個人的に勉強してみようとあっちこっちの初心者向け回ってるんですが、
どうやったらプログラム作り始められるかがわかりません!!w

とりあえずファイル>新規作成>Win32 Console ApplicationでDOS窓用、
Win32 ApplicationでWindowsプログラムってのはなんとなくわかったんだけど・・・
File ViewでSource Filesって書いてあるのがコード書いたのを保存するフォルダ?
あーわけワカメ。
0575デフォルトの名無しさんNGNG
>>574
本買え
0576デフォルトの名無しさんNGNG
warning C4805

を出したくないだけでしょ。
0577デフォルトの名無しさんNGNG
>>560

会社だと

bool fHantei = 判定関数;
:
:
:
if(!fHantei){ //←ここ
:
}

こういう書き方はダメなところが多いと思うけど。
C#でもこういう書き方はErrorになるはず。
0578デフォルトの名無しさんNGNG
==TRUEはもっとダメ。
0579デフォルトの名無しさんNGNG
漏れの同僚に

#define NULLPO 0

HANDLE *pHandle = GetHandle();
if(pHandle == NULLPO){
 MessageBox("ぬるぽ!");
 exit(0);
}

ってやるやつがいます。
0580デフォルトの名無しさんNGNG
外出みたいだけどもう一度

BOOL型を返す関数でFALSEがエラー
FALSE以外が正常ってのがあったような気がするから

BOOL B;
...
if(B == TRUE)はやってはいけないと
やるなら
if(B == FALSE)
if(B != FALSE)
みたいに
0581デフォルトの名無しさんNGNG
ガイシュツのものをなぜわざわざもう一度書くのだろうか?
■ このスレッドは過去ログ倉庫に格納されています