■ VisualC++(MFC限定)相談室 MFC10.dll■

このエントリーをはてなブックマークに追加
>>912
再描画時の背景消去が原因

>>915
再描画時に背景消去をさせないにはどうすればいいですか?
>>916
OnEraseBkgnd をオーバーライドしる!
>>916
InvalidateRect(NULL,FALSE);
2番目の引数をFALSEで背景消去抑制
>>911
フォントサイズをとる方法なら
MSFlexGrid.GetCellFontSize
で各セルのフォントのサイズが取れる
viewからMainFrameのポインタを取得するにはどうすればいいですか?
921デフォルトの名無しさん:04/06/19 17:31
>>912
CRectTracker
>>920
AfxGetMainWnd
923デフォルトの名無しさん:04/06/19 18:59
SDIにスクロールバーをつけたいのですが最初のAppWizardとかで設定しておかないとだめですか?
そんなことないよ〜
>>923
あ、簡単なペイントソフト作ってる人じゃないか?
>>923
新規プロジェクトでCScrollViewにして作成して
今のCViewプロジェクトと変化している部分を変えたり追加するのが
一番簡単
気をつけるのは、基底クラスを呼び出している部分とか
メッセージマップの基底クラス部分とかね
C++.net使用しています。
質問なんですが
for(int i=0; ...
みたいにiを定義すると標準C++ではfor文のブロック内のみが
スコープになると思うのですが、.netだと外側からも見えるようです。
これを標準C++仕様にするにはどうしたらいいのでしょうか?
forの外にも定義しておく
929デフォルトの名無しさん:04/06/19 23:11
>>927
#define for if(false) else for
>>927
そうそうfor文のスコープはなにかがおかしい。オレもこれではまったことがある。
for( int i=0; ...) {statementA}
for( int i=0; ...) {statementB}
ってやると、statementBにAのiが影響していた。詳しく調べなかったのでこれ以上のことは判らない。
>>930
詳しく調べてくれ、気になる・・・
後のfor文のi=0の初期化は無視か?
932デフォルトの名無しさん:04/06/19 23:28
/Zc
{
 for(int i=0;...){ }
}

コンパイルオプションでも直せるらしいけど、
それはそれで不都合があるらしいので、
こうするといいよ。
934デフォルトの名無しさん:04/06/20 00:04
MFC でwebブラウザつくりたいのですが
わかりやすく載ってるサイトとかないですか?
おかしいと思ったら、曖昧な記述じゃなくて、
はっきりコーディングレベルで明快に書けばいいのに。。。
なんで、そんなに書き方にこだわるんだろう。
936デフォルトの名無しさん:04/06/20 00:08
>>935
んだな
組み込み用のクロスとかローカルルール満載の処理系はよくある
割り切らねーと仕事にならん

int i=1;
for(int i=0;;){break;}
std::cout << i; // iは0

二重定義でエラーにはならないけど
同一のiを意味するという・・・なんとも不可思議だ
938サザエサング:04/06/20 00:24
>>934
マジレスすると、ウィザードで基本のビュークラスを
CHtmlViewにしてスケルトンを作ったら、
すぐにビルドして実行しろ。
それでブラウザは完成だ。
939デフォルトの名無しさん:04/06/20 00:26
>>938
せめてアドレスバーつけたいんですけど
>>939
じゃ、ダイアログバーにコンボボックスあたりつければOK
941デフォルトの名無しさん:04/06/20 20:09
あらかじめ用意されているDLLを、
自分のプロジェクトで参照して、DLLの関数を使用したいのですが、
どうしたらよいでしょうか?

プロジェクト設定のリンクにDLL名を入れたのですが、
ファイルが無効か壊れているってメッセージがでてしまうので、
やり方が間違っているようなのですが、
どうやって参照させたらよいでしょうか?
942デフォルトの名無しさん:04/06/20 20:16
>>941
インポートライブラリ
>>941
DLLの使い方は、起動時に自動的にロードして使うやり方と自分でロードして使うやり方がある。
起動時にロードするためには、DLLと一緒に配布されているlibファイル
を実行ファイルにリンクしないといけない
もしDLLにlibファイルがついていないならば、自分でロードして使えということだろう
その方法についてはLoadLibraryというAPIを調べてみればよい
944デフォルトの名無しさん:04/06/21 01:57
> プロジェクト設定のリンクにDLL名
・・・LIB名(拡張子=.lib)

持ってない場合
A.>>943 の方法
B.DLLの提供元にねだる
C.DLLの作り損ない
SP6にしてからリソースエディタでダイアログのサイズをドラッグして変更
しようとしても、輪郭のところをマウスで掴めなくなってしまったのですが
どうしたらマウスで掴めるようになるでしょうか。
ShiftKey+矢印Keyで一応サイズ変更はできるのですが、いったい何が
どうなっているのか・・・
946デフォルトの名無しさん:04/06/21 23:29
ダイアログフォームを最大化した時に、
ListBoxやTabコントロールも一緒にリサイズさせたいのですが、
GetClientRectでフォームのサイズをとったあと、
どうやって設定させたらよいでしょうか?
SetClientRectってないし・・・
movewindow
948デフォルトの名無しさん:04/06/21 23:48
>>947
OnSizeでは、CX,CYしか取れないのですが、
MoveWindowを使うときにはX,Yも必要らしいのですが、
X,Yはどうやってとったら良いでしょうか?
自分で計算しろ
>>946
まともなリサイズ処理ははそれなりに複雑だよ
codeguruとかcodeprojectで、resizable dialogの
言葉に引っかかりそうなソースを読んでみたら?
GetWindowRect、GetClientRect、ScreenToClient
この辺の意味をちゃんと理解しておれば、リサイズなんて怖くねーべ。
私ゃCodeGuruで見つけたResizerってのをベースに使ってるよ。
953829:04/06/22 03:43
WTLだと一発なのにね
954950:04/06/22 09:31
>>951
単純な拡大縮小ならそれほどでもないけど
コントロール同士の関係を含めてのリサイズの場合結構複雑になるよ
946がどこまで求めているかは知らないけれど
955デフォルトの名無しさん:04/06/22 16:03
CListを入れ子にして使ったら
c:\Program Files\Microsoft Visual Studio .NET\Vc7\atlmfc\include\afxtempl.h(1159): error C2582: 'operator '=' 関数を 'MDB' で使用できません。
と言われました
CListから生成したオブジェクトの中でCListを使うことはできないのでしょうか?
以下のような感じでソースをかいてみました
956955:04/06/22 16:04
typedef struct Seqnoinfo{
int Seqno;
int Rcvsize;
int Type;
}Seqnoinfo;

typedef struct MDB{
int No;
int Done;
CList<Seqnoinfo> Silist;
int Mtopaddr;
int Msize;
int Rcvsize;
}MDB;

957955:04/06/22 16:04
class CMemBuf
{
public:
CMemBuf(void);
~CMemBuf(void);
int Send(void);
int Run(int startaddr);
int Add(CCmdBuf&CmdBuf);
int Getcmdlen(DWORD cmd);
char* Getcmdname(DWORD cmd);
void Clear(void);
void Reset(void);
DWORD* TmpBuf;
DWORD* SendBuf;
int BufN;
int Maddr;
int Up;
CList<MDB,MDB&> MDBlist;
};
958955:04/06/22 16:05
何かアドバイスなどありましたらご教授お願いします
MDB構造体に
operator=を定義して
CList間の=を明確化してあげればいい
960955:04/06/22 20:45
ありがとうございます。
うまく出来ました
961デフォルトの名無しさん:04/06/22 21:41
>>950-954
どもです。
コントロールを含めてのリサイズだったので、結構参りましたが、
なんとかなりました。
情報ありがとうございます。
962955:04/06/23 01:48
>>959
ありがとうございました。

>>960,961
どなた?
すみません、VC++.Net2003でソリューションのmakefileをエクスポートしたいんですがどうすればよいですか?
964デフォルトの名無しさん
CStringの文字を数値に変換するのにatoiを使ってるのですが、
これの例外って、どうやって取ったらよいでしょうか?