★初心者にVisual C++を教えるスレ★ Part5
■ このスレッドは過去ログ倉庫に格納されています
0001987
NGNGVisual C++ 初心者用スレッドです。
前スレ・関連スレは、>>2 ぐらい。
0385デフォルトの名無しさん
NGNGコンストラクタを呼び出されたら、クラスのインスタンスは必ずあるはずだが?
そもそもコンストラクタが呼び出されると何か問題があるの?
newも解らないようじゃ…
.NETとかVCではなくC++の参考書でも読んで勉強し直してきた方がいいですね。
0386デフォルトの名無しさん
NGNGおまえも日本語が不自由みたいだなw
0387デフォルトの名無しさん
NGNG逆にQuickCとか置いてそう
0388デフォルトの名無しさん
NGNG0389352
NGNG>名前はGUID使えばよし
ありがとうございます。GUIDってなんでしょうか?
0390デフォルトの名無しさん
NGNG脳なしに言われたないわい。
0391デフォルトの名無しさん
NGNGせめて検索くらいしろボケ
氏ね
0392デフォルトの名無しさん
NGNGCFont m_Font;
LOGFONT lf;
m_Font.GetLogFont(&lf);
上記は正常に動くのですが、lf をポインタで宣言して、
CFont m_Font;
LOGFONT* lf;
m_Font.GetLogFont(lf);
と変えるとm_Font.GetLogFont(lf);の行でエラー
「値が割り当てられていないローカルな変数 'lf' に対して参照が行われました。」
が出るのはなぜなのでしょうか?
0393デフォルトの名無しさん
NGNGちょっと考えれば当たり前だと思うけど……
GetLogFontは、与えられたポインタが指し示すメモリにフォント情報を格納するのね。
上の場合はlfという変数の領域に格納するから問題なし。
下の場合はいったいどこにフォント情報を格納すればいいのでしょうか?
0394デフォルトの名無しさん
NGNGエラーメッセージのそのまんまの意味。
lfが有効な値になっていない(実体を指していない)から。
つかこんなんC言語の基礎中の基礎だが大丈夫か?
0395デフォルトの名無しさん
NGNGその関数がどんな動きをするか考えようともしない。
0396誠心君
NGNG0397デフォルトの名無しさん
NGNG0398デフォルトの名無しさん
NGNG┌──────────┘- \
│ 外国の方が \
│ /
└──────────┐- /
ヽ(´ー`).ノ |/
( へ)
く
- = ≡三 |\
- = ≡三 ┌──────────┘- \
_ = ≡三 │ \
 ̄ = ≡三 │ いらっしゃいます /
- = ≡三 └──────────┐- /
(´ー`) - = ≡三 |/
( ヽ ヽ)
/ >
0399342
NGNGすみません。調べたんですが難しすぎてよくわかんないです。
もっと簡単なもんかと思ってたんですが…
でも、グローバル変数は普通使っちゃいけないんですね。
ド素人なもんでそんな事もしりませんでした。
一番わかりやすそうな
CTestApp のメンバ変数にして 他のクラスからは
AfxGetApp で取る事にしようと思います。
ありがとうございました。
>>347
???
0400猿
NGNGhList = GetListViewInner();// リストビューのハンドル確保
hHead = ::GetWindow(hList, GW_CHILD);// そのヘッダーのハンドル確保
LV_COLUMNを利用して項目を追加するも詳細表示の表示項目その他を選択すると
落ちてしまいます。どなたかよきアドバイスをお願いします。
やはり1から作成するしかないのでしょうか?
0401デフォルトの名無しさん
NGNGマルチうぜー
0402デフォルトの名無しさん
NGNG#include <windows.h>
int main(void)
{
char c;
char a[3]={3,4,5};
char b[3]={3,4,5};
c=strcmp(a,b);
printf("c=%d\n",c);
c=lstrcmp(a,b);
printf("c=%d\n",c);
}
aとbを比較するとき、等しい場合は0が返ってくると思うのですが何故か
c=1
c=-1
になってしまいます。何故でしょうか?
0403デフォルトの名無しさん
NGNG0404デフォルトの名無しさん
NGNG文字列になっていない(終端文字がない)から
0405デフォルトの名無しさん
NGNGレスありがとうございます。おっしゃる通りでした。
0406デフォルトの名無しさん
NGNGCString strHtmlPath = _T("C:\\tmp.html");
の _T はどういう処理をしているのでしょうか?
MSDNで調べると「データ型のマッピング」と書かれているのですが
データ型のマッピングという言葉の意味がわかりません。
_T というものはどう言うときに使うものなのでしょうか?
それから、その後に、
Navigate2(strHtmlPath, NULL, NULL);
となっているのですが、MSDNでNavigate2メンバ関数を調べると、3つにオーバーロード
されていて、どれも第一引数がポインタとなっています。
が、上記strHtmlPathは前述の通りCString型の実体として宣言されています。
これはどう言うことなのでしょうか?CString型ということが何かカギなのでしょうか?
0407デフォルトの名無しさん
NGNGMSDNにも書かれていますが、
_Tは文字列がUnicodeで記述されている場合に、
L"文字列"に置き換えて、その他の場合には
単に削除されるようです。文字列がUnicodeの場合には
L"文字列"というように最初にL(longのL)を書かないと
ダメらしい。
0408デフォルトの名無しさん
NGNG後者は
CString::operator LPCTSTR
が呼び出されているのでしょう。つまりキャストです。
しかし2番目と3番目、どっちが呼び出されているのですかね。
参照はNULLを取らないから、2番目だと思うのですが、
2番目だとすると第2、第3引数は不要ではないですかね?
0409デフォルトの名無しさん
NGNGレスありがとうございました。
ポインタを宣言してもそのポインタが指し示すアドレスがわからないという
ことですね。
0410デフォルトの名無しさん
NGNGレスありがとうございます。
C:\\ という記号の辺りがデータ型によっては特殊文字になってしまうのかな?
そこらへんが関係するのですね。調べてみます。
>>408
レスありがとうございます。
MSDNをみたら operator LPCTSTR が載っていました。
試しに
Navigate2((LPCSTR)strHtmlPath, NULL, NULL);
と記述しても動きました。
どうもありがとうございました。
0411デフォルトの名無しさん
NGNG0412デフォルトの名無しさん
NGNGあ、それからNavigate2は2番目の関数のようです。
いわれる通り、第一引数だけで残りを省略しても動作しました。
0413デフォルトの名無しさん
NGNGUnicodeご存知ないですかね。
0414デフォルトの名無しさん
NGNGが、デメリットはありますか?
0415デフォルトの名無しさん
NGNGデメリットはネタに見えることです。
0416デフォルトの名無しさん
NGNGいままで使ってきた Visual C++ の環境の設定を保存しておきたいのですが、
設定を保存しているファイルとかあるのでしょうか?
もしくは、レジストリでしょうか?
どなたか ご存知でしたら おしえていただくとありがたいです。
(黒字に白文字でないと、目がつかれたり、また その他ショートカット
なども専用に設定しているので、また、設定をする手間が省けるので、
今後のためにも 教えてください。)
0417デフォルトの名無しさん
NGNG俺は↓のレジストリから必要な部分だけを reg ファイルにして保存してる
[HKEY_CURRENT_USER\Software\Microsoft\DevStudio\6.0]
0418デフォルトの名無しさん
NGNGそういうのはすべてレジストリだと思われ。
インストールフォルダ以下をざっと探ってみたけどそれらしきものは見つからなかった。
白地に黒、って疲れるよね。
俺は画面のプロパティでウィンドウの背景色を白から薄緑にしてるよ。
他のところまで変わるのはご愛嬌……
0419414
NGNG0420デフォルトの名無しさん
NGNGプッ。
0421デフォルトの名無しさん
NGNGどなたか教えていただけないでしょうか?
#include<stdlib.h>
#include<GL/glut.h>
#include<GL/gl.h>
#include<math.h>
#define PAI 3.1415926536
void display(void)
{
int x=0.5*cos(2.0*PAI*(float)/(float)10);
int y=0.5*sin(2.0*PAI*(float)/(float)10);
int z=0.0;
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1.0,1.0,1.0);
glBegin(GL_LINE_LOOP);
glVertex3f(x,y,z);
glEnd();
glFlush();
}
0422デフォルトの名無しさん
NGNGあなたは何故エラーメッセージを書かないのですか?
0423デフォルトの名無しさん
NGNG良くわかっていないもので・・・
エラー2 警告0とかいうのは出るんですが
0424デフォルトの名無しさん
NGNG0425デフォルトの名無しさん
NGNG>エラー2 警告0
の書かれている所の右側にスクロールバーが無いか?
0426デフォルトの名無しさん
NGNG0427デフォルトの名無しさん
NGNG出力されるエラーメッセージを見ることすら出来ないのは問題外
言語以前にWindowsの基本操作からやり直した方がいい
0428デフォルトの名無しさん
NGNGエラーの場所はたぶん1桁か2桁ぐらいの数値で表示されてると思います
そしてそれは行数です
あなたに何行目でエラーが発生しているか教えてくれるでしょう
さらにエラーメッセージをダブルクリックするとそのエラーが発生した行を
反転表示してくれると期待できます
0429デフォルトの名無しさん
NGNG宿題は自分でやりましょう
0430デフォルトの名無しさん
NGNG大きく違うのですか?グラフィックは点の集まりなのだから、同じでもいいと思う
のですが。
0431デフォルトの名無しさん
NGNG禿しく同意!
0432デフォルトの名無しさん
NGNG問。
たらい一杯ぶんの水を井戸から汲み上げようと思います。
1)コップをつかって何度も何度もくみなおす
2)たらい並の容積のいれものでいっぺんに汲む
無駄なく早いのはどっち。
0433デフォルトの名無しさん
NGNGスレタイが読めない文盲の方ですか?( ´ー`)y-~~
0434デフォルトの名無しさん
NGNG( ´,_ゝ`)
0435デフォルトの名無しさん
NGNG0436デフォルトの名無しさん
NGNG物を教える時に例え話って使うだろ。
プログラミングに限らず。
てか、>>432の意味がマジでワカランかったの?
不条理な逆ギレイクナイ!
0438あぼーん
NGNGhttp://japan.pinkserver.com/yamazaki/moe/hankaku09.html
http://japan.pinkserver.com/yamazaki/moe/hankaku10.html
http://japan.pinkserver.com/yamazaki/moe/hankaku07.html
http://japan.pinkserver.com/yamazaki/moe/hankaku08.html
http://japan.pinkserver.com/yamazaki/moe/hankaku05.html
http://japan.pinkserver.com/yamazaki/moe/hankaku06.html
http://japan.pinkserver.com/yamazaki/moe/hankaku03.html
http://japan.pinkserver.com/yamazaki/moe/hankaku04.html
http://japan.pinkserver.com/yamazaki/moe/hankaku01.html
http://japan.pinkserver.com/yamazaki/moe/hankaku02.html
0439デフォルトの名無しさん
NGNG( ´_ゝ`)
0440デフォルトの名無しさん
NGNG0441430
NGNGする場合、一度半マス移動分のを表示してから、1マス移動を表示したいのですが、
マイナスの座標から表示しても(16ピクセルのセルなら8ピクセルずらし、通常17×17
セルなら18×18セルをずらして表示)大丈夫なのですか?また、他の方法があるなら
教えてください。
0442デフォルトの名無しさん
NGNGCreateDIBSection→BitBlt, StretchBltでやってる
0443デフォルトの名無しさん
NGNG(DWORD) test;
(UINT) test;
(WORD) test;
(BYTE) test;
--
(DWORD) test;
だけ型キャストの警告がでます。どうしてでしょうか?
VC7使ってます。
お願いします。
0444エラー内容も書け
NGNGどんなキャストの警告が出る?
VC6では出なかった。
もしもこういうコードを書いているなら当然だが……
LPVOID test;
DWORD test2 = (DWORD) test;
UINT test3 = (UINT) test;
WORD test4=(WORD) test;
BYTE test5=(BYTE) test;
(testが初期化されていないから値が不定。)
0445デフォルトの名無しさん
NGNG返事遅くなりましたが、どうもありがとうございました。
クリーンインストールするんで、レジストリでもなんでも 強気でいじれるので、
いろいろいじってみたいと思います。
どうも ありがとございました。
0446443
NGNGどうも
'型キャスト' : ポインタを 'LPVOID' から 'DWORD' へ切り詰めます。
ってエラーです。
sizeof で LPVOID と DWORD を調べても、両方4byteで問題ないはずなんですよね。
むしろ問題であるはずのBYTE と WORD のキャストには無警告なんですよ。
おそらくVC7だと64bitアドレスもサポートしてるんで、その性だとおもうんですが、
だとしたら、なんでBYTEとWORDへのキャストには無警告なんでしょうね・・・
0447あ
NGNGいいからソースを見せなさい。
0448443
NGNGUINT型とDWORD型のみへの警告は恐らく、旧来の手法に対する警告ってことでしょうね。
#include <windows.h>
#include <stdio.h>
void main( )
{
DWORD d; UINTui; WORD w;BYTE b;LPVOID p;
p = &d; d = (DWORD) p; ui = (UINT) p; w = (WORD) p; b = (BYTE) p;
printf( "LPVOID = %d\n", sizeof( LPVOID ) );
printf( "DWORD = %d\n", sizeof( DWORD ) );
printf( "UINT = %d\n", sizeof( UINT ) );
printf( "WORD = %d\n", sizeof( WORD ) );
printf( "BYTE = %d\n", sizeof( BYTE ) );
}
結果:LPVOID = 4,DWORD = 4,UINT = 4,WORD = 2,BYTE 1
warning C4311: '型キャスト' : ポインタを 'LPVOID' から 'DWORD' へ切り詰めます。
d = (DWORD) p;
warning C4311: '型キャスト' : ポインタを 'LPVOID' から 'UINT' へ切り詰めます。
ui = (UINT) p;
0450デフォルトの名無しさん
NGNGあらかじめ設定した文字列から
イベント取得時に変更したいのですが
どうやればいいんでしょうか?
0451デフォルトの名無しさん
NGNG0452あ
NGNG了解。
0453bloom
NGNG0454デフォルトの名無しさん
NGNGc++の決まりですか?VCの決まりですか?
template < typename T = void > class hoge 〜
template < typename T > class hoge 〜
にたいして
hoge < void > foo;は可能な様です。
0455山崎渉
NGNG0456デフォルトの名無しさん
NGNG0457454
NGNGエラーメッセージ↓
error C2182: '__formal' : 'void' 型を使って宣言されました。
0458デフォルトの名無しさん
NGNG仕方ないのでintにしてる
void *はできるかな? やってないけど
0459454
NGNGレスどうもです。
その他この他いろんな疑問(VCの不具合?)がでてきたので自分で調べる環境を整えます。
CGI作って遊んだっきりのcygwinが役に立ちそうです・・・
とりあえず立ち上げて・・・即exit。全く使い方覚えていない・・・
0460デフォルトの名無しさん
NGNG0461デフォルトの名無しさん
NGNGそんなコード作る意義あるんですかね。
0462454
NGNGテンプレートについてはかなり不充分らしいです。(特にVC6)
実際ちょっとした実験コードを書いたらすぐに壁にぶち当たりました。
んで,なれないg++で実験してみました。
メンバ関数テンプレートで
class Foo {
template <typename T> void bar(){...}
}
Foo foo;
foo.bar<hoge>();
において「<hoge>が不用です」なんて言われるのです。
g++だとOKでした。
引数でとる場合はOKなんですけどね。
class Foo {
template <typename T> void bar( T& t ){...}
}
Foo foo;
foo.bar<hoge>();
int i;
foo.bar(i)
でも自分が間違っている気がします。
0463454
NGNGModern C++ Design の第11章マルチメソッドに一つの例があります。
てゆうかこれを実験してみたかっただけなんですが。
LokiPortVC6版がホスィ。
0464デフォルトの名無しさん
NGNGつべこべ言わずにVisualStudio .NET 2003を待て。もうすぐ発売だ。
ANSI準拠度がかなり上がっているぞ。
0465デフォルトの名無しさん
NGNG0466デフォルトの名無しさん
NGNGBmInfoHed.biPlanes=1;
BmInfoHed.biBitCount=24;
for(a=0;a<16*16;a++)
{
r=rand()%64;
lpBMP[a*3]=r/16*85;
lpBMP[a*3+1]=r/4%4*85;
lpBMP[a*3+2]=r%4*85;
}
色のバイトの所を8にするとうまく色が表示されないのですが(6で足りるはずなのに)、
どうすればよいのでしょう。
0467デフォルトの名無しさん
NGNG色のバイトのところってなんじゃい。
ビットマップの構造として幅が8*nドットになるようにダミーデータが入るのと関係あるのだろうか
0468466
NGNG色のバイトの所とはBmInfoHed.biBitCount=24の所です。
再び調べてみた所、24(フルカラー)以外の場合は予め色を登録しておかなければ
ならないようです。初心者なので、質問もうまくできませんでしたが、
お答えありがとうございました。もう少し勉強してきます。
0469フルタワーが机の下に入らん
NGNGこれは x86系の CPU が 4 の倍数を計算するときだけ微妙に速くなるからです。
0470デフォルトの名無しさん
NGNGなんか大嘘をぶっこいている奴がいるんだがどうしよう
メモリのバス幅の問題とアーキテクチャの問題の近藤君がいるよ
0471デフォルトの名無しさん
NGNG0472デフォルトの名無しさん
NGNGたとえば 8 ビットカラーの場合、BITMAPINFO hoge; じゃあなくて、
LPBITMAPINFO bi = new BYTE[sizeof(BITMAPINFOHEADER) + sizeof(RGBQUAD)*256];
てな感じで clut の分も確保して、bi->bmiColors[0...255] にそれぞれの色を入れて、
bi->bmiHeader.biClrUsed = 256; とかする。
0473あ
NGNGヘルプを見る。
ちゃんと全部かいてある。
その 6ではいけない理由もな。
0474デフォルトの名無しさん
NGNGlpBMP[a*3]=r/16*85;
lpBMP[a*3+1]=r/4%4*85;
lpBMP[a*3+2]=r%4*85;
の部分
p = lpBMP;
...
*p++ =r/16*85;
*p++ =r/4%4*85;
*p++ =r%4*85;
みたいにするほうがいいよ
こっちの方が速いはず
0475デフォルトの名無しさん
NGNG0476デフォルトの名無しさん
NGNGVisualStudio6.0をセットアップする時にもWindowsNT Symbol Setup が
どうのこうのというメッセージが出ますが、これをするとどうなるのですか、
しないとどうなるのですか?
OSはWindows2000です。私はVBしか使った事がなくて、これからVCをやってみようかと
思っているのですが・・・
0477デフォルトの名無しさん
NGNGhttp://www.borland.co.jp/delphi/personal/
0478デフォルトの名無しさん
NGNGVisualC++でデバッグをするときにちょっと便利になる。
ディスク容量に余裕があるならセットアップしとけ。
…でも使ってるOSに対する正しいシンボル情報は
別途入手する必要があるかも。
まあ分からなかったら今はまだ気にしなくていい。
0479デフォルトの名無しさん
NGNGWin98/NTではすべてのスレッドが、それぞれのメッセージキューを持つ
らしいのですが、作成したスレッドにメッセージを送るにはどうしたら
いいんですか?
DWORD WINAPI ThreadFunc (LPVOID Param);
↑この関数内部で GetMessage すると、このスレッドのメッセージキューから
メッセージをGetできるってことですよね?
int WINAPI WinMain ();
の場合は hInstance を使って CreateWindow() したウインドウに対して
メッセージを送ることで、WinMain のメッセージキューに送られるみたい
ですが。
またWinMainじゃない、作成したスレッドでCreateWindow する場合は
WinMain の hInstance を使えばいいのでしょうか?
0480あ
NGNGそんなあなたに WaitForSingleObject
いまなら CreateEvent が、もれなくついてきます。
0481デフォルトの名無しさん
NGNGPostThreadMessage()で送ってGetMessage()かPeekMessage()で受け取る。
この時に気を付けなければならないのは送信先スレッドにメッセージキューが
無いとPostThreadMessage()は失敗する。
CreateMessageQueue()みたいな関数は存在しないので注意。
詳しくはヘルプ参照。
別スレッドでも基本的にWinMainのhInstanceを使用する。
0482デフォルトの名無しさん
NGNGPostThreadMessage なんてのがあるんですね。
メッセージキューってすべてのスレッドで自動的に
作られるんじゃないんですか?
>>480
どうもです。こっちはペゾルドにも書いてありますた。
0483あ
NGNGそれは失礼しますた。
ちょっと強引だが、
Windowsでは、プロセスに自動的にメッセージが「送られて」くるが
それを 「受け取る」&「中身を見る」のは、プログラマの仕事です。
あくまでイメージね。
0484デフォルトの名無しさん
NGNGメッセージキューは自動的に作成されるが、
スレッドを生成したら自動的にメッセージキューが作成されるわけではないので注意。
ヘルプとか見ると受け取りスレッド側でAPI関数を呼べば自動的に作成されるようだが、
全てのAPI関数がそうなのかはよくわからん(藁)
一番確実なのは受け取りスレッド側でPeekMessage()を呼べはメッセージキューが作成される。
0485デフォルトの名無しさん
NGNG見えないウィンドウを作ってそのウィンドウにPostMessage
する方が紛れがない。
思わぬAPIがスレッドのメインウィンドウの存在を前提に
してたりする、んじゃなかったかな。
■ このスレッドは過去ログ倉庫に格納されています