mfc-ml

2003年05月

31

[mfc 44954] CSocket 再接続時にエラー

こんにちは

CSocketを使用しているのですが、
TCP接続を一度クローズし、再度接続する際に
エラー(WSAEADDRINUSE)が発生します。
BOOL val = 1;
SetSockOpt(SO_REUSEADDR, &val, sizeof(BOOL)) ;
をConnectの直前に行っているのですが回避できない状況です。


どなたか回避方法をご存知の方、ご教授願います。


katsumi
31

[mfc 44953] RE: [mfc 44922] CRichEditCtrl に罫線を

西さん、こんにちは。

CRichEditCtrl背景へのビットマップ貼り付けが出来ました。
以下の通り試してみてください。

【手順1:ダイアログの作成】
 CRichEditCtrlを持つダイアログを作成します。
 ここでは以下の名前を使用します。
  CRichEditCtrlを持つダイアログのクラス名:CTestDialog
  CTestDialog内、CRichEditCtrlのID:IDC_MYRICH

【手順2:CRichEditCtrl派生クラスの作成】
 ワークスペースにCRichEditCtrl派生クラスを追加します。
 このクラスは、手順1のIDC_MYRICHに対するサブクラスになります。
 ここでは以下の名前を使用します。
  CRichEditCtrl派生クラスのクラス名:CMyRich

【手順3:サブクラス化】
 1.CTestDialogのメンバ変数に、CMyRichクラス変数を追加します。
   ここでは、この変数名をm_richTestとします。
 2.CTestDialog::OnInitDialog()に、以下の1行を追加します。

   m_richTest.SubclassDlgItem(IDC_MYRICH, this);

【手順4-1:CMyRichの編集1(初期化)】
   初期化するために、CMyRich::PreSubclassWindow()をオーバーライドします。
   クラスウィザードからは、「仮想関数の追加...」で追加してください。
   ここで、
    (1)ビットマップをリソースから読み込む
    (2)ビットマップのサイズを取得する
    (3)クライアント領域のサイズを取得する
    (4)重要:CMyRichの拡張スタイルに、WS_EX_TRANSPARENTを追加する
   の4つを行います(4以外は、描画方法等に応じて適宜変更して下さい)。
   一例として、次のようになります。

void CMyRich::PreSubclassWindow()
{
// TODO: この位置に固有の処理を追加するか、または基本クラスを呼び出してく
ださい

//(1)ビットマップをリソースから読み込む
m_BMP.LoadBitmap(IDB_BACKBMP);

//(2)ビットマップのサイズを取得する
BITMAP bufferBMP;
m_BMP.GetObject(sizeof(BITMAP), &bufferBMP);
m_sizeBMP.cx = bufferBMP.bmWidth;
m_sizeBMP.cy = bufferBMP.bmHeight;

//(3)クライアント領域のサイズを取得する
CRect rect;
GetClientRect(&rect);
m_ptClientOrg.x = rect.left;
m_ptClientOrg.y = rect.top;
m_sizeClient.cx = rect.Width();
m_sizeClient.cy = rect.Height();

//(4)CMyRichの拡張スタイルに、WS_EX_TRANSPARENTを追加する
ModifyStyleEx(0, WS_EX_TRANSPARENT);

//基本クラスは何もしていないので、省略可です
//CRichEditCtrl::PreSubclassWindow();
}

   変数の説明
    CBitmap m_BMP 背景画ビットマップを保管する変数
    IDB_BACKBMP 背景画ビットマップのリソースID
    CSize m_sizeBMP 背景画ビットマップのサイズ
    CPoint m_ptClientOrg クライアント領域の左上座標を保管する変数
    CSize m_sizeClient クライアント領域のサイズを保管する変数

【手順4-2:CMyRichの編集2(ビットマップ描画)】
   WM_ERASEBKGNDメッセージへのハンドラを追加します。
   ここで、ビットマップの描画を行います。
   ビットマップ描画後は、デフォルトの処理は呼び出さずにTRUEを返してくださ
い。
   これは、StretchBltでの描画例です。

BOOL CMyRich::OnEraseBkgnd(CDC* pDC)
{
// TODO: この位置にメッセージ ハンドラ用のコードを追加するかまたはデフォル
トの処理を呼び出してください

CDC memDC;
memDC.CreateCompatibleDC(pDC);
CBitmap* pOldBMP = (CBitmap*)memDC.SelectObject(&m_BMP);
pDC->StretchBlt(m_ptClientOrg.x, m_ptClientOrg.y, m_sizeClient.cx,
m_sizeClient.cy
, &memDC, 0, 0, m_sizeBMP.cx, m_sizeBMP.cy, SRCCOPY);
memDC.SelectObject(pOldBMP);

return TRUE;
}

その他:
(1)スクロールバーを使う場合は、常に描画する設定にしておいた方がきれいだと
思います。
   リソースエディタで、サブクラス化されるCRichEditCtrlのプロパティを設定
すればOKです。
   (サブクラスのModifyStyleExで設定する必要はありません)
(2)試していませんが、CMyRich::OnEraseBkgndで、MoveTo, LineToによる罫線の
描画も出来るはずです。
   フォントサイズを行ごとに変えたり、罫線の書式を変える場合は、こちらの方
が便利かも知れません。
(3)AfxInitRichEdit()の呼び出しをお忘れなく (言うまでもないですよね^^
;)

ゆたっちょ
31

[mfc 44952] RE: 普通のSDKやMFCからビデオRAMが見えるのか?

 渋木です。

> を使っています)、普通のCPU(Pen4など)からビデオカードのメモリ
> って見えるのですか?

 「CPU に見えるかどうか」は、ビデオデバイスが接続されているバスアーキテク
チャやビデオデバイス自体の設計によって異なります。

 「アプリケーションに見えるかどうか」ということなら、見えません。

--
// 渋木宏明 (Hiroaki SHIBUKI)
// mailto:h...@mbi.nifty.com
// http://www.hidori.jp/
// Microsoft MVP 2002-2003 of Windows Technology
31

[mfc 44951] 普通のSDKやMFCからビデオRAMが見えるのか?

近藤です。

 Windowsの画面に描画する場合、GDIを使うのが一般的と思います。

 PC-ATのアーキテクチャなどは全く知らないのですが(OSで仮想化された物
を使っています)、普通のCPU(Pen4など)からビデオカードのメモリって見
えるのですか?

 つまり、PC-9801でDOSならば、セグメントレジスタ(DSやES)を変
更すれば、VRAMにダイレクトにビット列を送れましたよね。

 私は、Windowsはプロテクトモードで動いている事、物理アドレス空間でな
く仮想アドレス空間でアプリケーションが動作している事、VRAMのメモリは、C
PUのアドレスバスに繋がっていそうにない事から不可能に思うのですが、どうなの
でしょうか?
30

[mfc 44950] Re: ユーザ認証

まつもとです。

In "[mfc 44948] ユーザ認証"
tyg wrote:
> VC6 MFC ADO です。
> 今MySqlを使ってデータベースへの接続を行いたいのですが,、、
> まず、最初にお伺いしたいのが、webからの接続はASPで行ったことはあるのですが、
> 今回はwebでないのでDBサーバに接続するのにPCのユーザ名とパスワードが必要かと
> 思ったのですが、
> webと同じくサーバに登録したユーザ名は必要ありませんでした。VBAで一度
> connection.openを行ったことが
> あるのですが、やはり特にサーバにユーザ登録をしてそのユーザ名でサーバにlogin
> というのはありませんでした。
> かってに接続して実行します。
> 普通にサーバの共有ファイルを開こうとしたときはやはりloginファイル名は聞かれ
> るのですが、、、
> MYSQLの実際のデータが入っているファイルのセキュリティ属性はeveroneで全部
> チェックが入っています。
> これだとloginできるんでしょうか?

 クライアント/サーバ型のDBMSは、クライアントが直接サーバのDB
ファイルをアクセスするわけではありません。
 クライアントはサーバ側のプログラム(サービス)と通信を行って、クエ
リーをサーバーへ送信し、結果をサーバから受け取るのです。
 DBファイルとのアクセスはサーバ側のプログラムが行います。だからク
ライアントがサーバマシンにログインして、DBファイルを共有する必要は
ありません。



---
松本 弘之
(株)ソフトプラネット
TEL: 092-474-4200
記事検索
Amazon.co.jp
  • ライブドアブログ