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

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

レス数が950を超えています。1000を超えると書き込みができなくなります。
0001987NGNG
タイトルのとおり、
Visual C++ 初心者用スレッドです。

前スレ・関連スレは、>>2 ぐらい。
0850デフォルトの名無しさんNGNG
.NET買ってももMCを使わなければいいだけの話だろ
アホか?
0851デフォルトの名無しさんNGNG
そのMCというものが、.NET特有の機能のうちのひとつだということですか?
6.0+MCの機能≒.NET
ですか?
0852デフォルトの名無しさんNGNG
プログラム実行時に、無限ループを任意で抜け出して(ボタンかなんかを設定して)、
次のプログラムに進むことはできますか?
たとえば、円周率を求めてる途中でボタンを押したら、そこまで求めた
値を使って円の面積を求めるとかです。
0853デフォルトの名無しさんNGNG
raiseでシグナルを送る
0854デフォルトの名無しさんNGNG
>>852
マルチスレッドを使うとかそういうのじゃねーの?
0855デフォルトの名無しさんNGNG
GetPriorityClassでプロセスのハンドルが必要ですが
自身のプロセスの場合はwinmain関数の引数にあるhInstanceが
プロセスのハンドルになるんでしょうか?

0856デフォルトの名無しさんNGNG
CStringクラスを利用するときについて、

int型をLPCTSTR型に変換は
a.Format("%d",〜);

でできますが、その逆の
LPCTSTR型をint型に変換
はどうやるんでしょうか?
自分で関数作るしかないですか?
0857デフォルトの名無しさんNGNG
atoi
0858デフォルトの名無しさんNGNG
_ttoi
0859856NGNG
>>857
ありがとうございました。
0860デフォルトの名無しさんNGNG
くだ質で流されてしまったのでこちらで質問させていただきます。

現在VC++.NETを使って勉強しています。
ですが、参考書などは.NET以前(VC++5〜6)のものが多く、例題通りにできないこともしばしばです。
それで質問なのですが、.NETは6以前のものをすべて含んでいると考えてもよろしいのでしょうか?
.NETになってから一気にプロジェクトの作り方などが変わっているので疑問に思いました。
一応6も持っているので6以前の参考書では6を使った方がイイ、などとかはありますか?
.NETと6以前は別物と考えた方がいいのでしょうか。
0861デフォルトの名無しさんNGNG
なんで勉強段階の人が6と.NETの両方持ってるんだ?
6は何の為に持ってたの?割れ物?
0862デフォルトの名無しさんNGNG
>>861
どっちも割ってんだろ。
0863デフォルトの名無しさんNGNG
>>860
MS好きなら.NET使えばいいじゃん。
勉強で.NET持っていてわざわざVer6つか必要もないと思うが。
0864デフォルトの名無しさんNGNG
文字をTextout関数で書きたいんですけど
色を指定することはできないのでしょうか・
今のところ黒でしか表現できなくて・・
SelectObject関数を使うのでしょうか
0865デフォルトの名無しさんNGNG
>>864
文字はSetTextColor、背景はSetBkColor。
0866デフォルトの名無しさんNGNG
>>864
それくらい調べろやヴォケが!
0867860NGNG
>>863
ありがとうございます。
860で書いた通り、ちょっと例題通りにいかなかったりで勉強がしにくかったので、
ver6を使った方が効率いいのか、などと思ったもので。
今後のためにも.NETで慣れて行こうと思います。

>>861
6を手に入れたのが2000年初期でして、
その時はゲームを作りたく、知り合いに聞いてみたところVCで簡単に作れるぞ、と。
それで当時高校生だったからアカデミックを手に入れ、VCの本を買い、勉強を始めたところ、
3日で挫折。そりゃC,C++もできなきゃサパーリ。
PC関係ではない専門学校へ進んだのですが、中退し、去年の暮れ近くから
Cの勉強を本格的に始めたワケでして…現在VCをば。
0868デフォルトの名無しさんNGNG
>>860>>867 がんがれ!!
0869デフォルトの名無しさんNGNG
アカデミックバージョンだと、シェアウェアとして公開できないのですか?
0870デフォルトの名無しさんNGNG
>>867
そんなレベルなら6の参考書は6でやっとけ。
0871デフォルトの名無しさんNGNG
>>869
大丈夫
そのレベルの質問をしている時点で、
レジストしてもらえるソフトを作るのは不可能だから、悩む必要など無い
0872デフォルトの名無しさんNGNG
>>869
安心汁!
誰もお前が作ったソフトになんかレジストしないから。
0873871NGNG
おい、>>872
ケコーン
0874デフォルトの名無しさんNGNG
アカデミックバージョンだと、シェアウェアとして公開できないのですか?
0875デフォルトの名無しさんNGNG
老いた頭の回転の悪い貧乏リーマンは先が無くて大変だな。
0876デフォルトの名無しさんNGNG

土方として、どうやって生活していこうと思ってるんだ?あ?
0877デフォルトの名無しさんNGNG
>>874
むかしはできなかってkど、今は制限なしだよ。
アカデミック版でもOK!
0878デフォルトの名無しさんNGNG
>>874
大丈夫
そのレベルの質問をしている時点で、
レジストしてもらえるソフトを作るのは不可能だから、悩む必要など無い
0879デフォルトの名無しさんNGNG
>>874
安心汁!
誰もお前が作ったソフトになんかレジストしないから。
0880デフォルトの名無しさんNGNG
デジャブ?!
0881デフォルトの名無しさんNGNG
デジャヴ
0882871NGNG
ヒデブ
0883デフォルトの名無しさんNGNG

OSのファイル/ファイルシステムに拡張情報を埋め込むことって
できないものですかね。

特にmp3などの管理を想定しているのですが、漢字ファイルネーム
の他に、ふりがな情報を埋め込めると管理や検索が楽になると
思うんですよね。他にはmp3に限りませんがCRC情報なども管理
できるといいと思うのですが。

ファイルのお尻に埋め込むことも可能だと思いますが、これだと
Winampなんかで再生できるのかどうか。各フォルダに隠しファイル
を置いて、管理する方法も考えてみましたが、エクスプローラで
ファイルを移動させたときに整合性を取るのが面倒だなと。

なんか良い方法ないもんですかねぇ。

0884デフォルトの名無しさんNGNG
mp3のフォーマット自体に情報を埋め込むためのタグがある
0885デフォルトの名無しさんNGNG
>>883
Mac 使えば。
0886デフォルトの名無しさんNGNG
>>883
NTFS使え。
0887デフォルトの名無しさんNGNG
>>883
IPropertySetStorage
IPropertyStorage
0888デフォルトの名無しさんNGNG
おせてくださーい!
シェルでDSWファイルをダブクリするとVCが立ち上がりますが、既存の
VCが閉じられてしまいます。別のプロセスとして立ち上げたいのですが
方法はあるのでしょうか?
0889名無し@沢村NGNG
>>888
ヌヒよ、VCを立ち上げてからプロジェクトを開けばいいだけだと思うが
0890デフォルトの名無しさんNGNG
沢村に教えてもらうとは…
プログラムをやめることを考えた方がいいかもよ
0891888NGNG
>>889
シェルからじゃ無理なんですかね。
オプションで「別のプロセスとして起動する」とかありそうな
気がしたのですがなさそうなので。。。
0892デフォルトの名無しさんNGNG
あるプロジェクト内で作ったクラスを、また別のプロジェクトで利用するには、
どんな手順でやればできるのでしょうか?
0893デフォルトの名無しさんNGNG
>>892
クラスのcppとhをその別のプロジェクトに含めれば良いだけじゃん?
0894デフォルトの名無しさんNGNG
>>888=>>891
当方、Win98・VC6ですが、以下のようにして出来ました。
(なんで出来るのかは理由はわかりませんが)

1)エクスプローラーでメニューから[表示]-[フォルダオプション]を選択
2)[ファイルの種類]のタブを開く
3)リストから「プロジェクトワークスペース」というのを選択して[編集]ボタンを押す
4)アクションの「MSDEVで開く」を選択して[編集]ボタンを押す
5)[DDEを使用する]のチェックを外す
※注意
チェックを外すと、デフォルトの文字列が消えてしまいます。
一応メモっておいてから外してください。
っていうか、自分が元に戻せなくなってしまいました
「DDEメッセージ」
「アプリケーション」
「DDEアプリケーションを実行していないとき」
「トピック」
のデフォルトの文字列を教えてください。
0895デフォルトの名無しさんNGNG
(;´Д`)…
0896894NGNG
おーい>>888=>>891、もういないのか
戻せねーよ、早く教えろよ!

親切心が仇に…
0897デフォルトの名無しさんNGNG
VC++.NETはC99に対応していますか?
0898888NGNG
>>894
すいませーん。
もうじき書きまーす!
0899デフォルトの名無しさんNGNG
2003は対応してる
0900894NGNG
マテゴルァ->>888! /\
      ヽ(`Д´)ノ  \/\
       (894)        \/\
      /\< ヽ  \    /    \/\
    /    \  |  \  |\    /    \/\
    |\    /  .|       \  |\    /    \ /\
   / \ \/    |             \  |\   /    \/\
 /    \ |    .|     ( ´_ゝ`)フーン     \ |\   /    \/\
 |\    /|     |   ./ (∩∩ )              \|\    /    \
 |  \ //\      |\     /|                \ /        \
 |   |/    \     |   \ /  .|        ウワァン!/\           >
 |   \    /|     |   |    |     ヽ(`Д´)ノ  /    \       / .|
 |     \ //\       |        / (888)  \       \   /    |
 |      |/   \        /\ /    < ヽミ3 \     /| /     |
 |      \    /|   /\/    \      \    /|   /         |
 |        \ //\/    \     \     /|  /                |
 |         |/   \     \    / | /                    |
 |         \     \   / | /                         .|
 |           \    /| /                              .|
 |            \ /                                  |
 |              .|                                   |

0901デフォルトの名無しさんNGNG
2002年発売の製品なのに1999年の規格に対応していないんだ(;´Д`)
0902888NGNG
>>894
どうもありがとう。
僕のはXpなのですが同じようなダイアログが出ました。
下がDDEを使うにチェックが付いているときの状態です。
結果はまた報告しますネ。
すんまそーん。

・DDEメッセージ(D);
Open("%1")

・アプリケーション(C);
msdev

・DDEアプリケーションが実行していないとき(N)

・トピック(T)
system
0903デフォルトの名無しさんNGNG
>>901
対応しなくても誰も困らないから
0904894NGNG
>>902
戻ったよ。これで、おあいこ。
一応出来るけど、他の影響があるかもしれないから
元に戻せるようにしておいた方がいいですよ。
0905892NGNG
>>893
その含め方なんですが、cppとhを利用したいプロジェクトのフォルダ内に
入れた後がわからないんです。
例えば、A.cppとA.hというのがあってそれを、B.cppで利用したいときは、
B.cppで、#include "A.h"と書くだけでは、CAクラスはまだ使えないですよね?
0906デフォルトの名無しさんNGNG
プロジェクト -> プロジェクトへ追加 -> ファイル
0907888NGNG
>>894
お手数かけさしてしまってすんませんでした。m(__)m
VS6.0とVS2002が両方入ってて今設定中です。
(楽しいAAも)どうもありがとう。。。
0908892NGNG
>>906
ありがとうございますた。m(__)m
0909デフォルトの名無しさんNGNG
VC++でTCPを利用して通信をしようとしています。
socket(PF_INET, SOCK_STREAM, 0);
でソケットを生成してread待ちするサーバを作成しているのですが、
相手先をANYにしている為相手のIPアドレスがわかりません。
受信したデータのIPアドレスを知る方法はありますか?
又、VCでソケット通信するコーディングは合っていますか?
もっと単純にTCPで通信する方法などあったら教えて下さい。
0910デフォルトの名無しさんNGNG
getsocknameとか。
0911909NGNG
>>910
これって自局IPアドレスを取得するだけではないのですか?
0912デフォルトの名無しさんNGNG
WinMXの検索ウィンドウのリストビューって+クリックで展開できますよね?
あれどういう方法で実装するんでしょうか?
0913デフォルトの名無しさんNGNG
getpeername
0914デフォルトの名無しさんNGNG
>>912
割れですね。放置。
0915デフォルトの名無しさんNGNG
別にMXじゃなくても展開できるだろ
0916909NGNG
>>913
どうもありがとう。
でも、なんか調べるとCSocket(?)というのがあるみたいですね。
これは使い易いのでしょうか?
当方UNIX系のソケットプログラミングしかしたことないもので…。
0917デフォルトの名無しさんNGNG
MFCのCSocketなら、捨てとけ。
0918デフォルトの名無しさんNGNG
エディットボックスm_ed1内に記入された値を16進データとして吸い出すにはどうしたらよいのでしょう??

BYTE dat=static_cast<BYTE>(m_ed1)

でいいんですかね??
0919デフォルトの名無しさんNGNG
BYTE型に16進などという定義はない
0920デフォルトの名無しさんNGNG
std::runtime_errorを派生したいんですが、
なんかコンパイルエラーの嵐です。
サンプルきぼんぬ。
0921デフォルトの名無しさんNGNG
良心的なアダルトだ
http://homepage3.nifty.com/coco-nut/
0922デフォルトの名無しさんNGNG
Ctrl+Alt+Delを押して出るタスクマネージャのアプリケーションに表示されるような
項目一覧を取得したいのですが、どうすればいいのでしょうか?
EnumWindowsとEnumWindowsProcを使用して試してみると、
なんか予想外にたくさんのウインドウが列挙されて困っています。
0923デフォルトの名無しさんNGNG
#include <stdio.h>
#include <ctype.h>

#define UP_T 0
#define LOW_T 1
#define DIG_T 2
#define PUN_T 3

int main()
{
char *str = "HkJn(4Nk59gL/=s";
char buf[4][20], *bp[4];
bp[UP_T] = buf[UP_T];
bp[LOW_T] = buf[LOW_T];
bp[DIG_T] = buf[DIG_T];
bp[PUN_T] = buf[PUN_T];
0924デフォルトの名無しさんNGNG
printf("初期値:\t%s\n\n", str);
for (; *str; str++) {
if (islower(*str)) *bp[UP_T]++ = *str - 'a' + 'A';
else if (isupper(*str)) *bp[LOW_T]++ = *str - 'A' + 'a';
else if (isdigit(*str)) *bp[DIG_T]++ = *str;
else if (ispunct(*str)) *bp[PUN_T]++ = *str;
}
*bp[UP_T] = '\0';
*bp[LOW_T] = '\0';
*bp[DIG_T] = '\0';
*bp[PUN_T] = '\0';

printf("大文字:\t%s\n", buf[UP_T]);
printf("小文字:\t%s\n", buf[LOW_T]);
printf("数字:\t%s\n", buf[DIG_T]);
printf("記号:\t%s\n", buf[PUN_T]);
return 0;
}
突っ込みどころがあれば突っ込んでちょ☆
0925デフォルトの名無しさんNGNG
>>922
プロセスを列挙するってことか?
どっかにソース付きのプロセスモニターが公開されてたはず。
検索してみたけどみつからんので、とりあえずcodeguruで。

ttp://www.codeguru.com/system/SimpleProcessViewer.html

0926922NGNG
>>925
レスありがとうございます。
プロセスではなくタスクマネージャのアプリケーションタブの方の一覧を
取得したいのです。
具体的に言えば、Windowsを稼動させるといろいろなプログラムが起動、常駐すると
思いますがその中でアプリケーションとして稼動しているものです。
そのアプリケーションのWidowTextと窓ハンドルを取得したいと思ってます。
どうやればいいのか、、、。・゚・(ノД`)・゚・。
0927デフォルトの名無しさんNGNG
少し前のMSDNmagazineに載ってたような気がするけどもう書店には無いだろうしなぁ。
ウィンドウを列挙して、ある条件を満たすものだけ抜き出す。
条件は可視で、タイトル文字列数が0でなく、オーナーを持ってなく、とあとなんだっけ。
0928デフォルトの名無しさんNGNG
>>926
目的のウインドウのウインドウクラスや周辺特徴の確認
一致するウインドウを検索
そしてウインドウ配下のコントロールへウインドウメッセージを送りアイテムを取得
文字列を受け取る場合はプロセス間メモリ共有を使う必要がある
0929デフォルトの名無しさんNGNG
>>927-928
レスありがとうございます。
なるほど、一発で列挙するAPIなどはなく、列挙したウインドウの中から搾ると
いうやり方なのですね。ありがとうございました。
0930デフォルトの名無しさんNGNG
窓ハンドルを取得して画面に表示しました。
そしてボタンを押すと、その窓ハンドルの対応するウインドウを最前面に出すように
しようと思っています。

画面に表示された窓ハンドルをCString文字列として取得しました。
::BringWindowToTop(HWND hWnd)を使用したいのですが、
CString文字列で取得した窓ハンドル(200CCとか)を
HWNDにするにはどうすればいいのでしょうか?
0931デフォルトの名無しさんNGNG
文字列を数値に直せば?
0932デフォルトの名無しさんNGNG
>>930
そもそもなんで文字列で取り出すの?
0933デフォルトの名無しさんNGNG
初歩的な質問です

<include>"tt.h"

std::vector< rFont > cFONTTYPE;
std::vector< rText > cTEXTOBJ;

cTEXTOBJ[0].Init(&cFONTTYPE);


//-------------tt.h
class rFont {
  func()
//略
}

class rText :public classBase{
void* pFTYPE;//        <----ここと

public:
void Init (void* pP )//        <----;ここは
};

どういう宣言をすればいいのでしょうか?

rTextの関数の中でこういうことがしたいのですが....voidのままでは使えないし

pFTYPE(2).func();

よろしくお願いします
0934デフォルトの名無しさんNGNG
http://www.yahoo2003.com/betu/linkvp2/linkvp.html
0935デフォルトの名無しさんNGNG
ちょっと質問ですが、CStaticコントロールにラインとか描画できますか?
ソースはこんな感じで書いてます。

CStatic *s = (CStatic *)GetDlgItem( IDC_STATIC );
CDC *cdc = s->GetDC( );
cdc->MoveTo( 0, 0 );
cdc->LineTo( 40, 15 );

開発ツール:Microsoft eMbedded Visual C++ 3.0
開発環境:Windows98SE
動作環境:CASSIOPEIA PocketPC
0936デフォルトの名無しさんNGNG
>>935
拡張メタファイルを設定できるみたいだから図を拡張メタファイルにして
SetEnhMetaFile()で設定すれば(CEはしらんけど)
0937デフォルトの名無しさんNGNG
>>936
お答えどうもです。
SetEnhMetaFileの引数って静的コントロールに描画される拡張メタファイルのハンドルらしいのですが
何を設定すればいいのでしょうか?
0938デフォルトの名無しさんNGNG
>>936
CStaticの派生クラスを作って
そのOnPaint()をオーバーライドして描画とか。
0939938NGNG
↑
>>936でなくて>>935です
0940デフォルトの名無しさんNGNG
SetTimer(111, 500, NULL)
とした場合、プログラム終了、もしくはKillTimerが使われない限り
ずっと500ミリ秒おきにWM_TIMERが送られてるということなんでしょうか?
0941デフォルトの名無しさんNGNG
>940
ぐぐればいっぱつだよ(´Д`)
>ttp://sysneitf.hp.infoseek.co.jp/cbuilder_timer.html
0942デフォルトの名無しさんNGNG
クラスウィザードで例えばCStaticを継承するCStaticExなるクラスを作成した時に
フォームにCStaticExを貼り付けるにはどうしたらいいのでしょうか?
0943デフォルトの名無しさんNGNG
>>937
固定の図形なら >>936 でいいですが、動的ならだめです。
プログラムで拡張メタファイルつくるなら

CMetaFileDC mdc ;
HENHMETAFILE hemf ;
CClientDC dc(hwnd) ;

CRect rect(0, 0, 500, -500) ;
mdc.CreateEnhanced(&dc, NULL, &rect, "MyApp") ;

mdc.MoveTo( 0, 0 );
mdc.LineTo( 40, 15 );

hemf = mdc.CloseEnhanced() ;

こんな感じ。この例ではローカルにhemfを宣言してるけど
グローバルか、MFCならCxxxAppのメンバー変数にしたほうがよいです。

CxxxApp::InitInstance()の中でm_pMainWndを作った後に
CClientDC dc(m_pMainWnd) ;
でCreateEnhanced()に渡すdcを作ってメタファイルを作るのがいいタイミング。

CxxxApp::ExitInstance()をオーバーライドして
DeleteEnhMetaFile(hemf) でメタファイルを破棄する

リソースにメタファイルを含めることもできたはずだけどやり方忘れた。
0944デフォルトの名無しさんNGNG
>>943
ご丁寧にソースを書いていただき有難うございます。
早速試してみます!
0945943NGNG
>>944
忘れてたけど拡張メタファイルはマップモードが基本的にMM_HIMETRICなので
mdc.SetMapMode(MM_HIMETRIC) ;
がいるかも。rect(0, 0, 500, -500)の4つめがマイナスになってるのは
このせい、MM_HIMETRICにしないならプラスでもいいかも。
動作しているのに描画されないときはこのへんが原因になることが多い。
0946デフォルトの名無しさんNGNG
>>933
自己レス
void Init (std::vector< rFont >* pP )
こういう書き方ができるようです。

C++って偉大だな。
;
0947デフォルトの名無しさんNGNG
>>945
補足ありりんです。
気をつけまーす
0948デフォルトの名無しさんNGNG
>>942
ヘッダでCStaticで宣言されているところをCStaticExに変える
0949デフォルトの名無しさんNGNG
>>948
ヘッダって貼り付けたいフォームのヘッダーファイルですよね?
CStaticはフォームに貼ってるのですが、CStatic宣言はないのですが・・
0950デフォルトの名無しさんNGNG
いつからC++は宣言が無くてもコンパイルが通るようになったんだ?
レス数が950を超えています。1000を超えると書き込みができなくなります。