■ VisualC++(MFC限定)相談室 ■
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
NGNGMFCに限ったお話をしましょう。
ルールを提案。
Qは高度なものからくだらないものまで何でもOK。
Aは「知ってるつもり君」、「えらそうに解説する人」お断りと
いうことで。
0655デフォルトの名無しさん
NGNG0656デフォルトの名無しさん
NGNG同じだからCを勉強しなおせって事だろ。
0657デフォルトの名無しさん
NGNGサブルーチン内の変数はサブルーチンを抜けたら保証されません。
(関数だろというつっこみは禁止)
0658ツッコミ
NGNG0659うーん
NGNG3 返すんだけど、これってバグじゃないかい?
JIS X0208に付いてる資料だと、ユーザ定義文字領域?
0660デフォルトの名無しさん
NGNGの所でエラーが出てしまい、上手くいきません。何か代替
手段が無いでしょうか?
//パスワード設定
CString key="PASSWORD";
int maxpass = key.GetLength();
char password[ maxpass ];
m_pass.GetWindowText(password,maxpass);
0661デフォルトの名無しさん
NGNGエラーになる。C++の場合:
char *password = new char[....];
....
delete[] password;
とすれば動的確保になるかも。
0662デフォルトの名無しさん
NGNGあとあとのことを考えるととりあえず3日だけでも卒研を中断して
C/C++の入門書で勉強したほうがいいと思われ。
0664デフォルトの名無しさん
NGNGCStdioFile file("hoge.txt", CFile::modeWrite | CFile::modeNoTruncate);
で、オープンすると、上書き書き込みモードになってしまうようです。
0665デフォルトの名無しさん
NGNG左側のCTreeViewの中にツールバーをつけたいのですがどうやったらよいでしょうか。
CTreeViewのOnCreateでCToolBarCtrlをCreateして、
OnSizeでTreeCtrlとToolBarCtrlの位置を変更してみたのですが、
Viewの中身が描画されずうまくいきませんでした。
0666664
NGNG0667デフォルトの名無しさん
NGNG私はVisualC++で作成をしているのですが,いままでずっと
メインウィンドウのメニューやサブウィンドウのGUIの作成&設定は
VisualC++のリソースエディタを使ってこつこつ作成してきました.
ですが、最近になってツール(ポリゴンビューア)上から
インタラクティブにサブウィンドウのGUI(テキストフィールド,ボタン等)
を変更・追加・削除する機能をつけたいと思うようになりました.
具体的に似たような機能を持つMayaを例にあげて説明させてもらいます.
(Mayaをご存知でない方申し訳ないです)
MayaのAttributeEditor(サブウィンドウ)を開いてそのメニューの
”Add Attribute”でアトリビュートを追加するとAttributeEditor
に新しい項目(アトリビュート)が追加されてGUIも更新されている、
といった感じのものを作りたいと考えています。
このようなことって実現できるのでしょうか?
リソースデータ等を無理やり書き換えるプログラムを作成するのでしょうか?
それとももっとスマートな方法が存在するのでしょうか?
分かりにくい説明かもしれませんが,ご教授のほどお願いします.
0668デフォルトの名無しさん
NGNG「追加、削除」を「表示、非表示」と考えたら比較的簡単にできます。
ボタンなどのコントロールも結局CWnd派生ですから
GetDlgItemでコントロールのポインタを取得して
ShowWindowで表示、非表示、MoveWindowで位置を動的に
調整することができます。
また、メニュー項目の追加や削除なども動的に変更できます。
CMenuあたりのヘルプを見てください。
0669デフォルトの名無しさん
NGNGprocedure Tjotai_real.Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
文
end;
上の文をFormCreateで呼ぼうと思っImage1MouseDown(Sender,mbLeft,ssShift,0,0);
をしたのですが「TshiftStateとEnumerationには互換性がありません」って警告が
出ます。
どうしたら良いでしょうか?
0670669
NGNG0671デフォルトの名無しさん
NGNGWS_VSCROLLとWS_HSCROLLを指定して
生成したウィンドウをスクロールさせたいのですが、
引数で渡されるCScrollBarが死んでいる様子なので
GetScrollBarCtrlを使おうとしたら、GetScrollBarCtrlは
WS_VSCROLLで生成したスクロールバーには無効と
MSDNに書いてありました(涙)
どうやって制御したらよいのでしょうか?
本も10冊近く調べ、MSDNもしつこく調べたのですが
よくわからなくて・・
どなたか教えてください!よろしくお願い致します。
0672671
NGNG0673デフォルトの名無しさん
NGNGCScrollBar::SetScrollInfo()ではなく
CWnd::SetScrollInfo()をウィンドウ自身に対して使う。
0674671
NGNGありがとうございます!
CWnd::GetScrollInfo&SetScrollInfo&ScrollWindowでなんとなく動くようになりました。
でも、クライアント領域の再描画がうまくいきません。
調べてみます。
0675デフォルトの名無しさん
NGNGあんた、ものすごく仕事の相談してるっぽいな。
ところでGUIのボタン等はMFCでクラス化されてるんだから
動的にクラスの実体を作ればいいだけのこと。
C++から勉強し直すことをオススメするよ。
0676デフォルトの名無しさん
NGNG貴重なアドバイスありがとうございました.
確かにC++(オブジェクト指向)の理解が足りないと思います。。
どうもありがとうございました。
0677デフォルトの名無しさん
NGNG0678デフォルトの名無しさん
NGNGに現在開いているウィンドウが、自動的に追加表示されますが、
特定のウィンドウはメニューに表示されないようにしたいのですが、
どうしたらいいのでしょうか?
0679デフォルトの名無しさん
NGNGその表示したくないウィンドウを、Doc-Viewアーキテクチャ以外
(例えばモードレスダイアログとか、MDIフレームとは独立した
ChildFrameとか)で作る。
0680678じゃないけど
NGNG0681デフォルトの名無しさん
NGNGそれでうまくいきました。どうもありがとうございました。
0682デフォルトの名無しさん
NGNGAfxBeginThreadについて質問です。
下にあるソースを実行すると、
----------------------------------------------------
error C2665: 'AfxBeginThread' : 2 のオーバーロードは
1 番目の引数を 'void (void *)' から要求の型に変換できません。
----------------------------------------------------
というエラーが出てきてしまいます。
Threadをstaticで宣言しているのになぜですか?
class Caaa : public CWinApp
{
public:
void Rethread(void);
static void Thread(LPVOID p);
LPVOID pParam;
protected:
・
・
・
};
void Caaa::Rethread()
{
if (AfxBeginThread(Thread, pParam) == -1)
{
//処理
}
return ;
}
void Caaa::Thread(LPVOID p)
{
//処理
return ;
}
0683デフォルトの名無しさん
NGNG&Thread
ポインタの勉強を最初からやり直せ。
0684デフォルトの名無しさん
NGNGいやそれは別に問題なかろう。
UINT Caaa::Thread(LPVOID p)
{
//処理
return ;
}
0685デフォルトの名無しさん
NGNG型をUINTにしてみましたが、今度は
----------------------------------------------
error C2511: 'Camera_thread' : オーバーロードされたメンバ関数が
'<Unknown>' にありません。
----------------------------------------------
というエラーが出てしまいました。
class Caaa : public CWinApp
{
public:
void Rethread(UINT);
static UINT Thread(LPVOID p);
LPVOID pParam;
};
UINT Caaa::Thread(LPVOID p)
{
//処理
return ;
}
ではいけないのでしょうか?
よろしくお願い致します。
0686smat
NGNG作りたくないのですが、どうすればよいかわかりません。誰か助けて。
void CSmatPaint2Doc::Serialize(CArchive& ar)
{
if (ar.IsStoring())
{
// TODO: この位置に保存用のコードを追加してください。
}
else
{
// TODO: この位置に読み込み用のコードを追加してください。
CFile* pf=ar.GetFile();
CString fn=pf->GetFileName();
image=IeImg((LPCTSTR)fn);
if( !image->isValid() ){ //無効なイメージファイル
AfxGetMainWnd()->MessageBox("無効なイメージファイルです");
//ここで新しいドキュメントを作成せずに、閉じたい(アプリケーション
//は終了せず)のですが、その方法がわかりません。
}
else
{
//有効なイメージデータの処理
}
}
}
0687デフォルトの名無しさん
NGNGOnCloseDocument
0688smat
NGNGありがとうございます。
でも、いきなりOnCloseDocument()を呼び出すと、
不正な処理...のDialogBox
↓
ハンドルされていない例外はSmatPaint2.exeにあります。:0xc0000005:Access Violation
↓
メモリウィンドウが出てくる(文字が灰色で???)
の様になってしまいます。MSDNを見る限りでは何の問題もなさそうなのですけど。
ついでに、起動時に子ウィンドウを出さない様にするにはどうすればよいのでしょうか?
・OnNewDocumentのインプリメントをコメントアウトしてもダメ。
・OnNewDocument()の中でOnCloseDocument()を呼び出ししたら氏んでしまう。
0689デフォルトの名無しさん
NGNGOnNewDocument/OnOpenDocumentが完了する前にはOnCloseDocument呼べないみたいだね。
MDI子フレームにWM_CLOSEを送ってみるってのはどうだ。
0690デフォルトの名無しさん
NGNG>起動時に子ウィンドウを出さない様にする
これは知ってます。
CxxxApp::InitInstance()の中で
CCommandLineInfo cmdInfo;
の直後に
cmdInfo.m_nShellCommand = CCommandLineInfo::FileNothing;
を挿入。
0691smat
NGNGCxxxDoc::Serialize の内部で行うと氏んでしまいました。
CxxxDoc::Serialize(CArchive& ar)
{
.....
POSITION pos=GetFirstViewPosition();
while(pos != NULL){
CView* pView=GetNextView();
CWnd* pWnd=pView->GetParent();
pWnd->SendMessage(WM_CLOSE);
}
....
}
次にドキュメントがダメならCxxxViewでやっちまえと思って
OnInitialUpdate,OnDrawなどでやってみましたが、ことごとく
粉砕されてしまいましたが、
CxxxDoc::OnOpenDocument()の内部で下記の様にやるとうまくいきました。
BOOL CSmatPaint2Doc::OnOpenDocument(LPCTSTR lpszPathName)
{
if (!CDocument::OnOpenDocument(lpszPathName))
return FALSE;
// TODO: この位置に固有の作成用コードを追加してください
//拡張子によるフィルタ
CString s = lpszPathName;
if( s.Right(3).CompareNoCase("TIF") != 0 ){
AfxGetMainWnd()->MessageBox("サポートされていないファイル形式です。");
return FALSE;
}
//イメージオブジェクトをファイル名から生成
m_img = IeImg(lpszPathName);
//---イメージの有効性チェック---
// 拡張子が合っていても、いたずらにて拡張子が変更されている場合または
// ファイルが壊れている可能性があるためにこれを行う
if(!m_img.isValid()) {
AfxGetMainWnd()->MessageBox("無効なイメージファイルです。");
m_img = ieImgNull;
return FALSE;
}
return TRUE;
}
大変良い勉強になりました。感謝してます。
>>690さん
ばっちりです。ありがとうございます。
0692ビギナー
NGNG_variant_t vString;
vString = m_pRecordset->GetCollect(_variant_t("整理"));
vString.ChangeType(VT_BSTR);
s11=vString.bstrVal;
整理がNULLの場合2行目のvString.ChangeTypeで
落ちますがどう対処すればいいのでしょうか。
0693デフォルトの名無しさん
NGNGVC++のspでの修正内容一覧でそんなのを見かけた気が、、、
spのバージョンは?
0694デフォルトの名無しさん
NGNG0695694
NGNGif ( vString ) で囲んでもダメなのかい?
0696692
NGNGただvc起動時 VBみたいに SPなんとかと出ませんが...。
カッコでくくってみます。vbでいう on error resume next みたい
のがあるといいな
0697デフォルトの名無しさん
NGNGtry {
} catch (...) {
}
__try {
} __finally {
}
TRY {
} CATCH_ALL{
} END_CATCH_ALL;
0698ビギナー
NGNG0699デフォルトの名無しさん
NGNG痛い目見るかも。
0700デフォルトの名無しさん
NGNGCTimeとかをコンポジションしたいときって
ポインタだけにして
コンストラクタでヒープ領域にとるようにすべきなんでしょうか。
0701sage
NGNGポインタでもメンバ変数として持ってもどちらでもよい。
0702デフォルトの名無しさん
NGNG0703デフォルトの名無しさん
NGNG0704700
NGNGそれはCTime自身がヒープ領域を取るからですか?
0705デフォルトの名無しさん
NGNG0706デフォルトの名無しさん
NGNG0707700
NGNG了解です。簡単なスタックの方にしときます。
0708デフォルトの名無しさん
NGNGヒープにとるぶんにはまあ問題ないでしょう。
スタックだとちょっとまずい。
たとえばCTimeがメンバ変数に大きな配列を持っていて、その実体を
メンバとするクラスAを作ったとする。
このAをプログラム中でlocal変数としてインスタンス化した場合、
大量のスタック領域が消費されることになる。
まCTimeではそんなことは無いから気にしなくてもいいんだけど。
0709700
NGNGアドバイスどうもです。
CTime,CFile,CStringとかいっぱい入れてるんで
(それをコンポジションと言うと思ってた。なんて言うのだろ)
ヒープにとることにします。
0710700
NGNGTime = CTime::GetCurrentTime();
error C2679: 二項演算子 '=' : 型 'class CTime'
の右オペランドを扱う演算子は定義されていません。
(または変換できません)
って出てしまいました。なんですかこれ?
0711デフォルトの名無しさん
NGNG0712700
NGNGああ、そうか、あれじゃポインタの置き換えになっちゃいますね。ボケてました。
0713デフォルトの名無しさん
NGNG0714700
NGNG作ったんですけど、
OnPaintがprotected:メンバになっていて
コンパイルエラーになります。
publicにしちゃって良いですか?
0715デフォルトの名無しさん
NGNG状況がよくわからんが…、OnPaintを外から直接呼ぶ気か?
止めとけ。InvalidateRect() か何かで間接的に使うようにすべき。
0716デフォルトの名無しさん
NGNG0717デフォルトの名無しさん
NGNG0718デフォルトの名無しさん
NGNG0719718
NGNG0720デフォルトの名無しさん
NGNGCreate時かPreCreateWindowでウインドウスタイルを変える。
0721714
NGNGまたひとつ賢くなりました。
0722デフォルトの名無しさん
NGNG折れ線グラフのクラスを作りたいんですが
CPaintDCだけじゃだめでしょうか。
0723デフォルトの名無しさん
NGNGメーラのBecky!を例に挙げますが、このソフトのメール一覧ビューと
本文ビューの間には、縦サイズが固定で日時情報や複数のボタンが
表示されているビューが存在します。
このビューのように、MFCで水平に3分割したビューのうち
中央のビューの縦サイズを固定し、なおかつドラッグしても
縦サイズが保持されたまま移動するビューの実現はどのように
すれば良いのでしょうか?
参考になるソースへのポインタだけでも教えて頂けると有り難いです。
0724デフォルトの名無しさん
NGNG>Create時かPreCreateWindowでウインドウスタイルを変える。
ありがとうございます。が、PreCreateWindowだとアサートされてしまうので
Create時に試してみたところ、
ModifyStyleEx(0, ~WS_EX_WINDOWEDGE);
ではまたもにクリックできないようになり、
ModifyStyleEx(0, WS_EX_TRANSPARENT);
では期待した効果が得られませんでした。具体的にはどうすればいいのでしょうか。
0725デフォルトの名無しさん
NGNGhttp://www.codeguru.com/bitmap/Graph.html
ほれ
From CodeGuru
0726725
NGNG>>722
http://www.codeguru.com/bitmap/Graph.html
0727デフォルトの名無しさん
NGNGこのサイトいいですね。
0728smat
NGNGショートカットの上にドラッグ&ドロップしたときにファイル名又はフォルダ名を
をGETするにはどうすればよいのでしょうか?
::DragQueryFile(...)のまねをしたいのです。
0729デフォルトの名無しさん
NGNGGetCommandLine
0730デフォルトの名無しさん
NGNGこれって端っこまで行った時、画面からはみ出てしまいます。
自動的にスクロールするようなやつ、ないですか?
0731デフォルトの名無しさん
NGNGプログラマだろ?
自分でカスタマイズしろよ
0732725
NGNGhttp://www.codeguru.com/controls/oscope.shtml
http://www.codeguru.com/controls/histogram_control.shtml
こんなのもあるぞ
0733デフォルトの名無しさん
NGNG付き合いすぎ。
自作自演?
0735smat
NGNGQuick Responseありがとうございます。
早速やってみました。
GetCommandLine()で大概はOKなのですが、問題があります。
その問題とは、ファイル名がMS-DOSファイル名(8.3形式)にされてしまうのと、
ファイルを複数ドロップしたときに、ファイル名がスペース区切りにされてし
まうことです。::FindFirstFile()等でMS-DOSファイル名で検索し、
WIN32_FIND_DATA構造体の中にLong file nameで格納されていれば問題なし
なのですが、まだそこまで確認できていません。
MS-DOSファイル名→Long file name変換の関数があれば何の問題もないのですが。
0736デフォルトの名無しさん
NGNG0737デフォルトの名無しさん
NGNGゴルァしようかと来て見たら
732のような天使がいて心洗われました。
0738smat
NGNGばっちりです。ありがとうございました。WIN32 APIを打ち込みするのに
::をいれたら__argcと__argvが出てきたのを偶然発見したので、もしかしたら
と思って、使ったらうまくいきました。
以下動作確認部分のコードです。
...
int arg_cnt = ::__argc;
CString s="";
char buff[MAX_PATH+1];
for(int i=1; i<arg_cnt; i++){
::GetLongPathName(::__argv[i],buff,MAX_PATH+1);
s += buff;
if(i != arg_cnt-1 ){
s += "\n";
}
}
MessageBox(s);
...
0739デフォルトの名無しさん
NGNGreturnしただけだとウィンドウが残ったままです。
WM_DESTROYするとアプリケーションエラーになります。
0740デフォルトの名無しさん
NGNG二重書き込み申し訳ないです。
COleDataSource::OnRenderGlobalData
COleDataObject
の、サンプルコードがあるところを教えてください。
達人の方々、簡単なサンプルコードをいただけると幸いです。
サパーリわからなくて困り果てています。うう(泣
0741739
NGNGだめなんですか?
どのサイトみてもそういうサンプルがないので。
0742デフォルトの名無しさん
NGNGOnInitって何よ?
.NETの話ならスレ違い。
0743デフォルトの名無しさん
NGNG問題点すら明確に伝達できないやつに教えるのはばかばかしいので
さらしage
0744デフォルトの名無しさん
NGNG>returnしただけだとウィンドウが残ったままです。
>WM_DESTROYするとアプリケーションエラーになります。
ゆーてるやろもうええわ!っち。
0745デフォルトの名無しさん
NGNG0746デフォルトの名無しさん
NGNG>>744は元VB厨だからForm_Loadでエラーチェックするのが作法なんだよ、きっと。
0747デフォルトの名無しさん
NGNGなんとか入門の本を読んでも、その辺の構造について解説してないもんな。
0748デフォルトの名無しさん
NGNG0749デフォルトの名無しさん
NGNGMFCのフレームワークにはOnInitなんてハンドラはないんだけど。
0750739
NGNGほんとにありがとう!
>>746
VBはやったことないです。元DOSプログラマ。
>>747
基礎がなってないのは自覚してます。
>>748
来ました
>>749
OnInitDialogでした。
0751EBI
NGNG0752デフォルトの名無しさん
NGNG画像の回転には5.0でも4.0でも
バージョンは関係ない。
ちなみに
pDC->StretchBlt(xDest, yDest, bm.bmWidth, bm.bmHeight, &memDC,
bm.bmWidth-1, 0, -bm.bmWidth, bm.bmHeight, SRCCOPY);
このsrcの値を変えれば回転する。
0753デフォルトの名無しさん
NGNGなんでですか?
0755753
NGNGExitInstanceで処理することにしました。
■ このスレッドは過去ログ倉庫に格納されています