■ VisualC++(MFC限定)相談室 ■
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
NGNGMFCに限ったお話をしましょう。
ルールを提案。
Qは高度なものからくだらないものまで何でもOK。
Aは「知ってるつもり君」、「えらそうに解説する人」お断りと
いうことで。
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で処理することにしました。
0756デフォルトの名無しさん
NGNG当たり前。
0757
NGNG方法はどのようにするのでしょうか。
spyというやつでid(?)取得してどうこうするのでしょうか?途方にくれてます。
0758デフォルトの名無しさん
NGNGrocket mouse買う方が簡単でやすくつくよ
0759757
NGNGだからウィンドウがでたらキャンセルを自動的に押して
キャンセルしたいんです。
ほかの方法でもいいんですが...
0760デフォルトの名無しさん
NGNG0761デフォルトの名無しさん
NGNGWM_CREATEをフックして送られてきたハンドルからボタンのハンドルをゲットしてMESSAGE送る。
0762デフォルトの名無しさん
NGNG0763759
NGNG0764デフォルトの名無しさん
NGNGフックしなくてもよかった。
普通にWM_CREATEでSendMessage送れヴぁ?
0765759
NGNG0766デフォルトの名無しさん
NGNG押されたくないボタンのあるアプリなんか使わせなければいい。
0767デフォルトの名無しさん
NGNG0768757
NGNGエクスポートするボタン。
フリーでも画面に出た特定ボタン押すというソフトあるれどこれじゃその
ソフト終了されたらおしまいだし。だから自分で偽装したやつ作る必要が
ある訳でした。
多分rocket mouseも簡単に終了できんるですよね。これいいと思ったんですが。
0769757
NGNG0770デフォルトの名無しさん
NGNGダイアログのボタンとか削除とか、disableにできるよ。
ダイアログじゃないとか、
動的にコントロールを制御してるようだと、
駄目だけどね。
0771デフォルトの名無しさん
NGNG他人のプログラムに改変を加えて再配布というのはいろいろ問題がないか?
0772757
NGNGただ改造すら禁止しているケースもありますが。
というか、誰でもエクスポートできるように作るなと言いたい。
0773デフォルトの名無しさん
NGNGドラッグ&ドロップしてファイル名とパスを
取得したいんですが、よくわかりません。
どなたか、教えていただけないでしょうか。
おねがいします。
0774デフォルトの名無しさん
NGNGただしClassWizardはデフォルトではCDialog派生クラスにWM_DROPFILESを表示しないので
クラスのメッセージフィルタを"Dialog"から"Window"に変更する。
0775デフォルトの名無しさん
NGNGありがとうございます。
まだファイル名がうまく取れませんが、ドロップは認識しました。
0776757
NGNGそれにしてもVC(MFC)は奥が深いです。
0777
NGNGDDX_Control(pDX, IDC_RADIO1, m_radio1)
としているんですがこれって問題ありますか?
0778デフォルトの名無しさん
NGNGafxdd_hを見たところDDX_Control関数の3番目の引数が参照になってるね。
m_radio1はポインタなの?
0779777
NGNGCButton m_radio1;
としています。
他のコントロールならばClassWizardで追加するのですが、
グループスタイルの無いラジオボタンなので手作業で追加しました。
0780デフォルトの名無しさん
NGNGあーなるほど。グループスタイルを付けないと
ClassWizardじゃDDX変数を作れないんだ。
しかしなんでグループスタイル付けないんですか?
0781777
NGNG全部のラジオボタンにグループスタイルつけるとラジオボタンのON/OFFが
各ボタンでばらばらになってしまうからです。
例えば、
○ラジオボタン1
○ラジオボタン2
上のように二つのボタンがあったとき、1だけにグループスタイルをつけると
1をONにしたときに2が自動的にOFFになり、またその逆も可能です。
ところが両方のボタンにグループスタイルを設定してしまうと、
2は1のON/OFFとは関係無しに独立して動作します。
0782デフォルトの名無しさん
NGNG分かった。「1だけグループスタイルあり」でグループ化したとき、
グループスタイルを持たないラジオボタン2以降にも、
手作業でコントロール型のDDX変数を割り当てたいつー話?
たしかに問題ありそうな無さそうな微妙なところですな。
これはMFCのソースを見るしか。
0783デフォルトの名無しさん
NGNGCArrayで2次元配列作る方法、操作などがわかりません(;´Д`)
参考してる本はSTL使ってるが良く分からないし、、
どなたか、教えていただけないでしょうか。
おねがいします。
0784デフォルトの名無しさん
NGNGint x_;
int y_;
int *vec_;
public:
nijigenhaitetsu(int x, y) : x_(x), y_(y), vec_(new int[x*y]) { std::fill(vec_, vec_+x_*y_, 0); }
~nijigenhaitetsu() { delete [] vec_; }
int &get(int x, int y) const { return vec_[y * y_ + x]; }
};
■ このスレッドは過去ログ倉庫に格納されています