??xml version="1.0" encoding="utf-8" standalone="yes"?>欧美激情欧美狂野欧美精品
,欧美精品国产精品,在线日韩中文字幕 http://m.shnenglu.com/szhoftuncun/专注力才是王?/description>zh-cn Wed, 24 Sep 2025 04:22:11 GMT Wed, 24 Sep 2025 04:22:11 GMT 60 安装WPS http://m.shnenglu.com/szhoftuncun/archive/2013/05/27/200625.htmlfoxtail foxtail Mon, 27 May 2013 13:27:00 GMT http://m.shnenglu.com/szhoftuncun/archive/2013/05/27/200625.html http://m.shnenglu.com/szhoftuncun/comments/200625.html http://m.shnenglu.com/szhoftuncun/archive/2013/05/27/200625.html#Feedback 0 http://m.shnenglu.com/szhoftuncun/comments/commentRss/200625.html http://m.shnenglu.com/szhoftuncun/services/trackbacks/200625.html 阅读全文 ]]> 如何修改mysql root密码 http://m.shnenglu.com/szhoftuncun/archive/2009/06/02/86562.htmlfoxtail foxtail Tue, 02 Jun 2009 08:58:00 GMT http://m.shnenglu.com/szhoftuncun/archive/2009/06/02/86562.html http://m.shnenglu.com/szhoftuncun/comments/86562.html http://m.shnenglu.com/szhoftuncun/archive/2009/06/02/86562.html#Feedback 0 http://m.shnenglu.com/szhoftuncun/comments/commentRss/86562.html http://m.shnenglu.com/szhoftuncun/services/trackbacks/86562.html 1、编辑MySQL(和PHP搭配之最佳组?配置文gQ?/p>
windows环境中:%MySQL(和PHP搭配之最佳组?_installdir%\my.ini //一般在MySQL(和PHP搭配之最佳组?安装目录下有my.ini即MySQL(和PHP搭配之最佳组?的配|文件?br>linux环境中:/etc/my.cnf
在[MySQL(和PHP搭配之最佳组?d]配置D|加如下一行: skip-grant-tables
保存退出编辑?/p>
2、然后重启MySQL(和PHP搭配之最佳组?服务
windows环境中: net stop MySQL(和PHP搭配之最佳组? net start MySQL(和PHP搭配之最佳组?
linux环境中: /etc/init.d/MySQL(和PHP搭配之最佳组?d restart
3、设|新的ROOT密码
然后再在命o行下执行Q?br>MySQL(和PHP搭配之最佳组? -uroot -p MySQL(和PHP搭配之最佳组? 直接回R无需密码卛_q入数据库了?/p>
现在我们执行如下语句把root密码更新?7758521Q?br>update user set password=PASSWORD("7758521") where user='root';
quit 退出MySQL(和PHP搭配之最佳组??/p>
4、还原配|文件ƈ重启服务
然后修改MySQL(和PHP搭配之最佳组?配置文g把刚才添加的那一行删除?/p>
再次重vMySQL(和PHP搭配之最佳组?服务Q密码修改完毕?/p>
修改完毕?/p>
用新密码7758521试一下吧Q又能登入MySQL(和PHP搭配之最佳组?的感觉就是不一样吧Q?/p>
]]> 关于文字输出的函数TabbedTextOut[整理] http://m.shnenglu.com/szhoftuncun/archive/2009/01/20/72382.htmlfoxtail foxtail Tue, 20 Jan 2009 09:14:00 GMT http://m.shnenglu.com/szhoftuncun/archive/2009/01/20/72382.html http://m.shnenglu.com/szhoftuncun/comments/72382.html http://m.shnenglu.com/szhoftuncun/archive/2009/01/20/72382.html#Feedback 4 http://m.shnenglu.com/szhoftuncun/comments/commentRss/72382.html http://m.shnenglu.com/szhoftuncun/services/trackbacks/72382.html 关于文本的输?/strong>
在如何自q写文本控件时Q有关于如何展开 Tab 的具体做法:
1 void TextView::PaintLine(HDC hdc, int line_no) 2 3 { 4 5 int length = document -> GetLineLength(line_no + start_line_no); 6 7 char * buffer = new char [length]; 8 9 document-> GetLineBuffer(buffer,line_no + start_line_no); 10 11 // 容纳单行文本矩Ş区域 12 13 RECT line_rect;14 15 GetClientRect(tv_hwnd,& line_rect); 16 17 line_rect.top = line_no * (font_height + font_extra); 18 19 line_rect.bottom = line_rect.top + font_height + font_extra; 20 21 line_rect.left -= start_column_no * 5 ; 22 23 // 展开Tab字符 24 25 int tab = 4 * font_width; 26 27 int width = TabbedTextOut(hdc,line_rect.left,line_rect.top,buffer,length, 1 , & tab,line_rect.left); // 输出文字 28 29 line_rect.left = LOWORD(width); 30 31 ExtTextOut(hdc,0 , 0 ,ETO_OPAQUE, & line_rect, 0 , 0 , 0 ); 32 33 delete []buffer;34 35 }36
要明白他的意思才能在以后的编写扩展功能才能得心应手。首先要明白一个函数?/span>
TabbedTextOut
功能Q?/span>
1 一个字W串写到指定位置?/span>
2 q按制表位位|数l?/span>里的值展开制表W?/span>?/span>
函数原型Q?/span>
LONG TabbedTextOut(HDC hdc, int X, int Y, LPCTSTR lpString, int nCount, int nTabPositions, LPINT lpn TabStopPositions, int nTabOrigin)
参数意义Q?/span>
Hdc Q设备环境句柄?/span>
X Q?/span> 字符串开始点?/span>x 坐标Q逻辑单位Q?/span>
Y Q?/span> 字符串开始点?/span>y 坐标Q逻辑单位Q?/span>
lpString Q缓冲区指针?/span>
nCount Q?/span> 字符数?/span>
nTabPositions Q指定制表位位置数组的值的个数?/span>
lpnTabStopPositions Q数l,包含制表位位|(逻辑单位Q。必L照升序保存?/span>
nTabOrigin Q指定制表符展开的开始位|的 x 坐标Q逻辑单位Q?/span>
q回|字符串的寸Q高位字表示高度Q低位表C宽度?/span>
注:
??span style="FONT: 7pt 'Times New Roman'"> 如果 nTabPositions gؓ 0 Q且 lpnTabStopPositions g NULL Q那么制表符会按q_字符宽度?/span> 8 位来扩展 ?/span>
??span style="FONT: 7pt 'Times New Roman'"> 如果 lpnTabStopPositions 数组包含一个以上的话,则制表位被设为数l里的每一个|׃ؓ lpnTabStopPositions 个?/span>
??span style="FONT: 7pt 'Times New Roman'"> nTabOrigin 参数允许一个应用程序ؓ一行多ơ调?/span>TabbedTextOut 。如果应用程序多ơ调?/span>TabbedTextOut Q?/span>nTabOrigin 每次都设|相同的|则此函数在相对于 nTabOrigin 指定的位|处展开所有的制表W?/span>
知识补充Q?/span>
TabbedTextOut(hdc,line_rect.left,line_rect.top,buffer,length,1,&tab,line_rect.left);
W六个参Cؓ nTabPosition = 1
W七个参Cؓ lpnTabStopPositions = tab = 4*font_width
W八个参C nTabOrigin = line_rect.left
因ؓ~辑器以行位模型Q当然是从一行的最左端开始。制表位数组g个等于字体宽度的 4 倍?/span>
摘自?/span>windows ~程》的解释 Q?/span>
TabbedTextOut 的前五个参数?/span>TextOut 相同Q第六个参数是蟩位间隔数Q第七个是以囄为单位的跳位间隔数组?/span>
?/span>1 ?/span> 如果q_字符宽度?/span>8 个图素,而?zhn)希望?/span>5 个字W加一个蟩位间隔,则这个数l将包含 40 ?/span>80 ?/span>120 Q按递增序依此cL?/span>
??span style="FONT: 7pt 'Times New Roman'"> 如果W六个和W七个参数是 0 ?/span>NULL Q则跳位间隔按每八个q_字符宽度讑֮?/span>
??span style="FONT: 7pt 'Times New Roman'"> 如果W六个参数是 1 Q则W七个参数指向一个整敎ͼ表示跳位间隔重复增大的倍数 Q例如,如果W六个参数是 1 Qƈ且第七个参数指向gؓ 30 的变量,则蟩位间隔设定在 30 ?/span>60 ?/span>90… 囄处)。最后一个参数给Z从蟩位间隔开始测量的逻辑 x 坐标Q它与字W串的v始位|可能相同也可能不同?/span>
~辑器的展开 tab 属于?/span>3 】,增大倍数?/span>4 个字W宽度?/span>4 倍与 8 倍的区别如图Q?/span>
]]>俄罗斯方块V1.2 http://m.shnenglu.com/szhoftuncun/archive/2008/11/16/67025.htmlfoxtail foxtail Sat, 15 Nov 2008 16:22:00 GMT http://m.shnenglu.com/szhoftuncun/archive/2008/11/16/67025.html http://m.shnenglu.com/szhoftuncun/comments/67025.html http://m.shnenglu.com/szhoftuncun/archive/2008/11/16/67025.html#Feedback 2 http://m.shnenglu.com/szhoftuncun/comments/commentRss/67025.html http://m.shnenglu.com/szhoftuncun/services/trackbacks/67025.html l箋上个版本修改了一?/span>bug Q然后美化了一下?/span>
发现自己的审观不咋的,得漂亮的人家觉得不漂亮。还是照着大家要求的画一个?/span>
主要解决的问题是Q这ơ行列都用宏表示Q这样可以修改行列,H口大小也动态改变?/span>
另外长条旋{变成 Z 型问题也解决Q主要是取模的时候绕回去了?/span>
其中最重要的要是解决了刷新闪烁问题,管 HAM2008 指点q,始终没做成,q次 vczh 说了一句话q醒了我。根本不应该使用 InvalidateRect 函数Q直接画Q然后用~冲 DC 可以了?br>
VOID OnPaint() { HDC hdc = GetDC(hWnd); HDC bitmap_dc = CreateCompatibleDC(hdc); HBITMAP bitmap = CreateCompatibleBitmap(hdc, 1024 , 768 ); SelectObject(bitmap_dc,bitmap); /**/ /* ******************************************* DrawBlock ******************************************** */ int x = tetris.GetX(); int y = tetris.GetY(); for ( int i = 0 ; i < 4 ; ++ i) { for ( int j = 0 ; j < 4 ; ++ j) { if (current_block[i][j] == 1 ) { DrawBlock(bitmap_dc,y + i + 1 ,x + j + 1 , 3 , 3 ,tetris.GetColor(),RGB( 0 , 0 , 0 )); } } } /**/ /* **************************************** *DrawContainer ***************************************** */ for ( int i = 0 ; i < ROWS; ++ i) { for ( int j = 0 ; j < COLS; ++ j) { if (Container[i][j] == 1 ) { DrawBlock(bitmap_dc,i + 1 ,j + 1 , 3 , 3 ,ColorTable[i][j],RGB( 0 , 0 , 0 )); } } } BitBlt(hdc,0 , 0 , 1024 , 768 ,bitmap_dc, 0 , 0 ,SRCCOPY); DeleteDC(bitmap_dc); DeleteObject(bitmap); ReleaseDC(hWnd,hdc); }
以上是GDI~冲的主要实C码?br>
可执行文件下?/a> 代码q是{全部完善后上传吧。Redist误行下载?/span> 代码估计要有大的改动Q感觉现在的代码没一点C++的味道?br>有点单,用陈坤的话说是扩展性不好?
]]> 俄罗斯方块V1.0 http://m.shnenglu.com/szhoftuncun/archive/2008/11/09/66377.htmlfoxtail foxtail Sat, 08 Nov 2008 16:06:00 GMT http://m.shnenglu.com/szhoftuncun/archive/2008/11/09/66377.html http://m.shnenglu.com/szhoftuncun/comments/66377.html http://m.shnenglu.com/szhoftuncun/archive/2008/11/09/66377.html#Feedback 3 http://m.shnenglu.com/szhoftuncun/comments/commentRss/66377.html http://m.shnenglu.com/szhoftuncun/services/trackbacks/66377.html 记得 8 月䆾写过俄罗斯方块,那会全是用坐标表C的。包括所有方块的变换Q甚x块的表示。导致程序内部许多的 case 语句Q甚为麻烦。代码量也有q?/span>1800 行左叟뀂而且写完?/span>bug 很多Q修正也修正不完Q异常头痛便攑ּ了?/span>
现在看看《编E之》的俄罗斯方块的思\Q又惌v vczh 用脚本的写的俄罗斯方块,又起了兴趣。便重新设计完成了,q次基本没什?/span>bug 了。只不过操作习惯上和 QQ 的俄|斯方块q有些不同?/span>
1. 在底部的时候,如果按住旋{不放Q则会停留原地旋转。原因是Z接触底部时旋{不插入墙壁,同接触左右墙壁一P做了调整方块坐标处理。处理方法是Ҏ(gu)旋{后方块的坐标加上Q减去)最大列 ( 最列 ) 在减去(左)双界得到。底部也是这栯的。当然有了这L便出现了这L小?/span>bug Q不q我怿没h会在底部按住不放的?/span>
2. q次方块全部存储在一个一l数l中Q通过指针的变换来改变方块U类与旋转状态,但是Z方便操作Q就拯C一个二l数l中。v初设计是一个四l数l,q样方便多了,但是 VS2008 的编译器却不能编译通过Q?/span>int[4][4] ?/span>int **p 的{换不成功Q朋友说是编译器问题。后来经 Lend3d _很多目都是不用大于二维的数l的Q于是干脆就用了一l数l,本来要听从他意见用结构表CZ个低二位的数l元素,但是初始化和使用都不是很方便?/span>
3. 另外关于 GDI ~冲Q试用了一下,但是作用貌似不大Q不知道原因。关于这斚w的知识援助还是要感谢 HAM2008 的帮助?br>
贴个头文件出来就可以知道大致做法了?br>
#ifndef TETRIS_H #define TETRIS_H #pragma onceextern int Container[ 18 ][ 10 ]; // 容纳方块的空?/span>extern int current_block[ 4 ][ 4 ]; /**/ /* *************************** * 方块的主要行?br> **************************** */ class Tetris { public : Tetris(); ~ Tetris(); void GenerateBlock(); void StepLeft(); void StepRight(); void StepDown(); void Rotate(); void CaculateScore(); void IsOver(); public : bool lost; int score; // 得分 int GetX(); int GetY(); private : inline int CaculateMinCol(); inline int CaculateMinRow(); inline int CaculateMaxCol(); inline int CaculateMaxRow(); void CaculateBlockBoundary(); bool DetectCollision(); void CopyToContainer(); void CopyToBlock(); int * block; int total_rotate; int kind; int offset_x; int offset_y; int min_col,max_col; int min_row,max_row; } ; #endif // TETRIS_H
可能自己设计上的能力q是不吧,有些函数是不得以写的Q比如四个inline函数Q因的时候用的是四个循环Q计完p跛_两层循环?br>N用gotoQ如果直接return则后面的代码执行不到了,不得以做了四个辅助函数?br> 源代码下载:TetrisV1.0 可执行文件下载:TetrisV1.0.exe 如果不能q行可到微Y下蝲VS2008?redist_x86
]]> 文gMD5计算工具 http://m.shnenglu.com/szhoftuncun/archive/2008/10/26/65052.htmlfoxtail foxtail Sat, 25 Oct 2008 17:50:00 GMT http://m.shnenglu.com/szhoftuncun/archive/2008/10/26/65052.html http://m.shnenglu.com/szhoftuncun/comments/65052.html http://m.shnenglu.com/szhoftuncun/archive/2008/10/26/65052.html#Feedback 0 http://m.shnenglu.com/szhoftuncun/comments/commentRss/65052.html http://m.shnenglu.com/szhoftuncun/services/trackbacks/65052.html C++博客上的蚂蚁l结者的文章都写的不错,它写了个MD5的算法,我就用他的算法写了个程序?br>单的计算文g的MD5Q支持拖拽文件。现在还只是单的计算?br>目前打算改进的是 1dq度条?br>2化界面?br>3解决大文件计时界面僉|问题?br> 个h写程序喜Ƣ不断改q,也就是偶然突发奇惛_个程序。以后想h改q一下。嘎嘎?br>要是忘记了,׃|。代码可点击q里下蝲
]]> ClipBoard.ASM文g分析 http://m.shnenglu.com/szhoftuncun/archive/2008/10/03/63189.htmlfoxtail foxtail Fri, 03 Oct 2008 08:27:00 GMT http://m.shnenglu.com/szhoftuncun/archive/2008/10/03/63189.html http://m.shnenglu.com/szhoftuncun/comments/63189.html http://m.shnenglu.com/szhoftuncun/archive/2008/10/03/63189.html#Feedback 1 http://m.shnenglu.com/szhoftuncun/comments/commentRss/63189.html http://m.shnenglu.com/szhoftuncun/services/trackbacks/63189.html 脑袋里没有点API的储量,惛_什么东西还是很困难的。厚U薄发才是硬道理。所以先看看别h的代码,偷学几个API的用法?/p>
SetClipData proc lpData:LPSTR,dwSize:dword LOCAL hMem:HANDLE ; ==> 内存块句?br> LOCAL pMem:dword ; ==> 内存块指?br> mov eax,dwSize shr eax, 3 inc eax shl eax,3 ; ==> (dwSize / 8 + 1 ) * 8 不满8的倍数则补?br> invoke xGlobalAlloc, GHND or GMEM_DDESHARE, eax test eax,eax ; ==> 甌成功则l否则蟩转到@exit2 je @exit2 mov hMem,eax invoke GlobalLock,eax ;hGlob ; ==> 锁定甌的内存块q回内存块指?br> test eax,eax je @exit1 mov pMem,eax invoke RtlMoveMemory,eax,lpData,dwSize ; ==> 复制lpData的内容到甌的内存块?br> mov eax,pMem add eax,dwSize mov byte ptr [eax], 0 ; ==> 在内存块最后添0l束 invoke GlobalUnlock,hMem ; ==> 解锁Q内存块指针无?br> invoke OpenClipboard,NULL . if eax invoke EmptyClipboard invoke SetClipboardData,CF_TEXT,hMem ; ==> 数据关联到剪脓(chung)?br> invoke CloseClipboard xor eax,eax ; 0 - Ok jmp @exit3 .endif @exit1: invoke GlobalFree, hMem ; ==> 未锁定成功则释放该内存块 xor eax, eax @exit2: dec eax ; - 1 - error @exit3: ret SetClipData endp
看完q段代码我有一个疑问,q里是将 lpData 的数据拷贝到一个内存块Q然后与剪脓(chung)板关联,我这里解释ؓ兌Q我p为剪贴板不应该是一个内存区域,我猜是一个链表之cȝl构Q然后链表每一个节点存储一个内存区域的指针q有其他的信息,然后Ҏ(gu)信息来管理?/span>
否则应该可以直接?/span>lpData 来跟剪脓(chung)板关联。另一个原因是 lpData 是局部的随时会被释放的。如有不正确q望指正?/span>
]]> STL学习摘要之序列式容器 http://m.shnenglu.com/szhoftuncun/archive/2008/09/07/61219.htmlfoxtail foxtail Sun, 07 Sep 2008 07:24:00 GMT http://m.shnenglu.com/szhoftuncun/archive/2008/09/07/61219.html http://m.shnenglu.com/szhoftuncun/comments/61219.html http://m.shnenglu.com/szhoftuncun/archive/2008/09/07/61219.html#Feedback 0 http://m.shnenglu.com/szhoftuncun/comments/commentRss/61219.html http://m.shnenglu.com/szhoftuncun/services/trackbacks/61219.html
#include < iostream > #include< vector > using namespace std; void Print(vector < int >& vec) { for ( int i = 0 ; i < vec.size(); ++ i)cout << ' ' << vec[i]; cout << endl; } int main() { vector < int > first; vector < int > second( 4 , 1000 ); vector < int > third(second.begin() + 2 , second.end()); vector < int > forth(third); vector < int > ::iterator it; int val[] = { 1 , 2 , 3 , 4 } ; vector < int > fifth(val, val + sizeof (val) / sizeof (val[ 0 ])); cout << " First: " ; Print(first); cout << " Second: " ; Print(second); cout << " Third: " ; Print(third); cout << " Forth: " ; Print(forth); cout << " Fifth: " ; Print(fifth); first.swap(fifth); cout << " First: " ; Print(first); first.push_back( 12 ); cout << " First: " ; Print(first); it = first.begin() + 2 ; first.erase(it,first.end()); cout << " First: " ; Print(first); it = first.begin(); first.insert(it, 100 ); cout << " First: " ; Print(first); system( " pause " ); return 0 ; }
l果Q?br> Deque操作代码cM?br>优势Q比之Vector在头部插入删除元素也有很高效率。也支持q代器随问。不q元素在内存中不q箋?br> List操作基本相同不过多了一些功?br>优势Q高效遍历元素,帔R旉插入删除L位置元素?br>
#include < iostream > #include< list > using namespace std; void Print(list < int >& ls) { list < int > ::iterator it = ls.begin(); for (; it != ls.end(); ++ it)cout << ' ' <<* it; cout << endl; } void Print(list < double >& ls) { list < double > ::iterator it = ls.begin(); for (; it != ls.end(); ++ it)cout << ' ' <<* it; cout << endl; } int main() { list < int > first; list < int > second( 4 , 1000 ); list < int > ::iterator it; double first_val[] = { 1.0 , 3.0 , 2.0 , 4.0 } ; list < double > third(first_val, first_val + sizeof (first_val) / sizeof (first_val[ 0 ])); double sencond_val[] = { 1.1 , 4.3 , 1.4 , 2.9 } ; list < double > fourth(sencond_val, sencond_val + sizeof (sencond_val) / sizeof (sencond_val[ 0 ])); it = first.begin(); first.insert(it, 100 ); cout << " First: " ; Print(first); it = first.begin(); first.splice(it,second); // splice四个参数Q第一个参数是插入的位|,W二个是插入源,W三四个参数指定范围 cout << " First: " ; Print(first); first.remove( 100 ); cout << " First: " ; Print(first); third.sort(); fourth.sort(); cout << " Third: " ; Print(third); cout << " Fourth: " ; Print(fourth); third.merge(fourth); cout << " Third: " ; Print(third); system( " pause " ); return 0 ; }
l果Q?br> splice在代码中已经说明Qmerge函数合ƈ两个list而且是按照从到大的序Qmerge有另一个版本包含两个参敎ͼ另一个是一?br>q回boolcd的函敎ͼ说明了比较规则。用法相同。另外一些函C用比较简单?br>该类W记均参考:www.cplusplus.com
]]> [zt]Cq行库概?/title> http://m.shnenglu.com/szhoftuncun/archive/2008/08/31/60520.htmlfoxtail foxtail Sun, 31 Aug 2008 12:59:00 GMT http://m.shnenglu.com/szhoftuncun/archive/2008/08/31/60520.html http://m.shnenglu.com/szhoftuncun/comments/60520.html http://m.shnenglu.com/szhoftuncun/archive/2008/08/31/60520.html#Feedback 0 http://m.shnenglu.com/szhoftuncun/comments/commentRss/60520.html http://m.shnenglu.com/szhoftuncun/services/trackbacks/60520.html 2)C 语言是所谓的“内?#8221;语言Q就其语a本n来说很小Q不多的关键字,E序程控制Q数据类型等Q;所以,C 语言内核开发出来之后,Dennis Ritchie ? Brian Kernighan q C 本n重写? 90% 以上? UNIX pȝ函数Qƈ且把其中最常用的部分独立出来,形成头文件和对应? LIBRARYQC run-time library 是q样形成的? 3)随后Q随着 C 语言的流行,各个 C ~译器的生?个体/团体都遵循老的传统Q在不同q_上都有相对应? Standard LibraryQ但大部分实现都是与各个q_有关的。由于各? C ~译器对 C 的支持和理解有很多分歧和微妙的差别,所以就有了 ANSI CQANSI C Q主观意图上Q详l的规定? C 语言各个要素的具体含义和~译器实现要求,引进了新的函数声明方式,同时订立? Standard Library 的标准Ş式。所以Cq行时库q译器生商提供。至于由其他厂商/个h/团体提供的头文g和库函数Q应当称为第三方 C q行库(Third party C run-time librariesQ? 4)C run-time library里面含有初始化代码,q有错误处理代码(例如divide by zero处理)。你写的E序可以没有math库,E序照样q行Q只是不能处理复杂的数学q算Q不q如果没有了C run-time库,main()׃会被调用Qexit()也不能被响应。因为C run-time library包含了CE序q行的最基本和最常用的函数? 5)C C++ 世界里,有另外一个概?Standard C++ Library,它包括了上面所说的 C run-time library ? STL。包? C run-time library 的原因很明显QC++ ? C 的超集,没有理由再重新来一? C++ run-time library. VC针对C++ 加入的Standard C++ Library主要包括QLIBCP.LIB, LIBCPMT.LIB? MSVCPRT.LIB 6)Windows环境下,VC提供? C run-time library又分为动态运行时库和静态运行时库? 动态运行时库主要是DLL库文件msvcrt.dll(or MSVCRTD.DLL for debug build),对应的Import library文g是MSVCRT.LIB(MSVCRTD.LIB for debug build) 静态运行时?release?对应的主要文件是Q? LIBC.LIB (Single thread static library, retail version) LIBCMT.LIB (Multithread static library, retail version) msvcrt.dll提供几千个C函数Q即使是像printfq么低的函数都在msvcrt.dll里。其实你的程序运行时Q很大一部分旉时在q些q行库里q行。在你的E序(release?被编译时QVC会根据你的编译选项(单线E、多U程或DLL)自动相应的q行时库文g(libc.lib,libcmt.lib或Import library msvcrt.lib)链接q来? ~译时到底哪个C run-time library联入你的E序取决于编译选项Q? /MD, /ML, /MT, /LD (Use Run-Time Library) 你可以VC中通过以下Ҏ(gu)讄选择哪个C run-time library联入你的E序Q? To find these options in the development environment, click Settings on the Project menu. Then click the C/C++ tab, and click Code Generation in the Category box. See the Use Run-Time Library drop-down box. 从程序可UL性考虑,如果两函数都可完成一U功能,选运行时库函数好,因ؓ各个 C ~译器的生商对标准C Run-time library提供了统一的支?
]]> 如何自己写Win32控g http://m.shnenglu.com/szhoftuncun/archive/2008/08/20/59470.htmlfoxtail foxtail Wed, 20 Aug 2008 14:06:00 GMT http://m.shnenglu.com/szhoftuncun/archive/2008/08/20/59470.html http://m.shnenglu.com/szhoftuncun/comments/59470.html http://m.shnenglu.com/szhoftuncun/archive/2008/08/20/59470.html#Feedback 0 http://m.shnenglu.com/szhoftuncun/comments/commentRss/59470.html http://m.shnenglu.com/szhoftuncun/services/trackbacks/59470.html 最早时候就曄哪里看到q说所有控仉是窗口( window Q,更有甚者说都是对象Q这个就不扯了。自己做好的控g是做?/span>Lib q是 Dll 那是后话Q?/span>MFC 我是不熟(zhn)了Q?/span>Win32 q是看了几天的。大致把制作的整个流E简要的记录一下?/span>
自己做的控g最主要的功能就是接受你发给他的命oQ也是要给外部调用的接口。控件有自己的消息处理函数比?/span>
LRESULT CALLBACK PETextViewWndProc(HWND hWnd,UINT Message,WPARAM wParam,LPARAM lParam) { PETextView * View = (PETextView * )GetWindowLong(hWnd, 0 ); switch (Message) { case WM_NCCREATE: if ((View = new PETextView(hWnd)) == 0 ) return false ; SetWindowLong(hWnd, 0 ,(LONG)View); return true ; case WM_NCDESTROY: if (View)delete View; return 0 ; case WM_PAINT: return View -> OnPaint(); case WM_SIZE: return View -> OnSize(wParam, LOWORD(lParam), HIWORD(lParam)); case PEM_OPENFILE: return View -> OpenFile((TCHAR * )lParam); case PEM_CLEAR: return View -> ClearFile(); default : break ; } return DefWindowProc(hWnd,Message,wParam,lParam); }
q里有两cL息,一cLpȝ定义的以 WM 开_一cL自己定义的,当然随便你自己定义啦。对应的消息看到是调用相应的函数完成的,q也是说控件的行ؓ可以另外编写逻辑部分Q然后提供接口给q里调用卛_?/span>
之所以说控g是H口是因Z有自qH口c,以及初始化函敎ͼ同时也有创徏的函数。窗口类的定义和注册也做成提供给外部的接口,在外部必要的时候调用。而控制控件是通过发送消息来实现的,Z更加好看Q可以定义一个宏Q比?/span>
#define PE_OpenFile(hWnd, Path) SendMessage((hWnd), PEM_OPENFILE, 0, (LPARAM)(Path))
那么创徏H口和控件唯一不同的地方就是,内部的创建和销毁消息是 WM_NCCREATE ?/span>WM_NCDESTROY Q先不管q两个消息。我们看?/span>WM_NCCREATE 之前有个 GetWindowLong Q其内有?/span>SetWindowLong 。这两个是关键的Q这样就讄了这个控件的属性,使其兌hQ第二个参数 msdn 上是没有说明讄?/span>0 是什么意思的Q其实这两个函数的第二个参数讄 0 表示d的意思,W一个是d该控件的属性,然后W二个函数在增加W三个参数的属性的同时d赋予l这个控件?/span>
一切都 OK 了!那么控g创徏可在外部?/span>WM_CREATE 之时调用Q当然也可以在用其功能前调用即可?/span>
一切提供给外部的调用都 Port 在一个头文g中,q样使用的时候包含这个头文g好了?/span>
接下来解释那两个消息Q这两个消息是因为我们创Z子窗口,也就是我们自q控g?/span>
q两个消息与 WM_CREATE,WM_DESTROY 之间的顺序关pLq样的,只看销毁吧?/span>
hwnd = parent, uMsg = WM_DESTROY hwnd = child, uMsg = WM_DESTROY hwnd = child, uMsg = WM_NCDESTROY hwnd = parent, uMsg = WM_NCDESTROY
WM_DESTROY 是通知子窗口销毁,然后子窗口通过接受 WM_NCDESTROY q行销毁,q发送给父窗口,q行销毁?/span>
l节部分介绍的差不多QM思\是和创建窗口差不多Q但是要搞个头文Ӟ把一些个帔R和功能的函数另外一个窗口类的初始化和创建的接口搞进厅R?/span>
]]> 俄罗斯方?/title> http://m.shnenglu.com/szhoftuncun/archive/2008/08/06/58183.htmlfoxtail foxtail Wed, 06 Aug 2008 14:14:00 GMT http://m.shnenglu.com/szhoftuncun/archive/2008/08/06/58183.html http://m.shnenglu.com/szhoftuncun/comments/58183.html http://m.shnenglu.com/szhoftuncun/archive/2008/08/06/58183.html#Feedback 1 http://m.shnenglu.com/szhoftuncun/comments/commentRss/58183.html http://m.shnenglu.com/szhoftuncun/services/trackbacks/58183.html 阅读全文 ]]> 推荐一个文本编辑器 http://m.shnenglu.com/szhoftuncun/archive/2008/08/04/57923.htmlfoxtail foxtail Mon, 04 Aug 2008 00:13:00 GMT http://m.shnenglu.com/szhoftuncun/archive/2008/08/04/57923.html http://m.shnenglu.com/szhoftuncun/comments/57923.html http://m.shnenglu.com/szhoftuncun/archive/2008/08/04/57923.html#Feedback 7 http://m.shnenglu.com/szhoftuncun/comments/commentRss/57923.html http://m.shnenglu.com/szhoftuncun/services/trackbacks/57923.html 可以?a >q里下蝲 然而文本编辑器始终没有遇到一个简z的Q偶然机会看到这个还符合要求,叫E-texteditor 同样y_?zhn)。可惜不是免费的Q不qcrack倒是一搜一大堆?br>VistualStudio一装我的硬盘就几乎没空间了。这回可以用他来~辑? ~译器用mingwQ以前都是整个都下蝲下来Q这回就把必要的部分下蝲下来Q顺带make和gdb打了个包q里 可以下蝲。make和gdb手生的很Q记得一些如codeblocks他们会自动生成makefile文gQ不知道q个什么原理?
]]> [Z]Visual C++开发工具与调试技巧整?/title> http://m.shnenglu.com/szhoftuncun/archive/2008/07/29/57460.htmlfoxtail foxtail Tue, 29 Jul 2008 12:05:00 GMT http://m.shnenglu.com/szhoftuncun/archive/2008/07/29/57460.html http://m.shnenglu.com/szhoftuncun/comments/57460.html http://m.shnenglu.com/szhoftuncun/archive/2008/07/29/57460.html#Feedback 1 http://m.shnenglu.com/szhoftuncun/comments/commentRss/57460.html http://m.shnenglu.com/szhoftuncun/services/trackbacks/57460.html Azure博客 自己L用VCq_来开发东西,但是有时候L样那L问题Q呵呵,L需要上|查资料来解?在这里把自己用到上网查的一些技巧摘录如?希望对大家有用,省去大家再去搜烦的烦恹{?br>1.如何在Release状态下q行调试 ProjectQ?gt;SettingQ?gt;ProjectSetting对话框,选择Release状态。C/C++标签中的Category选GeneralQOptimizations选Disable(Debug)QDebut info选Program Database。在Link标签中选中Generate debug info复选框?br> 注:只是一个介乎Debug和Release的中间状态,所有的ASSERT、VERIFY都不起作用,函数调用方式已经是真正的调用Q而不查表Q但是这U状态下QuickWatch、调用队列跟t功能仍然有效,和Debug版一栗?br>2. Release和Debug有什么不?/strong> Release版称为发行版QDebug版称试版?br>Debug中可以单步执行、跟t等功能Q但生成的可执行文g比较大,代码q行速度较慢。Release版运行速度较快Q可执行文g较小Q但在其~译条g下无法执行调试功能?br>Release的exe文g链接的是标准的MFC DLL(Use MFC in a shared or static dll)。这些DLL在安装Windows的时候,已经配置Q所以这些程序能够在没有安装Visual C++ 6.0的机器上q行。而Debug版本的exe链接了调试版本的MFC DLL文gQ在没有安装Visual C++6.0的机器上不能q行Q因为缺相应的DLLQ除非选择use static dll when link?br>3. ASSERT和VERIFY有什么区?/strong> ASSERT里面的内容在Release版本中不~译QVERIFY里面的内容仍然翻译,但不再判断真假。所以后者更安全一炏V?br>例如ASSERT(file.Open(strFileName))?br>一旦到了Release版本中,q一行就忽略了,fileҎ(gu)׃Open()了,而且没有M出错的信息。如果用VERIFY()׃会有q个问题?br>4.Workspace和Project之间是什么样的关p?/strong> 每个Workspace可以包括几个projectQ但只有一个处于Active状态,各个project之间可以有依赖关p,在project的Setting..中可以设定,比如那个Active状态的project可以依赖于其他的提供其函数调用的静态库?br>5. 如何在非MFCE序中用ClassWizard 在工E目录下新徏一个空?RC文gQ然后加入到工程中就可以了?br>6.如何讄断点 按F9在当前光标处增加一个断点和取消一个断炏V?br>另外Q在~辑状态下Q按Ctrl+Bl合键,弹出断点讄对话框。然后单凅RCondition…】按钮弹|断Ҏ(gu)件的对话框进行设|?br>7.在编辑状态下发现成员变量或函C能显C提C是如何打开昄功能 q似乎是目前q个Visual C++ 6.0版本的一个bugQ可按如下步骤其正常,如再出现Q可如法炮制Q?br>(1)关闭Project (2)删除“工程?ncb”文g (3)重新打开工程8.如何一个通过ClassWizard生成的类d删除 首先在工作区的FileView中选中该类?h?cpp文gQ按delete删除Q然后在文g理器中这两个文g删除Q再q行ClassWizardQ这时出现是否移走该cȝ提示Q选择remove可以了?br>9. 如何在workspace中消qcL出来 打开该类对应的头文gQ然后将其类名随便改一下,q个时候工作区׃出现新的c,再将q个cL回原来的名字可以了?br>10. 如何清除所有的断点 菜单【Edit】->【Breakpoints…】,打开“Breakpoints”对话框,单击【Remove All】按钮即可。快捷键?#8220;Ctrl + Shift + F8”?br>11. 如何再ClassWizard中选择未列出的信息 打开“ClassWizard”对话框,然后切换?#8220;Class Info”面。改?#8220;Message filter”Q如选择“Window”Q?#8220;Message”面׃出现Window的信息?br>12. 如何程序中的括h否匹?/strong> 把光标移动到需要检的括号前面Q按快捷?#8220;Ctrl + ]”。如果括号匹配正,光标p到匹配的括号处,否则光标不移动,q且机箱喇叭q会发出一声警告?br>13. 如何查看一个宏(或变量、函?的定?/strong> 把光标移动到要查看的一个宏上,比如说最常见的DECLARE_MAP_MESSAGE上按一下F12(或右键菜单中的相兌?Q如果没有徏立浏览文Ӟ׃出现提示对话框,按【确定】按钮,然后׃跛_该宏(或变量、函?定义的地斏V?br>14. 如何dLib文g到当前工E?/strong> 单击菜单【Project】->【Settings…】弹?#8220;Project Setting”对话框,切换?#8220;Link”标签,?#8220;Object/library modules”处输入Lib文g名称Q不同的Lib之间用空格格开?br>15. 如何快速删除项目下的Debug文g夹中临时文g 在工作区的FileView视图中选中对应的项目,单击右键弹出菜单Q选择【Clean(selection only)】菜单即可?br>16. 如何快速生成一个现有工E除了工E名外完全相同的新工E?/strong> 在新建工E的“New”对话框中选择“Custom Appwizard”,输入新工E的名字Q单凅ROK】按钮。出?#8220;Custom AppWizard”,输入新工E的名字Q单凅ROK】按钮。出?#8220;Custom AppWizardQStep 1 of 2”对话框,选择“An existing Project”,单击【Next】按钮。出?#8220;Custom AppWizardQStep 2 of 2”对话框,选择现有工程的工E文件名Q最后单凅RFinish】按钮。编译后q成一个与现有工程相同但可以重新取名的工程AppWizard?br>现在可以项用MFC AppWizard一Lq个定制的向对{如果不想用了,可以在Visual C++ 6.0安装目录下Common\MSDev98\Template目录中删除该Wizard对应?awx?pdb文g?br>17. 如何解决Visual C++ 6.0不正连接的问题 情景Q明明改动了一个文Ӟ却要把整个项目全部重新编译链接一ơ。刚刚链接好Q一q行Q又提示重新~译链接一ơ?br>q是因ؓ出现了未来文?修改旉和创建时间比pȝ旉?的缘故。可以这样处理:扑ֈ工程文g夹下的debug目录Q将创徏和修Ҏ(gu)间都比系l时间的文g全部删除Q然后再从新“Rebuild All”一ơ?br>18. 引vLNK2001的常见错误都有哪?/strong> 遇到的LNK2001错误主要为:unresolved external symbol “symbol” 如果链接E序不能在所有的库和目标文g内找到所引用的函数、变量或标签Q将产生此错误信息?br>一般来_发生错误的原因有两个Q一是所引用的函数、变量不存在Q拼写不正确或者用错误;其次可能使用了不同版本的链接库。以下是可能产生LNK2001错误的原因: <1>׃~码错误D的LNK2001错误 (1)不相匚w的程序代码或模块定义(.DEF)文gDLNK2001。例如,如果在C++源文件了内声明了一变量“var1”Q却试图在另一个文件内以变?#8220;var1”讉K改变量?br>(2)如果使用的内联函数是?cpp文g内定义的Q而不是在头文件内定义导致LNK2001错误?br>(3)调用函数时如果所用的参数cd和头函数声明时的cd不符会产生LNK2001错误?br>(4)试图从基cȝ构造函数或析构函数中调用虚拟函数时会DLNK2001错误?br>(5)要注意函数和变量的可公用性,只有全局变量、函数是可公用的。静态函数和静态变量具有相同的使用范围限制。当试图从文件外部方位Q何没有在该文件内声明的静态变量时导致编译错误或LNK2001错误?br><2>׃~译和联机的讄而造成的LNK2001错误 (1)如果~译时用的?NOD(/NODERAULTLIB)选项Q程序所需要的q行库和MFC时将得到又编译器写入目标文g模块Q但除非在文件中明确包含q些库名Q否则这些库不会被链接进工程文g。这U情况下使用/NOD导致LNK2001错误 (2)如果没有为wWinMainCRTStartup讑֮E序入口Q在使用Unicode和MFC时将出现“unresolved external on _WinMain@16”的LNK2001错误信息?br>(3)使用/MD选项~译Ӟ既然所有的q行库都被保留在动态链接库之内Q源文g中对“func”的引用,在目标文仉卛_“__imp__func”的引用。如果试图用静态库LIBC.LIB或LIBCMT.LIBq行链接Q将在__imp__func上发生LNK2001错误。如果不使用/MD选项~译Q在使用MSVCxx.LIB链接时也会发生LNK2001错误?br>(4)使用/ML选项~译Ӟ如用LIBCMT.LIB链接会在_errno上发生LNK2001错误?br>(5)当编译调试版的应用程序时Q如果采用发行版模态库q行链接也会产生LNK2001错误Q同P使用调试版模态库链接发行版应用程序时也会产生相同的错误?br>(6)不同版本的库和编译器的合用也能生问题,因ؓ新版的库里可能包含早先的版本没有的符号和说明?br>(7)在不同的模块中用内联和非内联的~译选项能够DLNK2001错误。如果创建C++库时打开了函数内?/Ob1?Ob2)Q但是在描述该函数的相应头文仉却关闭了函数内联(没有inline关键?Q只是将得到错误信息。ؓ避免该问题的发生Q应该在相应的头文g中用inline关键字标志ؓ内联函数?br>(8)不正的/SUBSYSTEM或ENTRY讄也能DLNK2001错误?br>19. 如何调试一个没有源码的exe文g调用的dll 在Visual C++ 6.0中,q入“Project Setting”对话框然后选择Debug标签c通常Visual Studio默认“executable for debug session”为可执行文g名,但可以将他改成Q何你惌的程序。甚臛_以指定不同的工作目录以及传递参数到你的E序。这个技术常用来调试Dlls、名字空间扩展、COM对象和其他从某些EXE以及从第三方的EXE中调用的plug-inE序?br>20. Visual C++ 6.0工程中的目文g都表CZ?/strong> .optQ工E关于开发环境的参数文g。如工具条位|等信息?br>.aps(AppStudio File)资源辅助文gQ二q制格式Q一般不用去它?br>.clwQClassWizard信息文gQ实际上是INI文g格式Q有兴趣可以研究一下。有时候ClassWizardZ问题Q手工修改CLW文g可以解决。如果此文g不存在的话,每次用ClassWizard的时候回提示是否重徏?br>.dsp(DevelopStudio Project)Q项目文Ӟ文本格式Q不q不熟?zhn)的不要手工修攏V?br>.dsw(DevelopStudio Workspace)Q是工作区文Ӟ其他特点?dsp差不多?br>.plgQ是~译信息文gQ编译时的error和warning信息文g(实际上是一个html文g)Q一般用处不大。在单击菜单【Tool】->【Option】弹出的对话框里面有个选项可以控制q个文g的生成?br>.hpj(Help Project)Q是生成帮助文g的工E,用microsoft Help Compiler可以处理?br>.mdp(Microsoft DevStudio Project)Q是旧版本的目文gQ如果要打开此文件的话,会提CZ是否转换成新?dsp格式?br>.bscQ是用于览目信息的,如果用Source Brower的话必Lq个文g。如果不用这个功能的话,可以在Project Options里面LGenerate Browse Info FileQ这样可以加快编译速度?br>.map是执行文件的映象信息记录文gQ除非对pȝ底层Q这个文件一般用不着?br>.pch(Pre-Compiled File)Q是与编译文Ӟ可以加快~译速度Q但是文仉常大?br>.pdb(Program Database)Q记录了E序有关的一些数据和调试信息Q在调试的时候可能有用?br>.expQ只有在~译DLL的时候才会生成,记录了DLL文g的一些信息,一般也没有用?br>.ncbQ无~译览文g(no compile browser)。当自动完成功能出问题时可以删除此文件。编译工E后会自动生成?
]]> Scintilla 主要cd控g的消?/title> http://m.shnenglu.com/szhoftuncun/archive/2008/07/17/56458.htmlfoxtail foxtail Thu, 17 Jul 2008 10:43:00 GMT http://m.shnenglu.com/szhoftuncun/archive/2008/07/17/56458.html http://m.shnenglu.com/szhoftuncun/comments/56458.html http://m.shnenglu.com/szhoftuncun/archive/2008/07/17/56458.html#Feedback 2 http://m.shnenglu.com/szhoftuncun/comments/commentRss/56458.html http://m.shnenglu.com/szhoftuncun/services/trackbacks/56458.html 主要c?/span>
CellBuffer
保存文本Q样式信息,恢复堆栈Q标{,代码叠vl构{信?/span>
ContractionState
Document
包含 CellBuffer 和一些高度抽象操作,理样式处理?/span>
Editor
使用 ContractionState, Indicator, LineMarker, Style, ViewStyle 来显C文?/span>KeyMap ?/span>ContractionState 同样在这里用?/span>
Indicator
LineMarker
Style
ViewStyle
KeyMap
ScintillaBase
Editor 的子c,增加了调用提C和自动完成{功能,使用c?/span>CallTip ?/span>AutoComplete
CallTip
AutoComplete
Scintilla 文档的每个字W都紧跟兌的样式信息。一个字节的字符信息和一个字节的样式信息作ؓ一个单位。样式信息高 3 位是指示器,?/span>5 位是索引受烦引号索引一个存放样式的数组。这样就可以表示 32 U基样式Q几乎包含所有语a的样式。三个无xC器可以一ơ显C法错误,非法命名Q和~进错误。关于样式的位可以通过 SCI_SETSTYLEBITS 来改变最多其?/span>7 位,剩下的位用于指示器?/span>
字符位置信息?/span>0 开始计敎ͼ?/span>nLen-1 Q中文的字符是两个字Wؓ一个文字,q样计数有误了Q?/span>DBCS Q?/span>
Scintilla 的消息都是以 SCI_GETxxx 或?/span>SCI_SETxxx 来命名的
一Q?/span> 文本取回与修?/span>
主要消息有:
SCI_GETTEXT( int length, char * text) SCI_SETTEXT( < unused > , const char * text) SCI_SETSAVEPOINT SCI_GETLINE( int line, char * text) SCI_REPLACESEL( < unused > , const char * text) SCI_SETREADONLY( bool readOnly) SCI_GETREADONLY SCI_GETTEXTRANGE( < unused > , TextRange * tr) SCI_ALLOCATE( int bytes, < unused > ) SCI_ADDTEXT( int length, const char * s) SCI_ADDSTYLEDTEXT( int length, cell * s) SCI_APPENDTEXT( int length, const char * s) SCI_INSERTTEXT( int pos, const char * text) SCI_CLEARALL SCI_CLEARDOCUMENTSTYLE SCI_GETCHARAT( int position) SCI_GETSTYLEAT( int position) SCI_GETSTYLEDTEXT( < unused > , TextRange * tr) SCI_SETSTYLEBITS( int bits) SCI_GETSTYLEBITS SCI_TARGETASUTF8( < unused > , char * s) SCI_ENCODEDFROMUTF8( const char * utf8, char * encoded) SCI_SETLENGTHFORENCODE( int bytes)
1 Q?/span>SCI_GETTEXT(int length, char *text)
此函数可以取得控件中的字W串存到一个缓冲区Q这样就可以保存文档了。流E是使用 SCI_GETLENGTH 获得字符串的长度然后Ҏ(gu)取得的长度申请一个缓冲区Q再利用该消息取得文本,然后可以保存文本了Q同旉要利?/span> SCI_SETSAVEPOINT 标记文本已保存了?/span>
做了例子果然是可以运行的Q不知道作者是如何制作q样一个控件的。我对他的内部运行机制很感兴,想仔l看一些具体的代码Q而不是仅仅用它。另外发?/span> API 使用的字W是宽字W,q一点很令h讨厌?br> 另外获取处理函数的过E用了上ơ写的typedef的用法,改一下看上去清晰多?br>
typedef int ( * EditorSendFun)( void * , int , int , int ); void * ptr; EditorSendFun editsendmessage;
]]> C++中的强制cd转换[转] http://m.shnenglu.com/szhoftuncun/archive/2008/07/14/56129.htmlfoxtail foxtail Mon, 14 Jul 2008 13:32:00 GMT http://m.shnenglu.com/szhoftuncun/archive/2008/07/14/56129.html http://m.shnenglu.com/szhoftuncun/comments/56129.html http://m.shnenglu.com/szhoftuncun/archive/2008/07/14/56129.html#Feedback 0 http://m.shnenglu.com/szhoftuncun/comments/commentRss/56129.html http://m.shnenglu.com/szhoftuncun/services/trackbacks/56129.html 标准c++中主要有四种强制转换cdq算W:
const_cast Q?/span>reinterpret_cast Q?/span>static_cast Q?/span>dynamic_cast {等?nbsp;
1Q?/span>static_cast <T*>(a)
地址a转换成类型TQT和a必须是指针、引用、算术类型或枚Dcd?nbsp;
表达?/span>static_cast <T*>(a), a的D{换ؓ模板中指定的cdT。在q行时{换过E中Q不q行cd查来保转换的安全性?nbsp;
例子Q?nbsp;
class B { } ; class D : public B { } ; void f(B * pb, D * pd) { D * pd2 = static_cast < D *> (pb); // 不安? pb可能只是B的指?nbsp; B* pb2 = static_cast < B *> (pd); // 安全?nbsp; }
2Q?/span>dynamic_cast <T*>(a)
完成cdơ结构中的提升。T必须是一个指针、引用或无类型的指针。a必须是决定一个指针或引用的表辑ּ?nbsp;
表达?/span>dynamic_cast <T*>(a) aD{换ؓcd为T的对象指针。如果类型T不是a的某个基cdQ该操作返回一个空指针?nbsp;
例子Q?nbsp;
class A { } ; class B { } ; void f() { A * pa = new A; B * pb = new B; void * pv = dynamic_cast < A *> (pa); // pv 现在指向了一个类型ؓA的对?nbsp; pv = dynamic_cast < B *> (pb); // pv 现在指向了一个类型ؓB的对?nbsp; }
3Q?/span>const_cast <T*>(a)
Lcd中的帔RQ除?/span>const 或不E_的变址敎ͼT和a必须是相同的cd?nbsp;
表达?/span>const_cast <T*>(a)被用于从一个类中去除以下这些属性: const , volatile , ?nbsp;__unaligned?nbsp;
例子Q?
class A { } ; void f() { const A * pa = new A; // const对象 A * pb; // 非const对象 // pb = pa; // q里出错,不能const对象指针赋值给非const对象 pb = const_cast < A *> (pa); // 现在OK?nbsp; .. }
4Q?/span>reinterpret_cast <T*>(a)
M指针都可以{换成其它cd的指针,T必须是一个指针、引用、算术类型、指向函数的指针或指向一个类成员的指针?nbsp;
表达?/span>reinterpret_cast <T*>(a)能够用于诸如 char * ?nbsp; int *Q或者One_class* ?nbsp;Unrelated_class*{类DL转换Q因此可能是不安全的?nbsp;
例子Q?nbsp;
class A { } ; class B { } ; void f() { A * pa = new A; void * pv = reinterpret_cast < A *> (pa); // pv 现在指向了一个类型ؓB的对象,q可能是不安全的 }
本文转自http://www.libing.net.cn/read.php?520
]]>typedef用法结 http://m.shnenglu.com/szhoftuncun/archive/2008/07/13/56051.htmlfoxtail foxtail Sun, 13 Jul 2008 14:33:00 GMT http://m.shnenglu.com/szhoftuncun/archive/2008/07/13/56051.html http://m.shnenglu.com/szhoftuncun/comments/56051.html http://m.shnenglu.com/szhoftuncun/archive/2008/07/13/56051.html#Feedback 10 http://m.shnenglu.com/szhoftuncun/comments/commentRss/56051.html http://m.shnenglu.com/szhoftuncun/services/trackbacks/56051.html
Ҏ(gu)出错的常用用法,做了一些整理?br> 一Q?/span> 起别名的两种用法
1 . typedef ( int * Q?nbsp;pInt; 2 . typedef pInt ( int * )
比如 pInt a,b;
W一U表C: int*a;int*b;
W二U表C: int*a,b;
所以第一U更像一个类型,W二U更像宏?/span>
二. 旧式代码中声明对?/span>
typedef struct tagPoint { Int x; Int y; } POINT; POINT a,b;
三. 代码?/span>
为复杂的声明定义一个新的简单的别名
Ҏ(gu)Q?/span>在原来的声明里逐步用别名替换一部分复杂声明Q如此@环,把带变量名的部分留到最后替换,得到的就是原声明的最化版
typedef int ( * PF) ( const char * , const char * );
q个声明引入?/span> PF cd作ؓ函数指针的同义字Q该函数有两?/span> const char * cd的参C及一?/span> int cd的返回倹{?/span>
如果要用下列Ş式的函数声明Q那么上q这?/span> typedef 是不可或~的Q?/p>
PF Register(PF pf);
Register() 的参数是一?/span> PF cd的回调函?/span>Q返回某个函数的地址 Q其|名与先前注册的名字相同。如果不?/span> typedef Q那么代码是q样的:
int ( * Register ( int ( * pf)( const char * , const char * )))( const char * , const char * );
]]> 如何使用Scintilla~辑控g http://m.shnenglu.com/szhoftuncun/archive/2008/07/13/56049.htmlfoxtail foxtail Sun, 13 Jul 2008 13:07:00 GMT http://m.shnenglu.com/szhoftuncun/archive/2008/07/13/56049.html http://m.shnenglu.com/szhoftuncun/comments/56049.html http://m.shnenglu.com/szhoftuncun/archive/2008/07/13/56049.html#Feedback 0 http://m.shnenglu.com/szhoftuncun/comments/commentRss/56049.html http://m.shnenglu.com/szhoftuncun/services/trackbacks/56049.html 一Q?/span> 如何在窗口中建立 Scintilla ~辑控g
1. 载入动态链接库
1 hmod = LoadLibrary( " SciLexer.DLL " ); 2 if (hmod == NULL) 3 { 4 MessageBox(hwndParent,5 " The Scintilla DLL could not be loaded. " , 6 " Error loading Scintilla " , 7 MB_OK | MB_ICONERROR); 8 }9
2. 创徏H口Q已l注册)
hwndScintilla = CreateWindowEx( 0 , " Scintilla " , "" , WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_CLIPCHILDREN, 10 , 10 , 500 , 400 ,hwndParent,(HMENU)GuiID, hInstance,NULL);
二.如何控制H口cL?/span>
Ҏ(gu)一Q给控g发送消息和接受来自控g的响?/span>
SendMessage(hwndScintilla,sci_command,wparam,lparam);
Ҏ(gu)二:首先通过 SCI_GETDIRECTFUNCTION ?/span> SCI_GETDIRECTPOINTER 消息获取~辑控g回调函数的指针和W一个参敎ͼ接下来就可以直接使用~辑控g的消息处理函C?/span>
int ( * fn)( void * , int , int , int ); void * ptr; fn = ( int (__cdecl * )( void * , int , int , int ))SendMessage(hwndScintilla,SCI_GETDIRECTFUNCTION, 0 , 0 ); ptr = ( void * )SendMessage(hwndScintilla,SCI_GETDIRECTPOINTER, 0 , 0 );
然后使用该回调函敎ͼ
fn(ptr,sci_command,wparam,lparam);
三.如何接受响应
只要在父H口消息处理函数中对WM_NOTIFY 消息做相应处?/pre>
NMHDR * lpnmhdr; [ ] case WM_NOTIFY: lpnmhdr = (LPNMHDR) lParam; if (lpnmhdr -> hwndFrom == hwndScintilla) { switch (lpnmhdr -> code) { case SCN_CHARADDED: […] break ; } } break ;
整个q程没有M问题Q做好后是这个样子的Download ?br>此时你会发现该控件你没有发送Q何消息就已经具备了一定的功能Q有redo undo操作Q还有复刉贴?/span>
]]> q期学习计划 http://m.shnenglu.com/szhoftuncun/archive/2008/06/14/53271.htmlfoxtail foxtail Sat, 14 Jun 2008 12:05:00 GMT http://m.shnenglu.com/szhoftuncun/archive/2008/06/14/53271.html http://m.shnenglu.com/szhoftuncun/comments/53271.html http://m.shnenglu.com/szhoftuncun/archive/2008/06/14/53271.html#Feedback 0 http://m.shnenglu.com/szhoftuncun/comments/commentRss/53271.html http://m.shnenglu.com/szhoftuncun/services/trackbacks/53271.html C++E序设计语言 l常看看思考思考习题认真对待?br>法D 需要琢,更需要创造性的应用?br> 一些需要玩玩的程?br>单文本编辑器 先把界面搞出来再实现功能 计算?br> ]]> C++之父表达式计例?/title> http://m.shnenglu.com/szhoftuncun/archive/2008/06/14/53186.htmlfoxtail foxtail Fri, 13 Jun 2008 16:24:00 GMT http://m.shnenglu.com/szhoftuncun/archive/2008/06/14/53186.html http://m.shnenglu.com/szhoftuncun/comments/53186.html http://m.shnenglu.com/szhoftuncun/archive/2008/06/14/53186.html#Feedback 0 http://m.shnenglu.com/szhoftuncun/comments/commentRss/53186.html http://m.shnenglu.com/szhoftuncun/services/trackbacks/53186.html 阅读全文 ]]> 【疑惑】小波变换的一点瑕?/title> http://m.shnenglu.com/szhoftuncun/archive/2008/05/18/50220.htmlfoxtail foxtail Sat, 17 May 2008 17:30:00 GMT http://m.shnenglu.com/szhoftuncun/archive/2008/05/18/50220.html http://m.shnenglu.com/szhoftuncun/comments/50220.html http://m.shnenglu.com/szhoftuncun/archive/2008/05/18/50220.html#Feedback 4 http://m.shnenglu.com/szhoftuncun/comments/commentRss/50220.html http://m.shnenglu.com/szhoftuncun/services/trackbacks/50220.html
?
?.1
?.2
?.1
?.2
?是原图,l过一ơ小波变换后变成?.1Q逆变换回来后是图1.2
看图1.2发现有些像素与原图不?br>然后对图1.2l过一ơ小波变换变成图2.1Q逆变换回来时?.2
?.2与原囑֍分相?br>
法q没有不?br>Z么会有这L现象Q?br>大家帮帮我哈?br>
psQ小波变换是有损?br>
]]> 【{】构造可配置词法分析器【正文六&七?/title> http://m.shnenglu.com/szhoftuncun/archive/2008/04/23/47948.htmlfoxtail foxtail Wed, 23 Apr 2008 12:26:00 GMT http://m.shnenglu.com/szhoftuncun/archive/2008/04/23/47948.html http://m.shnenglu.com/szhoftuncun/comments/47948.html http://m.shnenglu.com/szhoftuncun/archive/2008/04/23/47948.html#Feedback 2 http://m.shnenglu.com/szhoftuncun/comments/commentRss/47948.html http://m.shnenglu.com/szhoftuncun/services/trackbacks/47948.html 阅读全文 ]]> 【{】构造可配置词法分析器【正文五?/title> http://m.shnenglu.com/szhoftuncun/archive/2008/04/23/47943.htmlfoxtail foxtail Wed, 23 Apr 2008 11:50:00 GMT http://m.shnenglu.com/szhoftuncun/archive/2008/04/23/47943.html http://m.shnenglu.com/szhoftuncun/comments/47943.html http://m.shnenglu.com/szhoftuncun/archive/2008/04/23/47943.html#Feedback 0 http://m.shnenglu.com/szhoftuncun/comments/commentRss/47943.html http://m.shnenglu.com/szhoftuncun/services/trackbacks/47943.html 阅读全文 ]]> 【{】构造可配置词法分析器【正文四?/title> http://m.shnenglu.com/szhoftuncun/archive/2008/04/23/47939.htmlfoxtail foxtail Wed, 23 Apr 2008 10:34:00 GMT http://m.shnenglu.com/szhoftuncun/archive/2008/04/23/47939.html http://m.shnenglu.com/szhoftuncun/comments/47939.html http://m.shnenglu.com/szhoftuncun/archive/2008/04/23/47939.html#Feedback 0 http://m.shnenglu.com/szhoftuncun/comments/commentRss/47939.html http://m.shnenglu.com/szhoftuncun/services/trackbacks/47939.html 阅读全文 ]]> 【{】构造可配置词法分析器【正文三?/title> http://m.shnenglu.com/szhoftuncun/archive/2008/04/23/47937.htmlfoxtail foxtail Wed, 23 Apr 2008 10:11:00 GMT http://m.shnenglu.com/szhoftuncun/archive/2008/04/23/47937.html http://m.shnenglu.com/szhoftuncun/comments/47937.html http://m.shnenglu.com/szhoftuncun/archive/2008/04/23/47937.html#Feedback 0 http://m.shnenglu.com/szhoftuncun/comments/commentRss/47937.html http://m.shnenglu.com/szhoftuncun/services/trackbacks/47937.html 阅读全文 ]]> 【{】构造可配置词法分析器【正文二?/title> http://m.shnenglu.com/szhoftuncun/archive/2008/04/22/47815.htmlfoxtail foxtail Tue, 22 Apr 2008 06:26:00 GMT http://m.shnenglu.com/szhoftuncun/archive/2008/04/22/47815.html http://m.shnenglu.com/szhoftuncun/comments/47815.html http://m.shnenglu.com/szhoftuncun/archive/2008/04/22/47815.html#Feedback 0 http://m.shnenglu.com/szhoftuncun/comments/commentRss/47815.html http://m.shnenglu.com/szhoftuncun/services/trackbacks/47815.html 阅读全文 ]]> 【{】构造可配置词法分析器【正文一】陈梓瀚同学著 http://m.shnenglu.com/szhoftuncun/archive/2008/04/22/47779.htmlfoxtail foxtail Mon, 21 Apr 2008 16:19:00 GMT http://m.shnenglu.com/szhoftuncun/archive/2008/04/22/47779.html http://m.shnenglu.com/szhoftuncun/comments/47779.html http://m.shnenglu.com/szhoftuncun/archive/2008/04/22/47779.html#Feedback 0 http://m.shnenglu.com/szhoftuncun/comments/commentRss/47779.html http://m.shnenglu.com/szhoftuncun/services/trackbacks/47779.html 阅读全文 ]]> 初识LSB信息隐藏法 http://m.shnenglu.com/szhoftuncun/archive/2008/03/15/44559.htmlfoxtail foxtail Sat, 15 Mar 2008 05:29:00 GMT http://m.shnenglu.com/szhoftuncun/archive/2008/03/15/44559.html http://m.shnenglu.com/szhoftuncun/comments/44559.html http://m.shnenglu.com/szhoftuncun/archive/2008/03/15/44559.html#Feedback 0 http://m.shnenglu.com/szhoftuncun/comments/commentRss/44559.html http://m.shnenglu.com/szhoftuncun/services/trackbacks/44559.html 阅读全文 ]]> windowsE序设计Q滚动条Q?/title> http://m.shnenglu.com/szhoftuncun/archive/2008/01/22/41675.htmlfoxtail foxtail Tue, 22 Jan 2008 14:33:00 GMT http://m.shnenglu.com/szhoftuncun/archive/2008/01/22/41675.html http://m.shnenglu.com/szhoftuncun/comments/41675.html http://m.shnenglu.com/szhoftuncun/archive/2008/01/22/41675.html#Feedback 2 http://m.shnenglu.com/szhoftuncun/comments/commentRss/41675.html http://m.shnenglu.com/szhoftuncun/services/trackbacks/41675.html 阅读全文 ]]> windows~程(输出文字) http://m.shnenglu.com/szhoftuncun/archive/2008/01/21/41565.htmlfoxtail foxtail Mon, 21 Jan 2008 07:50:00 GMT http://m.shnenglu.com/szhoftuncun/archive/2008/01/21/41565.html http://m.shnenglu.com/szhoftuncun/comments/41565.html http://m.shnenglu.com/szhoftuncun/archive/2008/01/21/41565.html#Feedback 0 http://m.shnenglu.com/szhoftuncun/comments/commentRss/41565.html http://m.shnenglu.com/szhoftuncun/services/trackbacks/41565.html 阅读全文 ]]> windows~程Q窗口与消息Q?/title> http://m.shnenglu.com/szhoftuncun/archive/2008/01/19/41479.htmlfoxtail foxtail Sat, 19 Jan 2008 12:03:00 GMT http://m.shnenglu.com/szhoftuncun/archive/2008/01/19/41479.html http://m.shnenglu.com/szhoftuncun/comments/41479.html http://m.shnenglu.com/szhoftuncun/archive/2008/01/19/41479.html#Feedback 0 http://m.shnenglu.com/szhoftuncun/comments/commentRss/41479.html http://m.shnenglu.com/szhoftuncun/services/trackbacks/41479.html 阅读全文 ]]> windowsE序设计(开? http://m.shnenglu.com/szhoftuncun/archive/2008/01/18/41443.htmlfoxtail foxtail Fri, 18 Jan 2008 14:05:00 GMT http://m.shnenglu.com/szhoftuncun/archive/2008/01/18/41443.html http://m.shnenglu.com/szhoftuncun/comments/41443.html http://m.shnenglu.com/szhoftuncun/archive/2008/01/18/41443.html#Feedback 3 http://m.shnenglu.com/szhoftuncun/comments/commentRss/41443.html http://m.shnenglu.com/szhoftuncun/services/trackbacks/41443.html 阅读全文 ]]> 关于内存模式[节选] http://m.shnenglu.com/szhoftuncun/archive/2008/01/01/40195.htmlfoxtail foxtail Tue, 01 Jan 2008 13:18:00 GMT http://m.shnenglu.com/szhoftuncun/archive/2008/01/01/40195.html http://m.shnenglu.com/szhoftuncun/comments/40195.html http://m.shnenglu.com/szhoftuncun/archive/2008/01/01/40195.html#Feedback 0 http://m.shnenglu.com/szhoftuncun/comments/commentRss/40195.html http://m.shnenglu.com/szhoftuncun/services/trackbacks/40195.html 阅读全文 ]]> 关系闭包q算 http://m.shnenglu.com/szhoftuncun/archive/2007/11/12/36442.htmlfoxtail foxtail Mon, 12 Nov 2007 06:25:00 GMT http://m.shnenglu.com/szhoftuncun/archive/2007/11/12/36442.html http://m.shnenglu.com/szhoftuncun/comments/36442.html http://m.shnenglu.com/szhoftuncun/archive/2007/11/12/36442.html#Feedback 0 http://m.shnenglu.com/szhoftuncun/comments/commentRss/36442.html http://m.shnenglu.com/szhoftuncun/services/trackbacks/36442.html 阅读全文 ]]> 青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
ŷһ |
þþƷ |
ŷƷž |
þþþþ97 |
þþþþҹƷƷ |
ѶƵպ |
ŷ13d |
Ʒ߹ۿ |
ҹҹav˾þ |
žž91 |
þòӰ |
պƵ߹ۿһ |
һһþۺϺݺϾӰҵ |
ŷҹ |
ҹҹavһ
|
þþþ߹ۿ |
þó97Ļ |
þþ˳ӰƬһۿ
|
һ |
һaëƬ |
91þҹɫƷվ |
þŮͬοһ |
þþþþþþþþþþ9999 |
˾þ |
һɫ |
þþþۺ |
ŷxxxx137 |
뾫Ʒһav |
ɫƷ |
պҹ |
ŷһþþ |
av˹ |
ŷ |
ݺadyƷ |
ŷһߵӰ |
þþžƵ |
91þþƷŮ߳ |
ëƬ |
Բ2019² |
Ƶѡ |
պ |
ŷɻƵ |
һ崿 |
ŷһƬ߲ |
һ ߹ۿ |
99ѾƷ߹ۿ |
ŷһ |
һ |
ŷƷ |
þɫav |
ŷ߹ۿ |
ۿ |
av |
ŷлshe2ŷ |
һ |
Ƶһ |
ŷvaŷva㽶 |
³ʦһ |
þþþžžž |
þҾƷ |
˳߹ۿ |
ŷһ |
99ֻоþþƷƵ |
һۿ |
ڸƵ |
ŷһ6969 |
պƵѹۿƵ
|
Ʒһ |
ŮƵaƬŷ |
ŷպѹۿһ |
þþþۺ |
ŷձĻ |
þƵƵ |
ƷŮxx |
ƷŮþþþ |
˾Ʒ |
ŮվŷƷ |
ŷ߹ۿƵ |
ŷպxxxxx |
ƷƵ߹ۿվ |
ŷղ |
þù鶹91 |
þþ91Ʒ |
һ߹ۿ
|
ƷҹСƵ |
һһþaþþƷţţӰ |
Ʒһ߹ۿ |
Ұŷͽxxxx |
þۺϾþڹ |
ɫ˾Ʒվ |
ѾþþһƷþ |
߹ۿ |
ƷձƷ |
þþƷһ
|
ŷպһѿ |
þۺͼƬ |
Ůþ |
þӰԺҹ |
һ |
þþƷ99 |
Ƶ |
ŷպƵ |
ŷߴ |
һaëƬ |
99˾þþƷӰԺ |
ŷպۺϾƷ |
þ |
ҹҹˬ99þùۺϾƷŮ |
ŷӰԺ߲ |
ŷһ |
պƵ |
ƷƵ߹ۿվ |
þƵ |
þþƷַ |
ŷպƵ |
ҹѵӰһ߹ۿ |
һ˾Ʒ |
Ӱѹۿ |
լ66һ
|
ŷպ |
ŷxxxxx |
ŷƷþþþþþѹۿ |
þwww_ƬѲ |
СƵ |
Ƶ |
˵ |
avӰ |
ŷjizz19ŷ |
Ʒרh߹ۿ |
߾ƷƷ884a |
ŷɫƷ߹ۿƵ |
ŷһþþ |
߹ۿ |
Ʒһü٤ |
av |
þûɫ2Ӱ |
ƷԴ |
þ |
Ƶŷһ |
ŷƷһ |
ŷۺһ |
ҹҹһ |
ŷӰѹۿȫ |
ҹѸƵ |
þùƷ |
þþƷ30 |
պƵƷ |
˳վ߹ۿ |
ŷƵһ߹ۿ
|
һ |
þþþŷƷ |
ŷۺһ |
ŷպƷ |
鶹ƷƵ߹ۿƵ |
þþһ |
ŷvaӰԺ |
ëƬƵ |
ŷ |
ŷ12 |
ŷ999 |
ŷձ |
þþƷҳ |
ŷ߹ۿ |
ŷ߶Ƶ |
鶹ѾƷƵ |
ŷƷ߹ۿҹӰ |
99 |
þѻɫ |
þѹۿ |
ɫ߹ۿ |
þѸƵ |
һɫþۺƷ |
þþ999 |
þþþþŷ |
Ʒ66mio |
ŷһþ
|
ѡƵѿ |
Ʒþþþþһ |
ŷ͵ҹƵ |
ŷպۺ |
Ʒһӣ |
պƵѹۿ |
ŷmvպmvվapp |
þۺϺݺۺϾþü |
ŷƷ˾þ |
ŷƵ߿ |
ۺƷ |
99Ƶ߾ƷԲѹۿ
|
ԲƷƵ߿һj8 |
˳һ |
ŷպƷ |
ҾƷþþþþþӰԺ |
պav |
ֲav |
һõþۺĻ |
鶹СƵ |
ëƬ |
һav |
ŷպۺ |
þƵ |