VC常用技巧集锦(一)

原创 2004年03月16日 16:55:00

一。如何限制编辑框中的准许字符以及修改输入的字符
使用ClassWizard处理WM_CHAR消息,计算nChar参量并决定所执行的操作,用户可以确定是否修改、传送字符。下例说明了如何显示字母字符,如果字符是字母字符,则调用CWnd ; OnChar,否则不调用OnChar.
void CMyEdit : : OnChar (UINT nChar , UINT nRepCnt , UITN nFlags )
{
file://Determine if nChar is an alphabetic character .
if (: : IsCharAlpha ( ( TCHAR) nChar ) )
CEdit : : OnChar (nChar, nRepCnt , nFlags );
}
如果要修改字符,则不能仅仅简单地用修改过的nChar调用CEdit : : OnChar,然后CEdit: : OnChar调用CWnd: : Default获取原来的wParam 和lParam 的值 ,这样是不行的。要修改一个字符,需要首先修改nChar,然后用修改过的nChar调用CWnd: : DefWindowProc。下例说明了如何将字符转变为大写:
file://Make all characters uppercase
void CMyEdit : : OnChar (UINT nChar , UINT nRepCnt , UINT nFlags )
{
file://Make sure character is uppercase .
if (: : IsCharAlpha ( .( TCHAR) nChar)
nChar=: : CharUpper (nChar ) ;
file://Bypass default OnChar processing and directly call
file://default window proc.
DefWindProc (WM_CHAR, nChar , MAKELPARAM (nRepCnt , nFlags )) ;
}

二。在程序运行期间,怎样禁止窗口右上方的关闭按钮
CMenu *pMenu = AfxGetMainWnd()->GetSystemMenu(FALSE) ;
if (pMenu)
pMenu->EnableMenuItem(SC_CLOSE, MF_BYCOMMAND|MF_GRAYED) ;

// 变为非禁止状态
CMenu *pMenu = AfxGetMainWnd()->GetSystemMenu(FALSE) ;
if (pMenu)
pMenu->EnableMenuItem(SC_CLOSE, MF_BYCOMMAND|MF_ENABLED) ;

三。画图屏幕不闪烁的方法
当使视窗的某一区域无效时,系统将发送WM_UPDATE消息,引发视类的重画。如果在OnDraw()函数中简单地将所有的图形对象重画,将引起明显的闪烁。因此,需要做相应的处理。本系统采用了先在内存中绘制图形,然后再把绘好的图形以位图方式从内存拷贝到窗口客户。
void CDrawView::OnDraw(CDC* pDC)
{
CDrawDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);

CDC dc;
CBitmap bitmap;

CBitmap* pOldBitmap;
CRect client;
CRect rect;
pDC->GetClipBox(client);//检取无效区
GetClientRect(rect);//检取整个客户区
if(dc.CreateCompatibleDC(pDC))//创建一个与pDC兼容的内存设备环境
{
if(bitmap.CreateCompatibleBitmap(pDC,rect.Width(),
rect.Height()))//创建一与pDC兼容的位图,大小为整个客户区
{
OnPrepareDC(&dc,NULL);//使dc与pDC具有同样的映射关系
pOldBitmap=dc.SelectObject(&bitmap);//将位图选入内存环境
dc.SelectClipRgn(NULL);//使dc的整个客户区都成无效区
dc.IntersectClipRect(client);//再“与上”检取的无效区,使
file://内存环境与pDC检取的无效区相等
}
}
CBrush brush;
if(!brush.CreateSolidBrush(RGB(255,255,255)))
return ;
brush.UnrealizeObject();
dc.FillRect(client,&brush);//将dc的作图区刷新成背景色

if(m_drawObjs.GetCount()!=0)
Draw(&dc);//将所有的画图对象在内存裁减区内重画


pDC->BitBlt(client.left,client.top,client.Width(),client.Height(),
&dc,client.left,client.top,SRCCOPY);//将内存裁减区的位图
file://拷贝到窗口裁减区
dc.SelectObject(pOldBitmap);

}

VC常用技巧集锦(一)

一。如何限制编辑框中的准许字符以及修改输入的字符使用ClassWizard处理WM_CHAR消息,计算nChar参量并决定所执行的操作,用户可以确定是否修改、传送字符。下例说明了如何显示字母字符,...
  • hejishan
  • hejishan
  • 2008年04月01日 16:30
  • 118

VC常用技巧集锦

(1) 如何通过代码获得应用程序主窗口的 指针?主窗口的 指针保存在CWinThread::m_pMainWnd中,调用AfxGetMainWnd实现。AfxGetMainWnd() ->ShowWi...
  • Civet148
  • Civet148
  • 2006年08月24日 20:21
  • 1605

《Unity 游戏开发技巧集锦》

欢迎大家到我们团队的官网上查看此书的详细介绍,下面是链接 《Unity 游戏开发技巧集锦》 我们的宗旨是:我们只做最专业的技术传播者!为了让广大程序员花最少的时间,掌握最新的技术! ...
  • Mr_AHao
  • Mr_AHao
  • 2015年05月21日 17:28
  • 899

Unity游戏开发技巧集锦2.1.3实现效果

Unity游戏开发技巧集锦2.1.3实现效果
  • u014621518
  • u014621518
  • 2014年12月08日 15:07
  • 671

DNN Tips(DNN技巧集-持续更新中)

开发DNN前期会碰到很多小问题,很多童鞋因此对DNN望而却步。但是如果有一个类似FAQ的常用列表帮助刚入门的童鞋解决一些常用问题,那么相信很有更多的dotnet程序员热爱DNN这个平台。我在以往的We...
  • missautumn
  • missautumn
  • 2013年11月23日 00:13
  • 2275

VC技巧集锦

呵呵, 最近在学VC。不过没有作长远打算。VC编程技巧锦集发表人:bain | 发表时间: 2005年四月04日, 20:06(hangwire发表于2001-12-29 8:39:30)[问题一]:...
  • huxia2008168
  • huxia2008168
  • 2008年12月23日 12:00
  • 56

VBA常用技巧代码解析

http://club.excelhome.net/thread-395683-1-1.html
  • navy2009
  • navy2009
  • 2012年02月27日 21:22
  • 1318

SuperMap iMobile for Android常见问题解答集锦(十三)

作者:皇皇 问:SuperMap iMobile for Android中是否支持实时GPS定位,怎么实现? 答:可以支持;通过LocationManagePlugin管理插件类,开启GPS设备,并...
  • supermapsupport
  • supermapsupport
  • 2017年03月02日 10:54
  • 816

Windows常用技巧集锦

1. Word中如何消除回车符     文件—选项—显示—勾掉段落标记 2. Windows不重启就使环境变量修改生效     以修改环境变量“PATH”为例,修改完成后,进入DOS命令提示符,...
  • slowtech
  • slowtech
  • 2016年03月10日 15:11
  • 75

Linux 常用技巧集锦

查找包含指定字符的文件所在的位置:find     find [dic] -name name 例如,在/目录下查找passwd文件所在的位置可以使用  find / -name passwd,结果...
  • bitsec
  • bitsec
  • 2015年02月01日 15:14
  • 302
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:VC常用技巧集锦(一)
举报原因:
原因补充:

(最多只允许输入30个字)