■MFC相談室 mfc13d.dll■
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
05/03/07 16:19:56前スレ
■ MFC相談室 MFC12.dll■
http://pc5.2ch.net/test/read.cgi/tech/1096848771/
過去ログは >>2-5 の辺り。
0153デフォルトの名無しさん
2005/04/05(火) 15:48:32「うまく動きません」を説明するところから始めようか。
0154152
2005/04/05(火) 16:38:49そうですね。
まず、LoadBitmapsをオーバーライドしてファイルのビットマップを
開くようにしています。
で、LoadImageしたハンドルをそれぞれm_bitmap、m_bitmapSel、
m_bitmapFocus、m_bitmapDisabledにアタッチします。
この時に、ついでにm_bitmapに割り当てるビットマップを使って
リージョンを作成し、SetWindowRgnしています。
DrawItemでは、CBitmapButton::DrawItem(lpDrawItemStruct)をした
後に自分で文字乗せをしています。
この状態で走らせると、ボタンの押下とかでちゃんとリージョンが
効いている事が確認出来るのですが、表示の方はリージョンで切り
取られず、元の四角いビットマップ画像が出てしまいます。
画像の描画をリージョン内に止めるにはどうすればいいのでしょう。
0155デフォルトの名無しさん
2005/04/05(火) 17:09:33WS_CLIPSIBLINGS
0156デフォルトの名無しさん
2005/04/05(火) 17:14:12この前から何度も質問しているんだから、もう少し質問の仕方巧くなろうよ…
0157デフォルトの名無しさん
2005/04/05(火) 17:36:30期待する動作を得ることができました。
ありがとうございます。
>>156
質問、初めてなんですけどねw
確かに質問の仕方は悪かったですね。
以後気を付けるようにします。
0158デフォルトの名無しさん
2005/04/05(火) 21:21:08その入力補助みたいなことをやりたいのです。
エディットボックスの変更によってEN_CHANGEが送られてきたときに、
それがユーザによるものなのか、プログラム自身によるものなのかを見分けるには
どうするのが定番なのでしょうか?
0159デフォルトの名無しさん
2005/04/05(火) 21:26:44小規模板にある、MMO製作プロジェクトぉ
厨房こぃ!
0160158
2005/04/05(火) 21:30:18問題無ければこれで行こうと思ってるんですが。
0161デフォルトの名無しさん
2005/04/05(火) 22:52:020162デフォルトの名無しさん
2005/04/05(火) 23:42:39MSDNを見ようよ。
ttp://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vclib/html/_mfc_clistbox_class_members.asp
0163デフォルトの名無しさん
2005/04/06(水) 14:26:50CMapはインチキくさいの? std::mapはつかえないんだわ。
コンテナで、mapは、Dllの引数などにつかえないらしくってさ。
http://support.microsoft.com/default.aspx?scid=kb;JA;168958
0164デフォルトの名無しさん
2005/04/06(水) 16:00:280165デフォルトの名無しさん
2005/04/06(水) 16:07:16CString::Format()
0166デフォルトの名無しさん
2005/04/06(水) 16:07:38see CString::Format
0167デフォルトの名無しさん
2005/04/06(水) 16:21:37CString str;
str.Format("%d",i);
if(str=="100")
printf("OK\n");
else
printf("ゴルア\n");
0168デフォルトの名無しさん
2005/04/06(水) 16:53:150169デフォルトの名無しさん
2005/04/06(水) 18:01:25char a[20];
itoa(i,a,10);
CString str=a;
if(str=="100")
printf("OK\n");
else
printf("orz\n");
0170デフォルトの名無しさん
2005/04/06(水) 18:12:090171デフォルトの名無しさん
2005/04/06(水) 18:15:4520の根拠は?
0172デフォルトの名無しさん
2005/04/06(水) 18:21:07んなもん根拠ないでしょ。一例なだけで。
0173デフォルトの名無しさん
2005/04/06(水) 18:36:260174デフォルトの名無しさん
2005/04/06(水) 18:38:15収まるだろう。char a[4]とかだと数字の1000000は
文字列として格納出来ない
0175デフォルトの名無しさん
2005/04/06(水) 18:39:41GetCurrentDirectory
0176デフォルトの名無しさん
2005/04/06(水) 18:42:03それって、実行時のフォルダ変えられたら変わるんでないの?
0177デフォルトの名無しさん
2005/04/06(水) 18:49:25そりゃそうだ
0178デフォルトの名無しさん
2005/04/06(水) 20:20:120179デフォルトの名無しさん
2005/04/07(木) 00:09:330180デフォルトの名無しさん
2005/04/07(木) 10:21:07AppWizardすると巨大なファイル&コード郡が...
自分でWinMainして中の人にMFCクラスをnewさせた方が良いのかなぁ?
0181デフォルトの名無しさん
2005/04/07(木) 10:50:350182180
2005/04/07(木) 11:04:10で、CWinApp派生させて処理起動すんのか。
0183180
2005/04/07(木) 11:19:25ダイアログ単位のファイル/クラスを共有させたいんですが、
RCファイル1個に全ダイアログ入れなきゃならないんでしょうか?
0184180
2005/04/07(木) 11:25:19他はイジラナイ方が良いんだろうかね?
CWinAppに全処理入れたら、巨大な1クラスアプリになっちゃうし。
0185180
2005/04/07(木) 11:34:12アプリのrcファイルとダイアログと切り離し可能でつか?
0186デフォルトの名無しさん
2005/04/07(木) 12:11:490187ほれ
2005/04/07(木) 12:32:05#include "resource.h"
int __stdcall WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
CWinApp* app = new CWinApp();
CDialog* d = 0;
int ret = -1;
if (! AfxWinInit(hInstance, hPrevInstance, lpCmdLine, nShowCmd)) {
goto endapp;
}
if (! app->InitApplication()) {
goto endapp;
}
d = new CDialog(IDD_MAINW);
ret = (d->DoModal() == IDOK? 0: 1);
delete d;
endapp:
AfxWinTerm();
delete app;
return ret;
}
0188180
2005/04/07(木) 13:02:02ダイアログ単位にクラスライブラリ化する方法も教えてキボンニュ
0189180
2005/04/07(木) 14:18:34とメンドクなぁい?
0190デフォルトの名無しさん
2005/04/07(木) 15:00:03それなら、どうあればいいと思うのだ?
つーか、最期のコンパイルエラーとは何だ。
0191180
2005/04/07(木) 15:18:40もちろんDocクラスは自作しますが、IDEに作って貰う必要はナサゲ。
0192180
2005/04/07(木) 15:54:300193180
2005/04/07(木) 16:15:02MFCって画面に弱くない?
0194デフォルトの名無しさん
2005/04/07(木) 16:19:58【XP/2000 VC++6.0】
0195デフォルトの名無しさん
2005/04/07(木) 16:21:57弱いのはあんたの頭。
0196180
2005/04/07(木) 16:28:060197180
2005/04/07(木) 17:03:44何のリンク情報が抜けてたんだろう?
0198デフォルトの名無しさん
2005/04/07(木) 18:17:040199デフォルトの名無しさん
2005/04/07(木) 23:39:00でもまんどくせ
0200デフォルトの名無しさん
2005/04/07(木) 23:44:060201デフォルトの名無しさん
2005/04/08(金) 02:26:11誰か教えてください。・゚・(ノд`)・゚・。
0202デフォルトの名無しさん
2005/04/08(金) 02:28:360203デフォルトの名無しさん
2005/04/08(金) 02:43:010204デフォルトの名無しさん
2005/04/08(金) 04:19:35つまり、IEのURL入力ボックスのようなものはどうやって実現するのでしょうか?
この辺を参考に、
ttp://www.snark.co.jp/soft/faq/vc_a2.htm#Q2
ttp://www.sources.ru/cpp/mfc/t6850.htm
void CSelectEdit::OnSetFocus() // WM_SETFOCUS ハンドラ
{
PostMessage( WM_MYSELECTALL ); // カスタムメッセージを送る
}
void CSelectEdit::OnSelectAll(WPARAM wParam, LPARAM lParam) // カスタムメッセージのハンドラ
{
SetSel( 0, -1 ); // 全て選択
}
ってことをやってみたのですが、
マウスボタンを押した直後には全て選択されるものの、
ボタンを離すまでは範囲選択状態のままのようで、
文字列の先頭から、マウスボタンを離した場所までの選択になってしまいました。
0205デフォルトの名無しさん
2005/04/08(金) 14:35:26質問良いでしょうか?
CoInitializeEx(NULL, COINIT_MULTITHREADED);
↑(これがコンパイル通らないんですよ。)
error C2065: 'CoInitializeEx' : 定義されていない識別子です。
error C2065: 'COINIT_MULTITHREADED' : 定義されていない識別子です。
↑(コンパイルエラーが出てしまいます)
もちろん、objbase.hはincludeしました。
#include "stdafx.h"
#define _WIN32_DCOM
#include <objbase.h>
↑(こんな感じ)
#include "stdafx.h"
#define _WIN32_WINNT 0x400
#include <objbase.h>
↑(これでも駄目でした)
MFCだと駄目で、MFCを使用しないと通ります。。。
どうやれば良いのでしょうか?
もう、2日悩んでます。。。
0206205
2005/04/08(金) 14:38:57環境忘れてました。
・Win2000
・VC6
・Win32 Console Application
0207デフォルトの名無しさん
2005/04/08(金) 15:43:23stdafx.hの後にマクロ定義してもダメ。
プロジェクトの設定のマクロのところで定義するか
stdafx.h内でwindows.hやafx〜.hをincludeする前に定義する。
0208205
2005/04/08(金) 16:13:30返答ありがとうございます。
通りました。。。(;;
ありがとうございました。
順番でしたか、、、
こんなので悩むのは私だけでしょうが、解決したソースを記述しておきます。
[ atdafx.h ]
--------------------------------------------------------------------------
#define_WIN32_DCOM
#defineVC_EXTRALEAN // Windows ヘッダーから殆ど使用されないスタッフを除外します
#include <afx.h>
#include <afxwin.h> // MFC のコアおよび標準コンポーネント
#include <afxext.h> // MFC の拡張部分
#include <afxdtctl.h> // MFC の Internet Explorer 4 コモン コントロール サポート
#ifndef _AFX_NO_AFXCMN_SUPPORT
#include <afxcmn.h> // MFC の Windows コモン コントロール サポート
#endif // _AFX_NO_AFXCMN_SUPPORT
#include <iostream>
// TODO: プログラムで必要なヘッダー参照を追加してください。
#include<objbase.h>
--------------------------------------------------------------------------
0209デフォルトの名無しさん
2005/04/08(金) 16:28:220210デフォルトの名無しさん
2005/04/08(金) 18:09:28今、MFCを使わないでコンソール用のプログラムを作ってる。
構造体の名前でCButtonとかCDialogといったMFCのクラスと同じ名前を使うと
構造体のメンバ補完の場面で自作構造体のメンバが候補に出てこないで
MFCのメンバが候補に出てくるんだが、これを正しい候補が出るようにするには
どうしたらいいんだ?
VC6です。
0211デフォルトの名無しさん
2005/04/08(金) 18:16:11C〜って名前にするのをやめればいい。
0212デフォルトの名無しさん
2005/04/08(金) 18:19:34ちょっとやってみたがちゃんと自分のクラスが表示されたぞ。
まぁインテリセンスがまともに機能しないのは仕様だから諦めるしかないんじゃね?
0213デフォルトの名無しさん
2005/04/09(土) 18:36:370214デフォルトの名無しさん
2005/04/09(土) 19:10:29See MSDN.
0215デフォルトの名無しさん
2005/04/09(土) 20:49:13public:
CModDlg *m_mod;
このようにデータメンバーを追加したのですが、この行で
error C2143: 構文エラー : ';' が '*' の前に必要です。
error C2501: 'CModDlg' : 識別名を宣言するのに、型が指定されていません。
error C2501: 'm_mod' : 識別名を宣言するのに、型が指定されていません。
と、エラーが出てしまいます。
原因分かる方いらっしゃらないでしょうか?
0216デフォルトの名無しさん
2005/04/09(土) 20:52:51>識別名を宣言するのに、型が指定されていません。
の通りなんだが。
0217デフォルトの名無しさん
2005/04/09(土) 21:23:41つ【#include "ModDlg.h"】
0219デフォルトの名無しさん
2005/04/10(日) 04:26:59ためしにやってみたけど
それで問題なく動くと思うけど?
マウス押してから離すまでの間にマウス動かしたりしてない?
もしくはおまいさんのマウスがおかしくなってて動かしてないのに
ぷるぷる動いてる状態になってるとか
0220デフォルトの名無しさん
2005/04/10(日) 10:19:580221204
2005/04/10(日) 18:59:58どうクリックしても、クリック位置までの選択になってしまいます。
仮にマウスが動いていたとしても、IEなんかの場合、
マウスをどう動かそうと全部選択になりますよね?
テスト用に簡単なソースと実行ファイルです。
試してみてもらえないでしょうか?
ttp://www.uplo.net/www/vip4916.zip
0222デフォルトの名無しさん
2005/04/10(日) 19:15:070223204
2005/04/10(日) 19:47:45とりあえず正攻法じゃ無いですよねコレ
0224デフォルトの名無しさん
2005/04/10(日) 21:39:36普通にクリックしても全部選択されたよ???
VC6, Windows XP SP2
0226デフォルトの名無しさん
2005/04/10(日) 22:30:23あなたと同じ環境だけど必ずでは無いけど確かになるね。
・・・と思ったらクリックした後にちょっとマウスカーソルが
動くとなるみたいだな。光学式のマウスとか使ってない?
0227デフォルトの名無しさん
2005/04/10(日) 22:31:360228204
2005/04/10(日) 23:39:33ズバリ光学式です。
少なくとも画面上ではカーソルは動いてないんですけどね。
むしろ上手く選択されない方がレアケース?
とはいえ、IEのアドレスバーの方はきちんと動作してますしねー
0229224
2005/04/10(日) 23:41:29WM_SETFOCUSとWM_LBUTTONUPの間に、どんなメッセージが来てるか、SPYで監視してみれば。
原因はよく分からないけど、WM_MOUSEMOVEが同時に送られているんだと思う。
当たり前だけど、左ボタンを押したまま、マウスを動かすと選択範囲がカーソルまでになる。
これはエディットボックスのデフォルトの仕様。
IEのURLボックスは、そうならないように別途処理しているはず。
ボタンが押されている間は、WM_MOUSEMOVEを無視するようにすれば、最初の問題も解決するのでは?
0230デフォルトの名無しさん
2005/04/10(日) 23:56:20あと言っておくけど
IEのバーはエディットボックスじゃなくコンボボックスだ
複数行じゃなくてもいいなら
コンボボックスにしてドロップダウンのサイズを0にして
タイプを標準にするっていうのはどうだろう?
正攻法ではないがこれで難なく望む動作が得られると思うが
0231204
2005/04/10(日) 23:58:37マウスがヘタレなんでしょうか?
WM_MOUSEMOVE無視で、めでたく全部選択されました。
どうもありがとうございました。>付き合って下さった方々
0233デフォルトの名無しさん
2005/04/11(月) 16:24:43実行時にダイアログにグループボックスを貼り付けるには、
どんなコードになるんでしょうか?
0234233
2005/04/11(月) 16:56:020235233
2005/04/11(月) 16:59:40教えてキボンニュ
0236デフォルトの名無しさん
2005/04/11(月) 17:09:44スマン
おまいさんの言いたいことがさっぱりわからん
0237233
2005/04/11(月) 17:13:57その部品をクラスにするじゃないですか?
その場合、どのリソースをクラスにするんでしょ?
グループボックスなのか、ダイアログのチャイルドなのか、
また、貼るときのコード教えて下さい。
0238デフォルトの名無しさん
2005/04/11(月) 17:18:190239233
2005/04/11(月) 17:19:43わかりますか?
0240デフォルトの名無しさん
2005/04/11(月) 17:37:57俺はそんなことしないなぁ
0241233
2005/04/11(月) 17:40:04MFCのクラス流儀でいけば、
ダイアログクラスに実行時生成したオブジェクトをペタペタ貼るのがふつー。
0242デフォルトの名無しさん
2005/04/11(月) 17:42:330243233
2005/04/11(月) 17:48:38┃ダイアログクラス
┣━━━━━━
┃
┗━━━━━━
┏━━━━━━
┃ダイアログの中身クラス
┗━━━━━━
実行時に、ダイアログが中身を生成して、
┏━━━━━━
┃ダイアログ
┣━━━━━━
┃┏━━━━━
┃┃中身
┃┗━━━━━
┗━━━━━━
メデタシ。
0244デフォルトの名無しさん
2005/04/11(月) 18:02:190245233
2005/04/11(月) 18:09:14ダイアログの中にダイアログを入れる、で良いのか?
0246デフォルトの名無しさん
2005/04/11(月) 18:25:41自己レスとかいらないから
0248デフォルトの名無しさん
2005/04/11(月) 18:56:04リソースエディタでダイアログ作って枠なし・CHILDにチェック入れて
クラスウィザードでCDialogと結びつけて
好きなだけCreateすればいいんじゃね?
0249233
2005/04/11(月) 19:01:24そのやり方でやります。
ところで、ダイアログと枠無しダイアログの位置あわせはどうやったら良いですか?
VCLだと、
ChildForm->Parent = Form1->PanelForPosition; //Form1のパネルの上にチャイルド
ChildForm->Align = alClient; //チャイルドはパネル一杯に描画
なんて書けたんですけど。
0250デフォルトの名無しさん
2005/04/11(月) 19:09:09どんな風に配置したいのか知らんが
GetClientRectとかMoveWindowとか駆使して自前で並べるとか
CSplitterWndとか
0251デフォルトの名無しさん
2005/04/11(月) 19:16:39親ダイアログの OnSize() で、自分で並べるしか。
CRect r;
GetClientRect(r);
子.MoveWindow(r); // クライアント領域いっぱいに
0252233
2005/04/11(月) 19:17:59並べた後は親に合わせてチャイルドが動いてくれるんですね。
ま、もし動かなかったら自分で動くコード入れれば良いか。
■ このスレッドは過去ログ倉庫に格納されています