■ VisualC++(MFC限定)相談室 ■
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
NGNGMFCに限ったお話をしましょう。
ルールを提案。
Qは高度なものからくだらないものまで何でもOK。
Aは「知ってるつもり君」、「えらそうに解説する人」お断りと
いうことで。
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]; }
};
0785デフォルトの名無しさん
NGNGCArrayに初めて触ってみたので変なとこあったらごめんね。
#include <afxtempl.h>
struct cell_t {
int m_data;
};
struct map_t : public CArray< CArray< cell_t, cell_t& >, CArray< cell_t, cell_t& >& >
{
map_t(int width = 1, int height = 1)
{
SetSize(height);
for (int i = 0; i < height; i++)
(*this)[i].SetSize(width);
}
};
int main()
{
map_t map(10, 10);
map[9][9].m_data = 777;
printf("%d\n", map[9][9].m_data);
return 0;
}
0786デフォルトの名無しさん
NGNG>struct map_t : public CArray< CArray< cell_t, cell_t& >, CArray< cell_t, cell_t& >& >
CArrayを継承した構造体map_tを作ったみたいんですが、後ろのほうの< CArray< cell_t, cell_t& >, CArray< cell_t, cell_t& >& >
の意味がわかりませんが、もしよければ教えてもらえませんでしょうか?
あとクラスで書くときはどうなるとか、、
MFCから始めたなんちゃってプログラマで、構造体いじった事もなくてすみません(;´Д`
2次元配列ってC習う時良く使うが、実務ではあまり使わないのでしょうか?
0787初心者
NGNGVisualC++6で
char型の配列buf[0] buf[1] buf[2]に格納した8bitデータ3つを
24bitデータにまとめたいのですがどうしたらよいでしょうか。
例********************************
buf[0]:0xAA
buf[1]:0xBB
buf[2]:0xCC
の場合
0xAABBCCにまとめる。
**********************************
int data = 0x000000;
data = (buf[2] * 0x010000) + (buf[3] * 0x000100) + buf[4];
とやってみたのですが、おかしくなります。
どなたかご教授願います。
0788デフォルトの名無しさん
NGNG0789デフォルトの名無しさん
NGNGこういうことだ
BYTE buf[4];
buf[0] = 0xcc;
buf[1] = 0xbb;
buf[2] = 0xaa;
buf[3] = 0;
DWORD data = *(DWORD*)buf;
0790初心者
NGNGdata = ((unsigned long)buf[0] * 0x010000) + ((unsigned long)buf[1] * 0x000100) + (unsigned long)buf[2];
とも
unsigned long datasize = 0L;
datasize = (unsigned long)buf[2];
datasize += (unsigned long)buf[1] << 8;
datasize += (unsigned long)buf[0] << 16;
ともやってみたんですが、やっぱりおかしくなります。
どこが間違っているのでしょうか?
0791789
NGNG0792789
NGNG0793785
NGNG「クラスTを要素に持つCArrayの宣言」が CArray< T, T& > array; なんですね。
だから「『クラスTを要素に持つCArray』のCArray」なら、
CArray< CArray< T, T& >, CArray< T, T& > > map; となる。
785をtypedefでわかりやすく書けば、
typedef CArray< cell_t, cell_t& > array_t;
typedef CArray< array_t, array_t& > array_of_array_t;
class map_t : public array_of_array_t { ... }
となるでしょう。
785で構造体(struct)にしたのは、特に意味ないです。
structはデフォルトで全メンバがpublicなだけで、それ以外はクラス(class)と同じと思ってください。
あとmap_tをarray_of_array_tから派生させたのは、
map_t自体のコンストラクタを定義したかったからで、
2次元配列だから特に必須ってわけではないです。
0794790
NGNGDWORD data = 0x000000;
data = ((BYTE)buf[0] * 0x010000) + ((BYTE)buf[1] * 0x000100) + (BYTE)buf[2];
で
できました!
ありがとうございます!
0795デフォルトの名無しさん
NGNGCArray< CArray< T, T& >, CArray< T, T& > > からクラス派生出来るのはちょっとデカルチャでした。
本当にプログラマとして仕事できるかどうか心配になってきた(大学3年)
なんとか使えそうです、ありがとうございました。
0796デフォルトの名無しさん
NGNGdata = buf[0]<<16 | buf[1]<<8 | buf[2];
の方がコーディング量少ないぞ(藁
0797
NGNG0798デフォルトの名無しさん
NGNGなぜint型の配列ではいけないのか小一時間問い詰めたい
0799デフォルトの名無しさん
NGNG0800デフォルトの名無しさん
NGNG同じマスに色んな情報を詰め込みたいので、クラスを使いたい
map[2][3].cell = 1 ,map[2][3].character = player ←みたいな使い方で、、
マップはサイズ変更可能なので、できればベクターのほうが使いやすい
もしかしたらとんでもない勘違いしたかな?小一時間教えてくださいm(_ _)m
0801デフォルトの名無しさん
NGNGclass GikoMap {
int x_;
int y_;
T *vec_;
public:
GikoMap(int x, int y) : x_(x), y_(y), vec_(new T[x*y]) {}
~GikoMap() { delete [] vec_; }
T &get(int x, int y) const { return vec_[y * y_ + x]; }
};
0802デフォルトの名無しさん
NGNG0803777
NGNGどうやってるのでしょうか
0804デフォルトの名無しさん
NGNG普通に1番目だけグループスタイルをつけてグループ化して、
整数型のDDX変数にしてる。
個々のラジオボタンを操作することはほとんどないけど、
もしやるならDDX変数を解さずに直接
GetDlgItem(ID_RADIO1)->SetCheck() とか。
0805デフォルトの名無しさん
NGNGradio1->SetCheck(1);
というようなGetDlgItemの返り値をキャストして使うのは
状況によっては動かない場合があると聞いたのですがどうなんでしょう。
入門書によく載ってますが。
0806デフォルトの名無しさん
NGNGCButtonとCWndの継承関係から考えるに、それはだめじゃないの?
CButton* radio1 = (CButton*)GetDlgItem(ID_RADIO1);
((CWnd*)radio1)->SetCheck(1);
ならよいかも。というより、すなおに
CWnd* radio1 = GetDlgItem(ID_RADIO1);
radio1->SetCheck(1);
ではないか。
0807806
NGNG0808デフォルトの名無しさん
NGNGでもMFCはそれを動くようにしてるそうです。
>CWnd* radio1 = GetDlgItem(ID_RADIO1);
>radio1->SetCheck(1);
SetCheck()はCWndのメンバでは無いのですが良いのでしょうか?
0809デフォルトの名無しさん
NGNG>普通に1番目だけグループスタイルをつけてグループ化して、
>整数型のDDX変数にしてる。
自分、わざわざ各ボタンでGetCheck、SetCheckしてました。
0810806
NGNGうがー確かに。
ソースを見るとCButtonにはメンバ変数がないようなので
(CButton*)を(CWnd*)にキャストしてもポインタがずれなくて大丈夫なのかな?
0811デフォルトの名無しさん
NGNGUpdateData();
int n = m_num_radio;
で選択ボタンを判定したり
m_num_radio = 3;
UpdateData(FALSE);
で4番目のボタンを選択したりというのは定石??
0812デフォルトの名無しさん
NGNGおめーえらそーに嘘教えてんじゃねーよ!!
>>805はダウンキャストの危険性についての話だろが!
CButtonはCWndをpublic継承してんだから、
CButtonをキャストなしにCWndと見なすのは全然問題ねーだろが!
>>805
C++のdynamic_castやstatic_cast、reinterpret_castについて調べみ。
いろいろ出てくるから。
0813デフォルトの名無しさん
NGNGNote that it's always safer to check for the validity of the results from GetDlgItem.
0814デフォルトの名無しさん
NGNGダイアログを追加して、
その上にWeb Browserコントロールを載せているのですが
そうすると元のActiveX自体をコールできなくなってしまいます。
ちなみに、ActiveXでは無くMFC AppWizard(exe)などでやると
正常に動いてくれます。
どうしたらいいのでしょうか?
0815デフォルトの名無しさん
NGNG0816デフォルトの名無しさん
NGNG0817デフォルトの名無しさん
NGNG0818デフォルトの名無しさん
NGNGAfxLoadLibrary()、AfxFreeLibrary()
が使えないんだけど、どういうわけですか?
0819デフォルトの名無しさん
NGNG0820818
NGNGじゃ、APIの LoadLibraly、FreeLibraly使って問題ないわけですね?
ロードされる DLLでは、MFCの共有 DLL使ってるんです。で、
MSDNには、「グローバルなMFC の状態を破損するのを防ぎます」と
あるのが気になるんですが。このグローバルって...
0821デフォルトの名無しさん
NGNG自分はMFCスタティックで、
呼び出すDLLがMFCダイナミックだとどうなるんですかね?
リンケージがうまくいかないような気もするんですが。
0822デフォルトの名無しさん
NGNGはい。いかなくなります。スマートな解決方法は多分ありません。
0823デフォルトの名無しさん
NGNG自分も DLL な MFC を使うしかないと思われ。
逆は不可。
0824超初心者
NGNGそれで少し聞きたいんですがMFCでDirectXを取り込むような形で使えますか?
使えるとしたらどんな形でどうやるんでしょうか??
0825デフォルトの名無しさん
NGNG逆は不可とは?
DLLをスタティックに出来るなら、自分がスタティックでもいいだろ?
0826デフォルトの名無しさん
NGNGWin2000でCOleDateTimeのGetCurrentTime();をやってみたんだけど
1899年12月30日になります。
なんで?
0827デフォルトの名無しさん
NGNG0828826
NGNG使い方間違ってた。
COleDateTime today;
today.GetCurrentTime();ってやってたよ・・・
正しくは
today = COleDateTime::GetCurrentTime();だった。逝っとく。
0829デフォルトの名無しさん
NGNG差し替えることってできますか?
ボタンだったら、CBitmapButtonでできるのですが・・・・
0830デフォルトの名無しさん
NGNGオーナードロー
0831デフォルトの名無しさん
NGNGSDIウインドウの下に(ステータスバーの上)に、エディットボックスを追加したいけどどうすればいいんですか?
RPGらしきもの作ってますがチャット機能も追加しょうと思って、入力できる場所を用意しないといけないが、
一々ダイアログを出してはあまり美しくないので、エンターキーを押すと下のほうにエディットボックスが出てくれると
いいなーと思って、、 宜しくおねがいします。
0832ネット初心者
NGNG分かりやすいサンプルあればいいんですが、、VCのサンプル分かりにくいですね。
CSocketFileとCArchive使うまでは分かったが、なかなか実装できない。なにかヒントでも、、
0834デフォルトの名無しさん
NGNG文字のサイズや色を変える事しかわからないっす。
厨房質問でスマソ
0835デフォルトの名無しさん
NGNG秀丸などのエディタは、RichEditは使ってないよ。
で、EM_AUTOURLDETECT
ってのがあるけど、Win2000限定かも
0836マッハ
NGNGできるのでしょうか?そのとき、前に表示された線はそのまま残していきたいのですが・・。
0837デフォルトの名無しさん
NGNGできるよ。
0838デフォルトの名無しさん
NGNG自分で文字列を抽出してリンク張れば出来る。
0839デフォルトの名無しさん
NGNG10進数から16進数への変換関数はないでしょうか?
あるのでしたら、関数名だけでも結構ですので教えてください。
0840デフォルトの名無しさん
NGNG16進数字列にしたいの?
MFCは知らないけど、sprintf()を使えば?
str=sprintf("%X",num);
こんな感じ。
0841840
NGNGもし、10進数字列を16進数字列にしたいのなら、atoiやatolを使って数値にしておいてね。
str=sprintf("%X",atoi(dec));
0842デフォルトの名無しさん
NGNGそれじゃ、コンパイルが通らない
0843840
NGNGおおっと、Perlと勘違いした(汗
sprintf(str,"%X",num);
sprintf(str,"%X",atoi(dec));
だね(汗
サンクス!!
0844844
NGNGなんとか出来そうっす。
ヒントサンクス
0845間違えた鬱だし能
NGNG0846デフォルトの名無しさん
NGNG>>843さん
ありがとうございます。
sprintfでやってみます。
0847デフォルトの名無しさん
NGNGCString strResult;
strResult.Format(_T("%X"), num);
0848まいったね
NGNGMFCのダイアログベースのプログラムなんですが
1) CTestAppでTestMainという関数をスレッド使って呼び込む
2) CTestAppでCTestDlgのダイアログを表示
3) TestMainの関数内のfor(;;)で永久ループ
処理としてグローバルにある終了フラグを見続ける
TRUEならWM_CLOCEをPostして終了
4) CTestDlgのダイアログ内で終了ボタンを押したらグローバルにある終了フラグをTRUEにする
ある特定ファイルそ検索してて見つかったらなにか処理をするというプログラムなんですが
せっかくスレッドを作ってやってもその中で永久ループしてるので意味無しでした・・
おかげさまでCPU稼働率が常に100%な業務アプリです^^;
これって普通の作り方なんでしょうか?
違うと思いたい・・・
0849デフォルトの名無しさん
NGNGイベントオブジェクトでも使ったらちっとはマシになる?
0850デフォルトの名無しさん
NGNGマルチスレッドとか、それ以前の問題。
とっととイベントオブジェクト+WaitFor〜系API使え
0851デフォルトの名無しさん
NGNGそれが普通かどうかはともかく、
ループの中に Sleep(0); を入れるだけで
一気に負荷が減ります。
0852まいったね
NGNGかなーりボトルネックなってますよね。
0853デフォルトの名無しさん
NGNGどうせあまってんだろ。
HDDもどうせATAだろうし(藁
0854デフォルトの名無しさん
NGNGだが二度とそんなクソプログラムは世に出すな
0855まいったね
NGNG考えてみれば私以外皆、MFC初心者か大学出の新卒が作った奴だった^^;
ループの前ではSetTimer使って、タイマー使用フラグを立ててるだけ・・
ループ中にファイル検索して見つかったらメイン処理を行う。
うーん、素直にWM_TIMER拾ったらファイル検索してメイン処理したほうがいいような・・
やっぱりC言語初心者のやつが作った物はこんなもんなんだろうか
Sleepは試しましたが駄目でしたね。
あと残念ながらCPUは一つしかつんでませんので。
HDDはATAでした。
■ このスレッドは過去ログ倉庫に格納されています