在窗体中的WM_CTLCOLOR消息中响应下面的函数

HBRUSH CmyDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
/*

每一个控件刷新的时候都发送这个消息,其中pDC是控件的dc,pWnd是控件对应的CWnd类,nCtlColor是控件的类型。比如Edit控件对应的是CTLCOLOR_EDIT

*/

    
if ((pWnd->GetDlgCtrlID() == IDC_EDIT1) && (nCtlColor == CTLCOLOR_EDIT))
    
{
        COLORREF clr 
= RGB(255,0,0);
        pDC
->SetTextColor(clr);           //设置红色的文本
        clr = RGB(0,0,0);
        pDC
->SetBkColor(clr);             //设置黑色的背景

        
return ::CreateSolidBrush(clr);  //作为约定,返回背景色对应的刷子句柄。
    }

    
else
    
{
        HBRUSH hbr 
= CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
        
return hbr;
    }

}


/*
   返回的背景颜色是可以被文字覆盖的,但是SetBkColor的就不会,如果设置了DC的透明模式,则不会被覆盖住了。
*/

posted @ 2007-01-12 15:36 梁海泉 阅读(300) | 评论 (0)编辑 收藏

在窗体的WM_ERASEBKGND消息中响应下面的函数

BOOL CmyDlg::OnEraseBkgnd(CDC* pDC)
{
    CBrush brush(RGB(
255,0,0));      //先定义一个颜色的画刷
    CRect rect;
    GetClientRect(
&rect);            //得到窗体的rect,主要不要用GetWindowRect
    pDC->FillRect(&rect,&brush);     //dc中填充rect的区域,不用把画刷选到DC中,因为算是临时画图
    return true;                     //返回真,注释掉默认的基类调用,
    
//return CDialog::OnEraseBkgnd(pDC);
}

posted @ 2007-01-12 15:34 梁海泉 阅读(582) | 评论 (0)编辑 收藏

在对话框的PreTranslateMessage函数中插入下面的代码

BOOL CXXXDlg::PreTranslateMessage(MSG* pMsg) 
{
if(pMsg->message == WM_KEYDOWN)
{
// 27 ESC 13 Enter
if(pMsg->wParam == 27 || pMsg->wParam == 13)
return TRUE; // 已经处理
}

return CDialog::PreTranslateMessage(pMsg);
}
 

posted @ 2007-01-12 15:33 梁海泉 阅读(450) | 评论 (0)编辑 收藏

首先要在窗口类中定义一个成员函数,类似下面的格式

LRESULT func(WPARAM wParam,LPARAM lParam);

在消息宏中添加下面的宏

ON_MESSAGE(WM_MYMSG, &CmyDlg::func)

其中WM_MYMSG是消息号,可以为任何UINT类型的数据,从WM_USER以后的为自定义的消息。可以define宏来定义,如:#define  WM_MYMSG WM_USER + 10

然后在实现文件中添加消息函数的实现部分就OK了,记得要返回值。

LRESULT func(WPARAM wParam,LPARAM lParam)
{
  //...这里是自己添加的消息代码
  return true;
}

posted @ 2007-01-12 15:30 梁海泉 阅读(315) | 评论 (0)编辑 收藏

在CmyApp::InitInstance()函数中输入以下的语句


 TCHAR strAppName[]
= _T( " 输入互斥对象的名字,要字符串 " );
 HANDLE hMutex 
=  NULL;
 hMutex 
=  CreateMutex(NULL, FALSE, strAppName);

 
if  (hMutex == NULL)  return  FALSE;

 
if  (GetLastError() == ERROR_ALREADY_EXISTS)
 
{
          
//  不是第一次运行
 }

 
else
 
{
          
//  第一次运行
 }


posted @ 2007-01-12 15:29 梁海泉 阅读(96) | 评论 (0)编辑 收藏

仅列出标题
共2页: 1 2