??xml version="1.0" encoding="utf-8" standalone="yes"?>偷偷做久久久久网站,伊人久久大香线蕉av一区,亚洲狠狠婷婷综合久久久久 http://www.shnenglu.com/qiaodong/archive/2007/08/03/29310.html乔栋 乔栋 Fri, 03 Aug 2007 09:05:00 GMT http://www.shnenglu.com/qiaodong/archive/2007/08/03/29310.html http://www.shnenglu.com/qiaodong/comments/29310.html http://www.shnenglu.com/qiaodong/archive/2007/08/03/29310.html#Feedback 0 http://www.shnenglu.com/qiaodong/comments/commentRss/29310.html http://www.shnenglu.com/qiaodong/services/trackbacks/29310.html 若将char*转换成CStringQ除了直接赋值外Q还可用CString::formatq行。例如: char chArray[] = "This is a test"; char * p = "This is a test"; ? LPSTR p = "This is a test"; 或在已定义Unicode应的用程序中 TCHAR * p = _T("This is a test"); ? LPTSTR p = _T("This is a test"); CString theString = chArray; theString.format(_T("%s"), chArray); theString = p; 2、CString转换成char* 若将CStringc{换成char*(LPSTR)cdQ常怋用下列三U方法: Ҏ一Q用强制{换。例如: CString theString( "This is a test" ); LPTSTR lpsz =(LPTSTR)(LPCTSTR)theString; Ҏ二,使用strcpy。例如: CString theString( "This is a test" ); LPTSTR lpsz = new TCHAR[theString.GetLength()+1]; _tcscpy(lpsz, theString); 需要说明的是,strcpy(或可UdUnicode/MBCS的_tcscpy)的第二个参数? const wchar_t* (Unicode)或const char* (ANSI)Q系l编译器会自动对其q行转换? Ҏ三,使用CString::GetBuffer。例如: CString s(_T("This is a test ")); LPTSTR p = s.GetBuffer(); // 在这里添加用p的代? if(p != NULL) *p = _T('\0'); s.ReleaseBuffer(); // 使用完后及时释放Q以便能使用其它的CString成员函数
]]> socket 初始?/title> http://www.shnenglu.com/qiaodong/archive/2007/07/22/28582.html乔栋 乔栋 Sun, 22 Jul 2007 12:56:00 GMT http://www.shnenglu.com/qiaodong/archive/2007/07/22/28582.html http://www.shnenglu.com/qiaodong/comments/28582.html http://www.shnenglu.com/qiaodong/archive/2007/07/22/28582.html#Feedback 0 http://www.shnenglu.com/qiaodong/comments/commentRss/28582.html http://www.shnenglu.com/qiaodong/services/trackbacks/28582.html 1 WORD wVersionRequested = MAKEWORD( 1 , 1 ); 2 WSADATA wsaData; 3 int err = WSAStartup(wVersionRequested, & wsaData); 4 if (err != 0 ) 5 { 6 WSACleanup(); 7 }
]]> mysql 字段详解 http://www.shnenglu.com/qiaodong/archive/2007/07/19/28355.html乔栋 乔栋 Thu, 19 Jul 2007 06:42:00 GMT http://www.shnenglu.com/qiaodong/archive/2007/07/19/28355.html http://www.shnenglu.com/qiaodong/comments/28355.html http://www.shnenglu.com/qiaodong/archive/2007/07/19/28355.html#Feedback 0 http://www.shnenglu.com/qiaodong/comments/commentRss/28355.html http://www.shnenglu.com/qiaodong/services/trackbacks/28355.html MySQL支持大量的列cdQ它可以被分?c:数字cd、日期和旉cd以及字符?字符)cd。本节首先给出可用类型的一个概qͼq且ȝ每个列类型的存储需求,然后提供每个cM的类型性质的更详细的描q。概q有意简化,更详l的说明应该考虑到有关特定列cd的附加信息,例如你能为其指定值的允许格式? 由MySQL支持的列cd列在下面。下列代码字母用于描qCQ? M 指出最大的昄寸。最大的合法的显C尺寸是 255 ? D 适用于Q点类型ƈ且指随在十进制小数点后的数码的数量。最大可能的值是30Q但是应该不大于M-2? Ҏ?“[”?#8220;]”)指出可选的cd修饰W的部分? 注意Q如果你指定一个了为ZEROFILLQMySQLؓ该列自动地增加UNSIGNED属性? TINYINT[(M)] [UNSIGNED] [ZEROFILL] 一个很的整数。有W号的范围是-128?27Q无W号的范围是0?55? SMALLINT[(M)] [UNSIGNED] [ZEROFILL] 一个小整数。有W号的范围是-32768?2767Q无W号的范围是0?5535? MEDIUMINT[(M)] [UNSIGNED] [ZEROFILL] 一个中{大整数。有W号的范围是-8388608?388607Q无W号的范围是0?6777215? INT[(M)] [UNSIGNED] [ZEROFILL] 一个正常大整数。有W号的范围是-2147483648?147483647Q无W号的范围是0?294967295? INTEGER[(M)] [UNSIGNED] [ZEROFILL] q是INT的一个同义词? BIGINT[(M)] [UNSIGNED] [ZEROFILL] 一个大整数。有W号的范围是-9223372036854775808?223372036854775807Q无W号的范围是0? 18446744073709551615。注意,所有算术运用有符LBIGINT或DOUBLE值完成,因此你不应该使用大于9223372036854775807Q?3?的有W号大整敎ͼ除了位函敎ͼ注意Q当两个参数是INTEGER值时Q???用BIGINTq算Q这意味着如果你乘2个大整数(或来自于q回整数的函?Q如果结果大?223372036854775807Q你可以得到意外的结果。一个QҎ字,不能是无W号的,对一个单_ֺ点敎ͼ其精度可以是<=24Q对一个双_ֺ点敎ͼ是在25 ?3之间Q这些类型如FLOAT和DOUBLEcd马上在下面描q。FLOAT(X)有对应的FLOAT和DOUBLE相同的范_但是昄寸和小C数是未定义的。在MySQL3.23中,q是一个真正的点倹{在更早的MySQL版本中,FLOAT(precision)L?位小数。该句法ZODBC兼容性而提供? FLOAT[(M,D)] [ZEROFILL] 一个小(单精?点数字。不能无W号。允许的值是-3.402823466E+38?1.175494351E-38Q? ?.175494351E-38?.402823466E+38。M是显C宽度而D是小数的位数。没有参数的FLOAT或有<24 的一个参数表CZ个单_֯点数字? DOUBLE[(M,D)] [ZEROFILL] 一个正常大?双精?点数字。不能无W号。允许的值是-1.7976931348623157E+308?2.2250738585072014E-308?0?.2250738585072014E-308?.7976931348623157E+308。M是显C宽度而D是小C数。没有一个参数的DOUBLE或FLOAT(X)Q?5 < = X < = 53Q代表一个双_֯点数字? DOUBLE PRECISION[(M,D)] [ZEROFILL] REAL[(M,D)] [ZEROFILL] q些是DOUBLE同义词? DECIMAL[(M[,D])] [ZEROFILL] 一个未压羃(unpack)的QҎ字。不能无W号。行为如同一个CHAR列:“未压~?#8221;意味着数字作ؓ一个字W串被存储,值的每一位用一个字W。小数点Qƈ且对于负敎ͼ“-”W号不在M中计。如果D?Q值将没有数Ҏ数部分。DECIMAL值的最大范围与DOUBLE相同Q但是对一个给定的DECIMAL列,实际的范围可以通过M和D的选择被限制。如果D被省略,它被讄?。如果M被省掉,它被讄?0。注意,在MySQL3.22里,M参数包括W号和小数点? NUMERIC(M,D) [ZEROFILL] q是DECIMAL的一个同义词? DATE 一个日期。支持的范围?1000-01-01'?9999-12-31'。MySQL?YYYY-MM-DD'格式来显CDATE|但是允许你用字W串或数字把DlDATE列? DATETIME 一个日期和旉l合。支持的范围?1000-01-01 00:00:00'?9999-12-31 23:59:59'。MySQL?YYYY-MM-DD HH:MM:SS'格式来显CDATETIME|但是允许你用字W串或数字把DlDATETIME的列? TIMESTAMP[(M)] 一个时间戳记。范围是'1970-01-01 00:00:00'?037q的某时。MySQL以YYYYMMDDHHMMSS、YYMMDDHHMMSS、YYYYMMDD或YYMMDD格式来显CTIMESTAMP|取决于是否M?4Q或省略)?2??Q但是允怽使用字符串或数字把DlTIMESTAMP列。一个TIMESTAMP列对于记录一个INSERT或UPDATE操作的日期和旉是有用的Q因为如果你不自q它赋|它自动地被设|ؓ最q操作的日期和时间。你以可以通过赋给它一个NULLD|它为当前的日期和时间? TIME 一个时间。范围是'-838:59:59'?838:59:59'。MySQL?HH:MM:SS'格式来显CTIME|但是允许你用字W串或数字把DlTIME列? YEAR[(2|4)] 一??位数字格式的q?~省??。允许的值是1901?155Q和0000Q?位年格式Q,如果你?位,1970-2069( 70-69)。MySQL以YYYY格式来显CYEAR|但是允许你把使用字符串或数字DlYEAR列。(YEARcd在MySQL3.22中是新类型。) CHAR(M) [BINARY] 一个定长字W串Q当存储ӞL是用I格填满双到指定的长度。M的范围是1 ?255个字W。当D索时Q空格尾部被删除。CHAR值根据缺省字W集以大写不区分的方式排序和比较,除非l出BINARY关键词。NATIONAL CHARQ短形式NCHAR)是ANSI SQL的方式来定义CHAR列应该用缺省字W集。这是MySQL的缺省。CHAR是CHARACTER的一个羃写? [NATIONAL] VARCHAR(M) [BINARY] 一个变长字W串。注意:当D存储ӞN的空D删除(q不同于ANSI SQL规范)。M的范围是1 ?255个字W?VARCHAR值根据缺省字W集以大写不区分的方式排序和比较,除非l出BINARY关键词倹{?VARCHAR是CHARACTER VARYING一个羃写? TINYBLOB TINYTEXT 一个BLOB或TEXT列,最大长度ؓ255(2^8-1)个字W? BLOB TEXT 一个BLOB或TEXT列,最大长度ؓ65535(2^16-1)个字W? MEDIUMBLOB MEDIUMTEXT 一个BLOB或TEXT列,最大长度ؓ16777215(2^24-1)个字W? LONGBLOB LONGTEXT 一个BLOB或TEXT列,最大长度ؓ4294967295(2^32-1)个字W? ENUM('value1','value2',...) 枚D。一个仅有一个值的字符串对象,q个值式选自与值列?value1'?value2', ...,或NULL。一个ENUM最多能?5535不同的倹{? SET('value1','value2',...) 一个集合。能有零个或多个值的一个字W串对象Q其中每一个必M值列?value1', 'value2', ...选出。一个SET最多能?4个成员?/span>
]]> C E序设计l典书籍 http://www.shnenglu.com/qiaodong/archive/2007/06/07/25706.html乔栋 乔栋 Thu, 07 Jun 2007 01:56:00 GMT http://www.shnenglu.com/qiaodong/archive/2007/06/07/25706.html http://www.shnenglu.com/qiaodong/comments/25706.html http://www.shnenglu.com/qiaodong/archive/2007/06/07/25706.html#Feedback 0 http://www.shnenglu.com/qiaodong/comments/commentRss/25706.html http://www.shnenglu.com/qiaodong/services/trackbacks/25706.html
CE序设计教程
Q美QH.M.Deitel{著 薛万鹏等?/ 2000q??/ 机械工业出版C?/ 33?/ 787*1092 1/16 /
C陷阱与缺?/a>
Andrew Koenig?高巍?/ 2002q?1?/ 人民邮电出版C?/ 30?/ 720*980 1/16 /
C语言参考手册(原书W?版)
Q美QSamuel P.Harbison III/Guy L.Steele Jr.?׃潘等?/ 2003q??/ 机械工业出版C?/ 39?/ 787*1092 1/16 /
C专家~程
Peter Van Der Linden?徐L?/ 2002q?2?/ 人民邮电出版C?/ 40?/ 800*1000 1/16 /
CE序设计语言
Brian W.Kernighan / 1997q??/ 清华大学出版C?/ 0?/ 850*1168 1/32 /
]]> 获得控g内容 http://www.shnenglu.com/qiaodong/archive/2007/06/04/25528.html乔栋 乔栋 Mon, 04 Jun 2007 15:18:00 GMT http://www.shnenglu.com/qiaodong/archive/2007/06/04/25528.html http://www.shnenglu.com/qiaodong/comments/25528.html http://www.shnenglu.com/qiaodong/archive/2007/06/04/25528.html#Feedback 0 http://www.shnenglu.com/qiaodong/comments/commentRss/25528.html http://www.shnenglu.com/qiaodong/services/trackbacks/25528.html Edit < 输入?/span>> 1 .(CWnd * )GetDlgItem(IDC_EDIT_1)) -> SetWindowText( " 0 " ); 2 . int n = GetDlgItemInt(IDC_EDIT_1, NULL, true ); 3 .(CWnd * )GetDlgItem(IDC_EDIT_1)) -> GetWindowText(cs); Combox < 下拉?/span>> 1 .((CComboBox * )GetDlgItem(IDC_COMB_1)) -> SetCurSel( 1 ); 2 . GetDlgItemText(IDC_COMB_1, cs, 50 ); 3 . int i = m_COM.GetCurSel(); m_COM.GetLBText(i,cs); 4 .m_COM.AddString(cs);m_COM.DeleteString( 0 );m_COM.SetCurSel( 0 ); Radio < 单选按?/span>> 1 .((CButton * )GetDlgItem(IDC_RADIO_1)) -> SetCheck( true ); 2 . if (((CButton * )GetDlgItem(IDC_RADIO_1)) -> GetCheck()) {} 3 .((CButton * )GetDlgItem(IDC_RADIO_1)) -> SetCheck( true ); List Control < 列表 > 1 .m_list2.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES); m_list2.InsertColumn( 0 , " TagID " ,LVCFMT_LEFT, 60 ); m_list2.InsertColumn( 1 , " TagType " ,LVCFMT_CENTER, 120 ); m_list2.InsertItem(i,cs1); m_list2.SetItemText(i, 1 ,cs2); 2 . if (m_list2.GetSelectedItem() !=- 1 ) { int i = m_list2.GetSelectionMark(); cs = m_list2.GetItemText(i, 0 ); } 3 . int i = m_List2.GetItemCount(); 4 .m_list2.DeleteItem(i);m_list2.DeleteAllItems(); ListBox < 列表?/span>> 1 .((CListBox * )listBox) -> InsertString( 0 , str); Button < 按钮 > 1 .((CWnd * )GetDlgItem(IDC_BUTTON_1)) -> ShowWindow( true ); 2 .((CWnd * )GetDlgItem(IDC_BUTTON_1)) -> EnableWindow( true );
]]> xppȝ下SQL安装提示文g挂v的解x?/title> http://www.shnenglu.com/qiaodong/archive/2007/05/28/24970.html乔栋 乔栋 Mon, 28 May 2007 04:26:00 GMT http://www.shnenglu.com/qiaodong/archive/2007/05/28/24970.html http://www.shnenglu.com/qiaodong/comments/24970.html http://www.shnenglu.com/qiaodong/archive/2007/05/28/24970.html#Feedback 0 http://www.shnenglu.com/qiaodong/comments/commentRss/24970.html http://www.shnenglu.com/qiaodong/services/trackbacks/24970.html
在Windwos Xp?要安装Sql或sp补丁以及其他软g,其是微软自q软g的时?pȝ提示之前有挂L安装操作Q要求重启,q里往往重启无用Q解军_法:
到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager
删除PendingFileRenameOperations 再重新安装就可以?
]]> M清单 http://www.shnenglu.com/qiaodong/archive/2007/05/23/24679.html乔栋 乔栋 Wed, 23 May 2007 02:45:00 GMT http://www.shnenglu.com/qiaodong/archive/2007/05/23/24679.html http://www.shnenglu.com/qiaodong/comments/24679.html http://www.shnenglu.com/qiaodong/archive/2007/05/23/24679.html#Feedback 0 http://www.shnenglu.com/qiaodong/comments/commentRss/24679.html http://www.shnenglu.com/qiaodong/services/trackbacks/24679.html 正在看霜冷长治I觉得很好看?
]]> 资源打成DLL http://www.shnenglu.com/qiaodong/archive/2007/04/24/22712.html乔栋 乔栋 Tue, 24 Apr 2007 04:00:00 GMT http://www.shnenglu.com/qiaodong/archive/2007/04/24/22712.html http://www.shnenglu.com/qiaodong/comments/22712.html http://www.shnenglu.com/qiaodong/archive/2007/04/24/22712.html#Feedback 0 http://www.shnenglu.com/qiaodong/comments/commentRss/22712.html http://www.shnenglu.com/qiaodong/services/trackbacks/22712.html 阅读全文 ]]> VC中动态添加控?/title> http://www.shnenglu.com/qiaodong/archive/2007/04/23/22640.html乔栋 乔栋 Mon, 23 Apr 2007 06:44:00 GMT http://www.shnenglu.com/qiaodong/archive/2007/04/23/22640.html http://www.shnenglu.com/qiaodong/comments/22640.html http://www.shnenglu.com/qiaodong/archive/2007/04/23/22640.html#Feedback 0 http://www.shnenglu.com/qiaodong/comments/commentRss/22640.html http://www.shnenglu.com/qiaodong/services/trackbacks/22640.html 动态控件是指在需要时由Create()创徏的控Ӟq与预先在对话框中放|的控g是不同的? 一、创建动态控Ӟ Z对照Q我们先来看一下静态控件的创徏?br> 攄静态控件时必须先徏立一个容器,一般是对话框,q时我们在对话框~辑H口中,从工L口中拖出所需控g攑֜对话框中卛_Q再适当修改控gIDQ设|控件属性,一个静态控件就创徏好了Q当对话框被昄Ӟ其上的控件也会显C?br> 静态控件不需要调用Create()函数来创建?br> 而创建动态控件有很大不同Q以下以按钮ZQ看一下动态控件的创徏q程Q?br> 1.建立控gIDP IDh控g的标识,创徏控g前必d为它讄一个ID受?br> 打开资源中的“String Table”Q在I白行上双击鼠标Q这时会弹出一个ID属性对话框Q在其中的ID~辑框中输入IDQ如QIDC_MYBUTTONQ在Caption中输入控件标题或注解Q注QCaption框不能ؓI,为空会导致创建失败)Q这里我输入的是按钮上要昄的文?-动态按钮?br> 2.建立控g对象Q?br> 不同U类的控件应创徏不同的类对象Q?br> ·按钮控g CButton Q包括普通按钮、单选按钮和复选按钮) ·~辑控g CEdit ·静态文本控?CStatic ·标签控g CTabCtrl ·旋{控g CSpinButtonCtrl ·滑标控g CSliderCtrl ·多信息编辑控?CRichEditCtrl ·q度条控?CProgressCtrl ·滚动条控?CSrcollBar ·l合框控?CComboBox ·列表框控?CListBox ·囑փ列表控g CImageCtrl ·树状控g CTreeCtrl ·动画控g CAnimateCtrl 本例中我们创Z个CButtoncȝ普通按钮。注意不能直接定义CButton对象Q如QCButton m_MyBut;q种定义只能用来l静态控件定义控制变量,不能用于动态控件?br> 正确做法是用new调用CButton构造函数生成一个实例:
CButton *p_MyBut = new CButton();
然后用CButtoncȝCreate()函数创徏Q该函数原型如下Q?br>
BOOL Create( LPCTSTR lpszCaption, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID );
lpszCaption是按钮上昄的文本;dwStyle指定按钮风格Q可以是按钮风格与窗口风格的l合Q取值有Q?br> H口风格Q?br> ·WS_CHILD 子窗口,必须?br> ·WS_VISIBLE H口可见Q一般都?br> ·WS_DISABLED 用H口Q创建初始状态ؓ灰色不可用的按钮时?br> ·WS_TABSTOP 可用Tab键选择 ·WS_GROUP 成组Q用于成l的单选按钮中的第一个按?br> 按钮风格Q?br> ·BS_PUSHBUTTON 下压式按钮,也即普通按?br> ·BS_AUTORADIOBUTTON 含自动选中状态的单选按?br> ·BS_RADIOBUTTON 单选按钮,不常?br> ·BS_AUTOCHECKBOX 含自动选中状态的复选按?br> ·BS_CHECKBOX 复选按钮,不常?br> ·BS_AUTO3STATE 含自动选中状态的三态复选按?br> ·BS_3STATE 三态复选按钮,不常?br> 以上风格指定了创建的按钮cdQ不能同时用,但必L其一?br> ·BS_BITMAP 按钮上将昄位图 ·BS_DEFPUSHBUTTON 讄为默认按钮,只用于下压式按钮Q一个对话框中只能指定一个默认按?br> ·rect指定按钮的大和位置Q?br> ·pParentWnd指示拥有按钮的父H口Q不能ؓNULLQ?br> ·nID指定与按钮关联的IDP用上一步创建的ID受?br> 不同控gcȝCreate()函数略有不同Q可参考相兌料?br> 例:p_MyBut->Create( "动态按?, WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, CRect(20,10,80,40), this, IDC_MYBUTTON ); q样Q我们就在当前对话框中的(20,10)处创Z?0Q高30Q按钮文字ؓ“动态按?#8221;的下压式按钮?br> Z使创E更方便易用Q我定义了如下函敎ͼ
CButton* CTextEditorView::NewMyButton(int nID,CRect rect,int nStyle) { CString m_Caption; m_Caption.LoadString( nID ); //取按钮标?br>CButton *p_Button = new CButton(); ASSERT_VALID(p_Button); p_Button->Create( m_Caption, WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON | nStyle, rect, this, nID ); //创徏按钮 return p_Button; }
其中m_Caption.LoadString( nID )是从字符串表中读取按钮文本,q样在创建按钮IDӞ应该把文本设|好Q参数nStyle为除必须风格外的额外风格?br> 以下Q我调用该函数创Z个按钮,q指定第一个按钮ؓ默认按钮Q按钮的ID已预先设|好了:
CButton *p_MyBut[3]; p_MyBut[0] = NewMyButton( ID_MYBUT1, CRect(10,20,50,35), BS_DEFPUSHBUTTON ); p_MyBut[1] = NewMyButton( ID_MYBUT2, CRect(55,20,95,35), 0 ); p_MyBut[2] = NewMyButton( ID_MYBUT3, CRect(100,20,140,35), 0 );
二、动态控件的响应 Q?br> 动态控件的响应函数不能用ClassWizarddQ只能手动添加。仍以上面的按钮ZQ我们制作按钮的单击响应函数?br> 1.在MESSAGE_MAP中添加响应函敎ͼ MESSAGE_MAP表中定义了消息响应函敎ͼ其格式ؓQ消息名(ID,函数?Q当我们用ClassWizardd函数Ӟ会自动添加在AFX_MSG_MAP括v的区间内Q如Q?br>
BEGIN_MESSAGE_MAP(CTextEditorView, CFormView) //{{AFX_MSG_MAP(CTextEditorView) ON_BN_CLICKED(IDC_ICONBUT0, OnIconbut0) //}}AFX_MSG_MAP END_MESSAGE_MAP()
手工d时不要添加到AFX_MSG_MAP区间内,以防ClassWizard不能正常工作Q如Q?
BEGIN_MESSAGE_MAP(CTextEditorView, CFormView) //{{AFX_MSG_MAP(CTextEditorView) ON_BN_CLICKED(IDC_ICONBUT0, OnIconbut0) //}}AFX_MSG_MAP ON_BN_CLICKED(ID_MYBUT1, OnMybut1) ON_BN_CLICKED(ID_MYBUT2, OnMybut2) ON_BN_CLICKED(ID_MYBUT3, OnMybut3) END_MESSAGE_MAP()
其中ON_BN_CLICKED是按钮单L息?br> 2.在头文g中添加函数定义: 用ClassWizardd函数Ӟ会在头文件的AFX_MSG区间内添加函数定义,如:
protected: //{{AFX_MSG(CTextEditorView) afx_msg void OnIconbut0(); //}}AFX_MSG DECLARE_MESSAGE_MAP()
我们模仿q种形式Q只是把函数定义d到AFX_MSG区间外就行了Q?br>
protected: //{{AFX_MSG(CTextEditorView) afx_msg void OnIconbut0(); //}}AFX_MSG afx_msg void OnMybut1(); afx_msg void OnMybut2(); afx_msg void OnMybut3(); DECLARE_MESSAGE_MAP()
3.~写消息响应函数Q?br> 以上是把消息和函数关联v来了Q具体在单击按钮后应做的工作在函C完成Q?
void CTextEditorView::OnMybut1() { MessageBox( "哈!你单M动态按钮? ); } void CTextEditorView::OnMybut2() { …… } void CTextEditorView::OnMybut3() { …… }
除了按钮的响应函数外Q你q可以用上面获得的指针访问按钮,如: 修改按钮的大和位置Qp_MyBut[0]->MoveWindow(……); 修改按钮文本Qp_MyBut[0]->SetWindowText(……); 昄/隐藏按钮Qp_MyBut[0]->ShowWindow(……);{等?br>三、回收资源: ׃动态控件对象是由new生成的,它不会被E序自动释放Q所以需手工释放。在控g不再使用时可以删除它Q?br>
if( p_MyBut[0] ) delete p_MyBut[0];
以上是按钮控g动态生成的Ҏ。下面,再看一下单选按钮的动态生成问题?四、实例:单选按钮组的动态生?br> 单选按钮也属于CButtonc,但由于单选按钮L成组使用的,所以它在制作和使用上与普通按钮有一定区别?br> 假设有三个单选按钮组成一l,初始ӞW一个单选按钮处于选中状态?br> 我们先来看静态制作方法:在对话框中放|三个单选按钮,讄属性如下: ·Radio1属性:Visible、Group、Tab stop、Auto ·Radio2属性:Visible、Tab stop、Auto ·Radio3属性:Visible、Tab stop、Auto q样的属性设|就把三个单选按钮分成了一l,它们一ơ只能有一个被选中Q若对话框中q有其它成组的单选按钮,使用时也会互不干扰。但q时q没有ɽW一个按钮处于选中状态?br> 接着qClassWizardl单选按钮添加变量,q里只需为第一个单选按钮添加变量即可。设变量名ؓm_RadioQ类型选ؓint型。在构造函CClassWizard把m_Radio的D|ؓ-1Q我们把它改?Q这样在q行E序时可以看到第一个单选按钮处于选中状态了。之后,q应该用ClassWizardZ个单选按钮添加单d应函敎ͼ在里面修改m_Radio的值对应三个单选按钮就可以了?br> 以上是通常制作单选按钮组的办法,现我们欲改ؓ动态生成,主要要解x钮分l和单击控制问题。以下ؓ制作步骤Q?br> 1.定义三个单选按钮的IDQ?br> 打开资源中的“String Table”Q在其中d三个ID| ·W一个:ID为IDC_MYRADIO1QCaption为单? ·W二个:ID为IDC_MYRADIO2QCaption为单? ·W三个:ID为IDC_MYRADIO3QCaption为单? 其中Caption为按钮上要显C的文字Q可Ҏ需要设|?br> 2.用CButtoncȝCreate()函数生成三个单选按钮: 为方便v见,先定义一个函数生成单选按钮:
CButton* CTextEditorView::NewMyRadio(int nID,CRect rect,int nStyle) { CString m_Caption; m_Caption.LoadString( nID ); //取按钮标?br> CButton *p_Radio = new CButton(); ASSERT_VALID(p_Radio); p_Radio->Create( m_Caption, WS_CHILD | WS_VISIBLE | nStyle | WS_TABSTOP | BS_AUTORADIOBUTTON, rect, this, nID ); //创徏按钮 return p_Radio; }
函数LoadString()用于?#8220;String Table”中读取按钮文本,Create()函数中设定了单选按钮必ȝ属性,其中包括了Visible、Tab stop、Auto属性?br> 参数nID为单选按钮IDPrect为单选按钮尺寸,nStyle为除必要属性外的其它属性。返回gؓ指向新徏按钮的指针?br> 有了q个函数后,创徏单选按钮组时只要依ơ调用该函数卛_Q其中单选按钮组的第一个单选按钮必L定WS_GROUP属性?br>
CButton *p_MyRadio[3]; p_MyRadio[0] = NewMyRadio( IDC_MYRADIO1, CRect(15,90,60,105), WS_GROUP ); p_MyRadio[1] = NewMyRadio( IDC_MYRADIO2, CRect(15,108,60,123), 0 ); p_MyRadio[2] = NewMyRadio( IDC_MYRADIO3, CRect(15,126,60,141), 0 );
3.定义单选按钮组的控制变量,讄W一个单选按钮ؓ选中状态: q里不能用ClassWizardd变量Q也不要在DoDataExchange()中添加控制变量,因ؓ动态控件一开始ƈ不存在,在DoDataExchange()中添加控制变量会造成q行错误。这里我们只需在头文g中随意定义一个int型变量作为控制变量即可,如:
在构造函C讄其初gؓ0Qm_SelRadio = 0; 在上面的创徏按钮的语句中Q用SetCheck()函数讄初始选中的按钮:
CButton *p_MyRadio[3]; p_MyRadio[0] = NewMyRadio( IDC_MYRADIO1, CRect(15,90,60,105), WS_GROUP ); p_MyRadio[1] = NewMyRadio( IDC_MYRADIO2, CRect(15,108,60,123), 0 ); p_MyRadio[2] = NewMyRadio( IDC_MYRADIO3, CRect(15,126,60,141), 0 ); p_MyRadio[m_SelRadio]->SetCheck(1); //讄W一个单选ؓ选中状?
在SetCheck()函数中,参数?表示讄为选中状态,?表示未选中状态?br> 4.d鼠标单击响应函数Q?br> 鼠标单击某单选按钮后Q其状态已l能自动改变Q这里我们还需修改控制变量m_SelRadio的|以便跟踪选中的单选按钮?br> 首先在MESSAGE_MAP中把鼠标单击消息与响应函数联pv来:
BEGIN_MESSAGE_MAP(CTextEditorView, CFormView) //{{AFX_MSG_MAP(CTextEditorView) ON_BN_CLICKED(IDC_ICONBUT0, OnIconbut0) //ClassWizard在此处添?br>//}}AFX_MSG_MAP ON_BN_CLICKED(IDC_MYRADIO1, OnMyRadio1) //单选按? ON_BN_CLICKED(IDC_MYRADIO2, OnMyRadio2) //单选按? ON_BN_CLICKED(IDC_MYRADIO3, OnMyRadio3) //单选按? END_MESSAGE_MAP()
然后在头文g的MESSAGE_MAP中定义单d敎ͼ
protected: //{{AFX_MSG(CTextEditorView) afx_msg void OnIconbut0(); //ClassWizard在此处添?br>//}}AFX_MSG afx_msg void OnMyRadio1(); //单选按? afx_msg void OnMyRadio2(); //单选按? afx_msg void OnMyRadio3(); //单选按? DECLARE_MESSAGE_MAP()
q里注意不要把函数加在AFX_MSG区间内,以防影响ClassWizard的用?br> 定义具体的响应函敎ͼq里是用手工加入的,不是用ClassWizard加入的)Q?br>
//单击单选按? void CTextEditorView::OnMyRadio1() { m_SelRadio=0; } //单击单选按? void CTextEditorView::OnMyRadio2() { m_SelRadio=1; } //单击单选按? void CTextEditorView::OnMyRadio3() { m_SelRadio=2; }
5.回收资源Q?br> 在析构函CQ回收创建的单选按钮(也可以在不用单选按钮时立即回收Q:
CTextEditorView::~CTextEditorView() { int i; for( i=0; i<3; i++) { if(p_MyRadio[i]) delete p_MyRadio[i]; } }
以上是动态控件的生成和响应方法,各种不同的控件做法略有不同,但思\和步骤都是类似的Q希望以上实例对你能够有所帮助?
]]> 用ITaskbarList接口操纵Windowsd栏程序按钮的状? http://www.shnenglu.com/qiaodong/archive/2007/04/22/22606.html乔栋 乔栋 Sun, 22 Apr 2007 14:45:00 GMT http://www.shnenglu.com/qiaodong/archive/2007/04/22/22606.html http://www.shnenglu.com/qiaodong/comments/22606.html http://www.shnenglu.com/qiaodong/archive/2007/04/22/22606.html#Feedback 2 http://www.shnenglu.com/qiaodong/comments/commentRss/22606.html http://www.shnenglu.com/qiaodong/services/trackbacks/22606.html class CXDlg : public CDialog { ...... public: typedef ITaskbarList *LPITaskbarList; LPITaskbarList pTaskbar; ...... };
Step 2: 初始?d栏COM 对象
BOOL CXDlg::OnInitDialog() { ...... // Initializes the Component Object Model(COM) CoInitialize(0); // We call below function since we only need to create one object CoCreateInstance( CLSID_TaskbarList, 0, CLSCTX_INPROC_SERVER, IID_ITaskbarList, (void**)&pTaskbar ); // Below function will initialize the taskbar list object pTaskbar->HrInit(); ...... }
Step 3: 使用Q删?昄 d栏程序按?/u>
void CXDlg::OnBnClickedButtonHide() { pTaskbar->DeleteTab(this->GetSafeHwnd()); }
void CXDlg::OnBnClickedButtonShow() { pTaskbar->AddTab(this->GetSafeHwnd()); }
]]>
þþƷһպ |
Ʒ˿þþþþò |
˾þô߽ |
þùۺϾƷ |
99þù뾫ƷѾþþþ |
þۺƵվ |
99ŷƷþþѿ |
þþƷһ |
þþþ |
һþaþþƷۺҹҹ |
þþwww˳ɾƷ |
777þþƷһ |
þþƷа |
þòӰ |
wwþþþþþþþ |
þþAVҰ |
Ʒ˾þ˵Ӱ |
þۺϸϾþù |
ŷͽxxxxѿþþ |
þþƷƵ |
þþƷëƬѹۿ |
þþþþþŮú |
þþWWWѾƷ |
þøݾƷԴվ |
þAVӰ |
þAVĻ |
69Ʒþþþùۿ |
þseƷһƷ |
94þùƷ |
þþƷֻоƷ2020
|
þerƷѹۿ2 |
ŮƷþþþá |
պݺݾþ͵͵ɫۺ0 |
þһ |
91þ㽶Ů߿ |
ԻԻ˿þþ |
99Ʒþþþþþ |
Ӱһþþþó˾Ʒۺ
|
Ʒþþþȥq |
þþƷϵ |
ƷĻþò |