程序参考例程.docx
- 文档编号:27497584
- 上传时间:2023-07-02
- 格式:DOCX
- 页数:15
- 大小:21.93KB
程序参考例程.docx
《程序参考例程.docx》由会员分享,可在线阅读,更多相关《程序参考例程.docx(15页珍藏版)》请在冰豆网上搜索。
程序参考例程
效果四:
设置按钮在不同状态下的底色和文字颜色
假设按钮ID为IDC_BUTTON1
1.添加成员变量
CButtonSTm_btn;
2.添加Icon资源,设其ID设为IDI_ICON1
3.在OnInitDialog函数中初始化按钮
m_btn.SubclassDlgItem(IDC_BUTTON1,this);
m_btn.SetIcon(IDI_ICON1);
m_btn.SetColor(CButtonST:
:
BTNST_COLOR_BK_OUT,RGB(208,208,208));
m_btn.SetColor(CButtonST:
:
BTNST_COLOR_BK_FOCUS,RGB(208,208,208));
m_btn.OffsetColor(CButtonST:
:
BTNST_COLOR_BK_IN,30);
提示:
SetColor函数和OffsetColor函数的第一个参数表示按钮的各个状态,前景色就是文字的颜色,它们的取值表示:
BTNST_COLOR_BK_IN//鼠标放在按钮内时的背景色
BTNST_COLOR_FG_IN,//鼠标放在按钮内时的前景色
BTNST_COLOR_BK_OUT,//普通状态时的背景色
BTNST_COLOR_FG_OUT,//普通状态时的前景色
BTNST_COLOR_BK_FOCUS,//按钮被按下后的背景色
BTNST_COLOR_FG_FOCUS,//按钮被按下后的前景色
效果七:
添加Tooltips
假设按钮ID为IDC_BUTTON1
1.添加成员变量
CButtonSTm_btn;
2.添加Icon资源,设其ID设为IDI_ICON1
3.在OnInitDialog函数中初始化按钮
m_btn.SubclassDlgItem(IDC_BUTTON1,this);
m_btn.SetIcon(IDI_ICON1);
m_btn.SetTooltipText(_T("Thisisatooltip.\r\nMultiline!
"));
如何动态改变按钮上的文字内容?
1楼lywgm(荆江柳)回复于2005-04-0816:
00:
30得分20
在重载的DrawItem函数中用设备上下文自己绘制(用CDC类的绘制文本的函数将字符串绘制出来):
void CMyButton:
:
DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
CDC dc;
dc.Attach(lpDrawItemStruct->hDC);
//加设你的CString变量为str,你设制的文字格式(对其方式)为nFormat
dc.DrawText(str, lpDrawItemStruct->rcItem, nFormat);
dc.Detach();
}Top
2楼lywgm(荆江柳)回复于2005-04-0816:
03:
17得分0
这样你只要动态改变str的值就行了。
在DrawItem中可以设制字体和颜色、画自定义图片等Top
3楼imyourkobe()回复于2005-04-0816:
30:
27得分0
GetDlgItem(ID_BUTTON)->SetWindowText("文字");
CString str="动态文字";
GetDlgItem(IDC_BUTTONID)->SetWindowText(str);
4.CButton上的文字的颜色是怎么设的?
?
重载OnCtrlColor就可以了:
SetTextColor(..)
5.如何改变按钮(CButton)按下时的背景色
1楼koko1998发表于:
2009-08-1002:
43:
29
方法1:
加载bmp图片
方法2:
自绘button
...
2楼kelinwang19发表于:
2009-08-1002:
43:
29
重载LbuttonDown,在里面对按钮颜色做处理
3楼wshcdr发表于:
2009-08-1002:
43:
29
重载LbuttonDown,在里面对按钮颜色做处理
//////////////////////////////////
这个可以直接做?
4楼kugou123发表于:
2009-08-1002:
43:
29
自己重载一个Button类,自绘
5楼Snow_Ice11111发表于:
2009-08-1002:
43:
29
远在天边,近在眼前,楼上酷狗朋友的签名中那个地址就有个CXPbutton可以参考一下^_^
请不要给我分了。
6楼huwei001982发表于:
2009-08-1002:
43:
29
直接用 CButtonST, 或者用它里面的技术。
7楼csdmy发表于:
2009-08-1002:
43:
29
重载LBUTTONDOWN的消息,在响应函数里面重绘按钮,加上背景色!
8楼illocal发表于:
2009-08-1002:
43:
29
如何自绘呢?
哪位给个例子看看吧
9楼huangjianmin发表于:
2009-08-1002:
43:
29
谁能给我一个有下面三个特点的ButtonST类么:
1,有注释的
2花样比较多的
3只用一个.H和一个.CPP就可以用,而不再信赖其他类.
huangjianminl@
10楼LOWGUN发表于:
2009-08-1002:
43:
29
重载ONCTRLCLR消息函数
11楼illocal发表于:
2009-08-1002:
43:
29
不会自绘
另外,自绘以后对RadioButton的Push-Like形式的按钮有效吗?
12楼amanda11发表于:
2009-08-1002:
43:
29
哎,哎,哎,被别人问的烂掉的问题还在问,XX一下关键词有一大堆啊
13楼sjcode发表于:
2009-08-1002:
43:
29
重载CButton里的DrawItem,画吧
14楼nkwesley发表于:
2009-08-1002:
43:
29
挺难办的,要么用CButtonST类,要自己重画
用ONCTRLCLR好像是搞不定的
15楼nkwesley发表于:
2009-08-1002:
43:
29
我也想学习,大家来交流啊
作两个图片,bmp格式的,一个红灯,一个绿灯。
然后用一个标志位控制就好了。
加载图片的代码如下:
voidDrawBmp(intx,inty,COLORREFcolor,CStatic*Btn1)
{
HBITMAPhbitmap;
CClientDCdc(Btn1);
//ModifyStyle(0,BS_OWNERDRAW);
//SetWindowRgn(NULL,FALSE);
//装载位图
hbitmap=
:
:
LoadBitmap(:
:
AfxGetInstanceHandle(),
MAKEINTRESOURCE(color));
//将位图放入内存
HDChMemDC=:
:
CreateCompatibleDC(NULL);
SelectObject(hMemDC,hbitmap);
//显示位图
StretchBlt(//Btn1->m_hDC,
(HDC)dc,
x,y,
600,400,
hMemDC,
0,0,
300,200,
SRCCOPY);
//删除内存设备和位图
:
:
DeleteDC(hMemDC);
:
:
DeleteObject(hbitmap);
}
将一个*.BMP文件加入到CBitmapObject
创建你自已的CBitmap类(例如:
CMyBitmap)
加入一个装载位图的函数如下:
BOOLCMyBitmap:
:
LoadBitmap(LPCTSTRszFilename)
ASSERT(szFilename);
DeleteObject();
HBITMAPhBitmap=NULL;
hBitmap=(HBITMAP)LoadImage(NULL,szFilename,IMAGE_BITMAP,0,0,
LR_LOADFROMFILE|LR_CREATEDIBSECTION|LR_DEFAULTSIZE);
returnAttach(hBitmap);
}
如何将CBitmap写入文件
如果具有一个设备无关的位图句柄,把一个位图写入BMP文件非常简单:
在位图内容之
后写入BITMAPINFOHEADER信息即可。
正在装载数据……
需要设置BITMAPINFOHEADER的三个成员是bfType,
其值为"BM",bfSize,其值是位图的大小,以及,bfOffBits,其值为文件开始到位图
位的偏移量。
//WriteDIB-WritesaDIBtofile
//Returns-TRUEonsuccess
//szFile-Nameoffiletowriteto
//hDIB-HandleoftheDIB
BOOLWriteDIB(LPTSTRszFile,HANDLEhDIB)
BITMAPFILEHEADERhdr;
LPBITMAPINFOHEADERlpbi;
if(!
hDIB)
returnFALSE;
CFilefile;
if(!
file.Open(szFile,Cfile:
:
modeWrite|Cfile:
:
modeCreate))
returnFALSE;
lpbi=(LPBITMAPINFOHEADER)hDIB;
intnColors=1<
//Fillinthefieldsofthefileheader
hdr.bfType=((WORD)('M'<<8)|'B');//isalways"BM"
hdr.bfSize="GlobalSize"(hDIB)+sizeof(hdr);hdr.bfReserved1="0;"
hdr.bfReserved2="0;"hdr.bfOffBits="(DWORD)"(sizeof(hdr)+lpbi->biSize
+
nColors*sizeof(RGBQUAD));
//Writethefileheader
file.Write(&hdr,sizeof(hdr));
//WritetheDIBheaderandthebits
file.Write(lpbi,GlobalSize(hDIB));
returnTRUE;
串行通信:
OVERLAPPED OVERLAPPED结构类型声明如下:
typedefstruct_OVERLAPPED{
DWORDInternal;//操作系统保留,指出一个和系统相关的状态
DWORDInternalHigh;//指出发送或接收的数据长度
DWORDOffset;//文件传送的开始位置
DWORDOffsetHigh;//文件传送的字节偏移量的高位字
HANDLEhEvent;//指定一个I/O操作完成后触发的事件
}OVERLAPPED;
OVERLAPPED主要是设置异步I/O操作,异步I/O操作是指应用程序可以在后台读或者写数据,而在前台做其他事情。
Allendenver在他的《SerialCommunicationinWin32》中是这样解释OVERLAPPEDI/O的:
我个人认为还是比较准确的
OverlappedI/OisnotasstraightforwardasnonoverlappedI/O,butallowsmoreflexibilityandefficiency.AportopenforoverlappedoperationsallowsmultiplethreadstodoI/Ooperationsatthesametimeandperformotherworkwhiletheoperationsarepending.Furthermore,thebehaviorofoverlappedoperationsallowsasinglethreadtoissuemanydifferentrequestsanddoworkinthebackgroundwhiletheoperationsarepending.
串口的DCB结构
2007-06-1611:
33
串口通讯中的DCB结构
typedefstruct_DCB{//dcb
DWORDDCBlength;//sizeof(DCB)
DORDBaudRate;//currentbaudrate 指定当前的波特率
DWORDfBinary:
1;//binarymode,noEOFcheck 指定是否允许二进制模式WIN95中须为TRUE
DWORDfParity:
1;//enableparitychecking 指定奇偶校验是否允许
DWORDfOutxCtsFlow:
1;//CTSoutputflowcontrol指定CTS是否用于检测发送控制。
当为TRUE是CTS为OFF,发送将被挂起。
DWORDfOutxDsrFlow:
1;//DSRoutputflowcontrol 指定CTS是否用于检测发送控制。
当为TRUE是CTS为OFF,发送将被挂起。
DWORDfDtrControl:
2;//DTRflowcontroltype DTR_CONTROL_DISABLE值将DTR置为OFF, DTR_CONTROL_ENABLE值将DTR置为ON, DTR_CONTROL_HANDSHAKE允许DTR"握手",DWORDfDsrSensitivity:
1;
//DSRsensitivity当该值为TRUE时DSR为OFF时接收的字节被忽略
DWORDfTXContinueOnXoff:
1;//XOFFcontinuesTx
指定当接收缓冲区已满,并且驱动程序已经发送出XoffChar字符时发送是否停止。
TRUE时,在接收缓冲区接收到缓冲区已满的字节XoffLim且驱动程序已经发送出XoffChar字 符中止接收字节之后,发送继续进行。
FALSE时,在接收缓冲区接收到代表缓冲区已空的字节XonChar且驱动程序已经发送出恢复 发送的XonChar之后,发送继续进行。
DWORDfOutX:
1;//XON/XOFFoutflowcontrol TRUE时,接收到XoffChar之后便停止发送
接收到XonChar之后将重新开始
DWORDfInX:
1;//XON/XOFFinflowcontrol
TRUE时,接收缓冲区接收到代表缓冲区满的XoffLim之后,XoffChar发送出去
接收缓冲区接收到代表缓冲区空的XonLim之后,XonChar发送出去
DWORDfErrorChar:
1;//enableerrorreplacement
该值为TRUE且fParity为TRUE时,用ErrorChar成员指定的字符代替奇偶校验错误的接收字符
DWORDfNull:
1;//enablenullstripping TRUE时,接收时去掉空(0值)字节
DWORDfRtsControl:
2;//RTSflowcontrol
DWORDfAbortOnError:
1;//abortreads/writesonerror TRUE时,有错误发生时中止读和写操作
RTS_CONTROL_DISABLE时,RTS置为OFF
RTS_CONTROL_ENABLE时,RTS置为ON
RTS_CONTROL_HANDSHAKE时,
当接收缓冲区小于半满时RTS为ON
当接收缓冲区超过四分之三满时RTS为OFF
RTS_CONTROL_TOGGLE时,
当接收缓冲区仍有剩余字节时RTS为ON,否则缺省为OFF
DWORDfDummy2:
17;//reserved 未使用
WORDwReserved;//notcurrentlyused 未使用,必须为0
WORDXonLim;//transmitXONthreshold
指定在XON字符发送这前接收缓冲区中可允许的最小字节数
WORDXoffLim;//transmitXOFFthreshold
指定在XOFF字符发送这前接收缓冲区中可允许的最小字节数
BYTEByteSize;//numberofbits/byte,4-8 指定端口当前使用的数据位
BYTEParity;//0-4=no,odd,even,mark,space 指定端口当前使用的奇偶校验方法,可能为:
EVENPARITY,MARKPARITY,NOPARITY,ODDPARITY BYTEStopBits; 0,1,2=1,1.5,2 指定端口当前使用的停止位数,可能为:
ONESTOPBIT,ONE5STOPBITS,TWOSTOPBITS
charXonChar;//TxandRxXONcharacter 指定用于发送和接收字符XON的值
charXoffChar;//TxandRxXOFFcharacter 指定用于发送和接收字符XOFF值
charErrorChar;//errorreplacementcharacter本字符用来代替接收到的奇偶校验发生错误时的值
charEofChar;//endofinputcharacter 当没有使用二进制模式时,本字符可用来指示数据的结束
charEvtChar;//receivedeventcharacter 当接收到此字符时,会产生一个事件
WORDwReserved1;//reserved;donotuse未使用
}DCB;
CString,int,string,char*之间的转换
很有用的,所以把它记下来
1CString,int,string,char*之间的转换
string转CString
CString.format("%s",string.c_str());
char转CString
CString.format("%s",char*);
char转string
strings(char*);
string转char*
char*p=string.c_str();
// CString转std:
:
string
CStringstr=dlg.GetPathName();
setlocale(LC_ALL,"chs");
char*p=newchar[256];
wcstombs(p,str,256);
m_fileName=p;
1,string->CString
CString.format("%s",string.c_str());
用c_str()确实比data()要好.
2,char->string
strings(char*);
你的只能初始化,在不是初始化的地方最好还是用assign().
3,CString->string
strings(CString.GetBuffer());
GetBuffer()后一定要ReleaseBuffer(),否则就没有释放缓冲区所占的空间.
《C++标准函数库》中说的
有三个函数可以将字符串的内容转换为字符数组和C—string
1.data(),返回没有”\0“的
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 程序 参考 例程