??xml version="1.0" encoding="utf-8" standalone="yes"?>久久综合香蕉国产蜜臀AV,中文字幕日本人妻久久久免费,无码八A片人妻少妇久久http://www.shnenglu.com/jianc/<script type="text/javascript"> function OnClient(){ var tmp = 1; var tmp2 = 2; var sum = tmp + tmp2; alert(sum); } </script>zh-cnTue, 06 May 2025 22:32:12 GMTTue, 06 May 2025 22:32:12 GMT60代码自动补全插ghttp://www.shnenglu.com/jianc/archive/2016/01/31/212766.htmljiancjiancSun, 31 Jan 2016 13:21:00 GMThttp://www.shnenglu.com/jianc/archive/2016/01/31/212766.htmlhttp://www.shnenglu.com/jianc/comments/212766.htmlhttp://www.shnenglu.com/jianc/archive/2016/01/31/212766.html#Feedback0http://www.shnenglu.com/jianc/comments/commentRss/212766.htmlhttp://www.shnenglu.com/jianc/services/trackbacks/212766.htmlVisual Assist
http://www.wholetomato.com/


jianc 2016-01-31 21:21 发表评论
]]>
实用工具音速启?/title><link>http://www.shnenglu.com/jianc/archive/2012/12/13/196202.html</link><dc:creator>jianc</dc:creator><author>jianc</author><pubDate>Thu, 13 Dec 2012 02:19:00 GMT</pubDate><guid>http://www.shnenglu.com/jianc/archive/2012/12/13/196202.html</guid><wfw:comment>http://www.shnenglu.com/jianc/comments/196202.html</wfw:comment><comments>http://www.shnenglu.com/jianc/archive/2012/12/13/196202.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/jianc/comments/commentRss/196202.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/jianc/services/trackbacks/196202.html</trackback:ping><description><![CDATA[http://www.3lsoft.com/<img src ="http://www.shnenglu.com/jianc/aggbug/196202.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/jianc/" target="_blank">jianc</a> 2012-12-13 10:19 <a href="http://www.shnenglu.com/jianc/archive/2012/12/13/196202.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>sqlite 判断表是否存?/title><link>http://www.shnenglu.com/jianc/archive/2012/10/17/193427.html</link><dc:creator>jianc</dc:creator><author>jianc</author><pubDate>Wed, 17 Oct 2012 09:54:00 GMT</pubDate><guid>http://www.shnenglu.com/jianc/archive/2012/10/17/193427.html</guid><wfw:comment>http://www.shnenglu.com/jianc/comments/193427.html</wfw:comment><comments>http://www.shnenglu.com/jianc/archive/2012/10/17/193427.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/jianc/comments/commentRss/193427.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/jianc/services/trackbacks/193427.html</trackback:ping><description><![CDATA[<div>执行sql语句Q?br />SELECT COUNT(*) FROM<strong> sqlite_master</strong> where type='table' and name='xxx表名'</div><img src ="http://www.shnenglu.com/jianc/aggbug/193427.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/jianc/" target="_blank">jianc</a> 2012-10-17 17:54 <a href="http://www.shnenglu.com/jianc/archive/2012/10/17/193427.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>sqlite开发工?/title><link>http://www.shnenglu.com/jianc/archive/2012/10/17/193417.html</link><dc:creator>jianc</dc:creator><author>jianc</author><pubDate>Wed, 17 Oct 2012 07:30:00 GMT</pubDate><guid>http://www.shnenglu.com/jianc/archive/2012/10/17/193417.html</guid><wfw:comment>http://www.shnenglu.com/jianc/comments/193417.html</wfw:comment><comments>http://www.shnenglu.com/jianc/archive/2012/10/17/193417.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/jianc/comments/commentRss/193417.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/jianc/services/trackbacks/193417.html</trackback:ping><description><![CDATA[<div>http://sqliteadmin.orbmu2k.de/</div><img src ="http://www.shnenglu.com/jianc/aggbug/193417.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/jianc/" target="_blank">jianc</a> 2012-10-17 15:30 <a href="http://www.shnenglu.com/jianc/archive/2012/10/17/193417.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>zeromq?http://www.shnenglu.com/jianc/archive/2012/10/11/193170.htmljiancjiancThu, 11 Oct 2012 07:58:00 GMThttp://www.shnenglu.com/jianc/archive/2012/10/11/193170.htmlhttp://www.shnenglu.com/jianc/comments/193170.htmlhttp://www.shnenglu.com/jianc/archive/2012/10/11/193170.html#Feedback0http://www.shnenglu.com/jianc/comments/commentRss/193170.htmlhttp://www.shnenglu.com/jianc/services/trackbacks/193170.htmlhttp://www.zeromq.org/
https://github.com/zeromq/libzmq
http://zguide2.zeromq.org/page:all
http://blog.codingnow.com/2011/02/zeromq_message_patterns.html



jianc 2012-10-11 15:58 发表评论
]]>
Qt 搭徏c/s框架ȝhttp://www.shnenglu.com/jianc/archive/2012/08/08/186661.htmljiancjiancWed, 08 Aug 2012 08:07:00 GMThttp://www.shnenglu.com/jianc/archive/2012/08/08/186661.htmlhttp://www.shnenglu.com/jianc/comments/186661.htmlhttp://www.shnenglu.com/jianc/archive/2012/08/08/186661.html#Feedback0http://www.shnenglu.com/jianc/comments/commentRss/186661.htmlhttp://www.shnenglu.com/jianc/services/trackbacks/186661.htmlQt 搭徏c/s框架ȝ

一 服务?br />使用QTcpServerc?br />QTcpServer *tcpServer = new QTcpServer(this);
开启监?br />tcpServer->listen(QHostAddress::LocalHost, port);    //port为端口号
如果监听p|, h看tcpServer->errorString();
可以q接tcpServer对象的newConnection信号, q样一有客L(fng)q接上来, 可以调用我们的q接槽进行处?br />connect(tcpServer, SIGNAL(newConnection), this, SLOT(slotNewClientConnect()));

当断开监听? 可以先判断单前是否在监听
tcpServer->isListening(), 若果? 则调用tcpServer->close();关闭监听

当客L(fng)q接上来的时? 可以调用tcpServer->nextPendingConnection();来允许客L(fng)q接, q返回客L(fng)的socket对象
可以对连接上来的socket对象q行信号-槽关? q样可以对q个客户端的socket对象q行更多的控?br />


?客户?br />使用QTcpSocket对象q接到服务器
QTcpSocket *tcpSocket = new QTcpSocket(this);
tcpSocket->abort();    //取消已有的连?br />tcpSocket->connectToHost(服务器ip, 服务器端?;
可以兌tcpSocket的error信号, q样q接p|时候就可以得到通知?br />可以兌tcpSocket的readyRead()信号, q样接收到数据时候也可以得到通知?br />同样connected()信号提示已成功连接到服务?br />disconnected()信号提示已经断开q接, 可以兌到该对象的deleteLater()槽上删除q接(服务?


q样, 只要得到通讯的socket对象, 兌一下readyRead()信号可以读取连接端发送过来的数据, 写的话直接调用writeҎ(gu)卛_


写数据发送可以用QByteArray和QDataStreamq行操作:
QDataStream对象可以对QByteArray对象q行d操作
比如Q?br />QByteArray block;
QDataStream out(&block, QIODevice::WriteOnly);
out.setVersion(QDataStream::Qt_4_0);    //要设|版? 版本可和接受端d版本号一?br />out << (quint16)0; //写要发送数据的长度, q里先用0写前面两个字节占? 后面再补上来
out << tr("发送的数据");
out.device()->seek(0);    //又蟩到缓冲区的开? 准备些数据包的长?br />out << (quint16)(block.size() - sizeof(quint16));
然后使用q接套接字对?conObj->write(QByteArray对象); q样把数据发送出M, ?br />conObj->write(block);


dq接端发送过来的数据
同样用QDataStream来处?
QDataStream in(q接端套接字对象);
in.setVersion(QDataStream::Qt_4_0);    //要和发送端的版本号一?br />
qint16 blockSize = 0; //初始?

if(0 == blockSize)
{
    if(conSocket->bytesAvailable() < (int)sizeof(quint16)) //如果已经接收到的数据于2个字?
    {                                                      //说明数据q没接收完,直接退出,{待数据接收完全
        return;
    }
    in >> bIockSize; //保存数据包大?两个字节)
}
if(conSocket->bytesAvailable() < blockSize)
{//接收到的数据不完?br />    return;
}
in >> message; //QString message; 把接收到的数据存攑ֈmessage对象里面
q样ok?br />

//取得本地ip地址信息
QString localHostName = QHostInfo::localHostName();
    QHostInfo info = QHostInfo::fromName(localHostName);
    qDebug() << "localHostName:" << localHostName << endl
             << "IP Address:" << info.addresses();






jianc 2012-08-08 16:07 发表评论
]]>
QtW记http://www.shnenglu.com/jianc/archive/2012/08/04/186237.htmljiancjiancSat, 04 Aug 2012 02:30:00 GMThttp://www.shnenglu.com/jianc/archive/2012/08/04/186237.htmlhttp://www.shnenglu.com/jianc/comments/186237.htmlhttp://www.shnenglu.com/jianc/archive/2012/08/04/186237.html#Feedback0http://www.shnenglu.com/jianc/comments/commentRss/186237.htmlhttp://www.shnenglu.com/jianc/services/trackbacks/186237.html
1.用Qt Creator创徏一个基于GUI的应用程? 选择基类有QWidget, QDialog, QMainWindow三种. 发现一个问? 当选择用QWidget, QDialog? 可以直接在派生类的构造函数里创徏控gd到布局理器对? 然后调用setLayout(布局理器对?可以在界面昄创徏好的控g? 然而选用QMainWindow作ؓ(f)基类的时? q样操作却没有显C出控g? l过癑ֺ, 发现原来zc还要创Z个QWidget对象, 把布局理器放到这个QWidget对象上面, 然后把这个QWidget对象作ؓ(f)参数调用setCentralWidget可以正常显C控件了.

2.解决Qt中显CZ文ؕ码的Ҏ(gu), q里直接d两个Ҏ(gu)的调?
QTextCodec::setCodecForTr(QTextCodec::codecForLocale());
QTextCodec::setCodecForCStrings(QTextCodec::codecForLocale());

3.H口样式
setWindowFlags(Qt::FramelessWindowHint); //LH口Ҏ(gu)标题

4.md5加密
Qt中用MD5加密
QCryptographicHash test(QCryptographicHash::MD5);
QByteArray data;
data.append(tr("test"));
test.addData(data);
QByteArray result = test.result();

result.toBase64(); //密文用base64~码
result.toHex(); //?6q制昄数据

5.使用多线E?br />l承QThread, 重写run虚方? 如果使用U程事g循环, 在run里面使用QObject对象q用connect兌信号, 需要在构造函数里调用
moveToThread(this);否则slots槽还是在主调U程中被调用而不是在新创建的U程中执行的.

6.
wchar_t* 转QString

wchar_t* wptr = L"test";
QString ret = QString::fromWCharArray(wptr);
QString ret2 = QString((QChar*)wptr, wcslen(wptr));

QString 转wchar_t*
wchar_t szBuf[1024];
QString str = tr("hello");
wcscpy_s(reinterpret_cast<wchar_t*>(szBuf),
sizeof(szBuf) / sizeof(wchar_t),
reinterpret_cast<const wchar_t*>(str.utf16()));

7.
QTreeView 讄列宽度固?br />QTreeView()::header()->setResizeMode(QHeaderView::Fixed);

8.对话框屏q居中显C?br />
quint32 scrwidth = QApplication::desktop()->width();
 quint32 scrheight = QApplication::desktop()->height();
 quint32 width = this->width();
 quint32 height = this->height();
 this->move((scrwidth - width) / 2, (scrheight - height) / 2);

9.发送信L(fng)时? 一些类型作为参? 需要注?
Q_DECLARE_METATYPE(cd)
qRegisterMetaType<cd>("cd");
cd也可以是l构体等其他l构

10.rcc资源文g
bin目录下有个rcc.exe工具, 可以吧qrc脚本~译成rcc资源2q制文g, 命o(h)如下:
rcc -binary xxx.qrc -o xxx.rcc

在程序中引用q个rcc资源文g:
QResource::registerResource("xxx.rcc");
卸蝲
QResource::unregisterResource("xxx.rcc")






jianc 2012-08-04 10:30 发表评论
]]>
Qt gif动画http://www.shnenglu.com/jianc/archive/2012/07/31/185717.htmljiancjiancTue, 31 Jul 2012 01:27:00 GMThttp://www.shnenglu.com/jianc/archive/2012/07/31/185717.htmlhttp://www.shnenglu.com/jianc/comments/185717.htmlhttp://www.shnenglu.com/jianc/archive/2012/07/31/185717.html#Feedback0http://www.shnenglu.com/jianc/comments/commentRss/185717.htmlhttp://www.shnenglu.com/jianc/services/trackbacks/185717.htmlQt可以用QLabel和QMovie昄gif动画


QMovie *obj = new QMovie("xxx.gif");
labObj->setMovie(obj);
obj->start();

jianc 2012-07-31 09:27 发表评论
]]>
w.cn9.cn注册http://www.shnenglu.com/jianc/archive/2012/06/06/177798.htmljiancjiancWed, 06 Jun 2012 08:01:00 GMThttp://www.shnenglu.com/jianc/archive/2012/06/06/177798.htmlhttp://www.shnenglu.com/jianc/comments/177798.htmlhttp://www.shnenglu.com/jianc/archive/2012/06/06/177798.html#Feedback0http://www.shnenglu.com/jianc/comments/commentRss/177798.htmlhttp://www.shnenglu.com/jianc/services/trackbacks/177798.html

@w.cn邮箱注册地址Q?br /> https://domains.live.com/members/signup.aspx?domain=w.cn

@9.cn邮箱注册地址Q?br /> https://domains.live.com/members/signup.aspx?domain=9.cn

登陆地址:www.hotmail.com

jianc 2012-06-06 16:01 发表评论
]]>
取消svnC密码http://www.shnenglu.com/jianc/archive/2012/05/31/176970.htmljiancjiancThu, 31 May 2012 12:51:00 GMThttp://www.shnenglu.com/jianc/archive/2012/05/31/176970.htmlhttp://www.shnenglu.com/jianc/comments/176970.htmlhttp://www.shnenglu.com/jianc/archive/2012/05/31/176970.html#Feedback0http://www.shnenglu.com/jianc/comments/commentRss/176970.htmlhttp://www.shnenglu.com/jianc/services/trackbacks/176970.html在系l盘?br />q入目录:
Documents and Settings\pȝ用户名\Application Data\Subversion\auth\
把该删的删除, ok?br />
记得备䆾..


jianc 2012-05-31 20:51 发表评论
]]>
对话框E入浅出效?/title><link>http://www.shnenglu.com/jianc/archive/2012/05/29/176639.html</link><dc:creator>jianc</dc:creator><author>jianc</author><pubDate>Tue, 29 May 2012 10:52:00 GMT</pubDate><guid>http://www.shnenglu.com/jianc/archive/2012/05/29/176639.html</guid><wfw:comment>http://www.shnenglu.com/jianc/comments/176639.html</wfw:comment><comments>http://www.shnenglu.com/jianc/archive/2012/05/29/176639.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/jianc/comments/commentRss/176639.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/jianc/services/trackbacks/176639.html</trackback:ping><description><![CDATA[要实现对话框淡入出效果, q是挺简单的, 说白? 是在对话框初始化时候加个定时器, 在对话框销毁前也加个定时器, 定时器的操作, 无非是更新对话框界面的透明? 要改变对话框的透明? 用一个API搞定了:SetLayeredWindowAttributes<br /><br />? 思\是q样, q里上关键代码吧<br /><div><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">typedef BOOL (__stdcall </span><span style="color: #000000; ">*</span><span style="color: #000000; ">FunSetLayeredWindowAttributes)(HWND hwnd, COLORREF crKey, BYTE bAlpha, DWORD dwFlags);<br />FunSetLayeredWindowAttributes funSetLayeredWindowAttributes;<br />funSetLayeredWindowAttributes </span><span style="color: #000000; ">=</span><span style="color: #000000; ">  (FunSetLayeredWindowAttributes)GetProcAddress(GetModuleHandle(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">user32.dll</span><span style="color: #000000; ">"</span><span style="color: #000000; ">), </span><span style="color: #000000; ">"</span><span style="color: #000000; ">SetLayeredWindowAttributes</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);ModifyStyleEx(NULL, </span><span style="color: #000000; ">0x80000</span><span style="color: #008000; ">/*</span><span style="color: #008000; ">WS_EX_LAYERED</span><span style="color: #008000; ">*/</span><span style="color: #000000; ">); </span><span style="color: #008000; ">//</span><span style="color: #008000; ">H口要有WS_EX_LAYERED属性才能用讄透明的那个API</span></div><div></div><br /><div><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">enum</span><span style="color: #000000; ">{IDT_SHOW </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #000000; ">100</span><span style="color: #000000; ">, IDT_EXIT </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #000000; ">101</span><span style="color: #000000; ">};</span></div></div>在OnInitDialogҎ(gu)里面d一个定时器</div><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">SetTimer(IDT_SHOW, </span><span style="color: #000000; ">50</span><span style="color: #000000; ">, NULL);</span></div><br />同样, 在OnCancelҎ(gu)里面d一个定时器, Z把IDT_SHOW定时器给KILL?br /><div><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">KillTimer(IDT_SHOW);<br />SetTimer(IDT_EXIT, </span><span style="color: #000000; ">50</span><span style="color: #000000; ">, NULL);</span></div></div><br />OnTimerҎ(gu)q样?<br /><div><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">switch</span><span style="color: #000000; ">(nIDEvent)<br />{<br /></span><span style="color: #0000FF; ">case</span><span style="color: #000000; "> IDT_SHOW:<br />    funSetLayeredWindowAttributes(</span><span style="color: #0000FF; ">this</span><span style="color: #000000; ">-></span><span style="color: #000000; ">m_hWnd, </span><span style="color: #000000; ">0</span><span style="color: #000000; ">, m_current </span><span style="color: #000000; ">%</span><span style="color: #000000; "> </span><span style="color: #000000; ">255</span><span style="color: #000000; ">, </span><span style="color: #000000; ">2</span><span style="color: #000000; ">);<br />    m_current </span><span style="color: #000000; ">+=</span><span style="color: #000000; "> </span><span style="color: #000000; ">5</span><span style="color: #000000; ">;<br />        <br />    </span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(m_current </span><span style="color: #000000; ">>=</span><span style="color: #000000; "> </span><span style="color: #000000; ">255</span><span style="color: #000000; ">)<br />        KillTimer(IDT_SHOW);<br />    </span><span style="color: #0000FF; ">break</span><span style="color: #000000; ">;<br /></span><span style="color: #0000FF; ">case</span><span style="color: #000000; "> IDT_EXIT:<br />    m_current </span><span style="color: #000000; ">-=</span><span style="color: #000000; "> </span><span style="color: #000000; ">5</span><span style="color: #000000; ">;<br />    funSetLayeredWindowAttributes(</span><span style="color: #0000FF; ">this</span><span style="color: #000000; ">-></span><span style="color: #000000; ">m_hWnd, </span><span style="color: #000000; ">0</span><span style="color: #000000; ">, m_current </span><span style="color: #000000; ">%</span><span style="color: #000000; "> </span><span style="color: #000000; ">255</span><span style="color: #000000; ">, </span><span style="color: #000000; ">2</span><span style="color: #000000; ">);<br />    </span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(m_current </span><span style="color: #000000; "><=</span><span style="color: #000000; "> </span><span style="color: #000000; ">5</span><span style="color: #000000; ">)<br />    {<br />        CDialog::OnCancel();<br />        KillTimer(IDT_EXIT);<br />    }<br />    </span><span style="color: #0000FF; ">break</span><span style="color: #000000; ">;<br />}</span></div></div><br />很简单吧, 一个E入浅出效果就出来?br /><br />?<br />static控g背景透明<br />dWM_CTLCOLOR消息映射<div>ON_WM_CTLCOLOR()<br />d响应函数<br /><div>afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);</div><br />实现响应函数<br /><div><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(IDS_STATIC </span><span style="color: #000000; ">==</span><span style="color: #000000; "> pWnd</span><span style="color: #000000; ">-></span><span style="color: #000000; ">GetDlgCtrlID())<br />{<br />    pDC</span><span style="color: #000000; ">-></span><span style="color: #000000; ">SetBkMode(TRANSPARENT);<br />    </span><span style="color: #0000FF; ">return</span><span style="color: #000000; "> (HBRUSH)::GetStockObject(NULL_BRUSH);<br />}</span></div></div><br /><br />q里, 装了一个基c? 方便以后?br />FadeIODlg.h<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">#pragma once<br /><br /></span><span style="color: #0000FF; ">class</span><span style="color: #000000; "> CFadeIODlg : </span><span style="color: #0000FF; ">public</span><span style="color: #000000; "> CDialog<br />{<br />    DECLARE_MESSAGE_MAP()<br /></span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">:<br />    CFadeIODlg(UINT uDLGID, CWnd</span><span style="color: #000000; ">*</span><span style="color: #000000; "> pParent </span><span style="color: #000000; ">=</span><span style="color: #000000; "> NULL);<br />    </span><span style="color: #0000FF; ">virtual</span><span style="color: #000000; "> </span><span style="color: #000000; ">~</span><span style="color: #000000; ">CFadeIODlg();<br /><br /></span><span style="color: #0000FF; ">protected</span><span style="color: #000000; ">:<br />    </span><span style="color: #0000FF; ">virtual</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">void</span><span style="color: #000000; "> DoDataExchange(CDataExchange</span><span style="color: #000000; ">*</span><span style="color: #000000; "> pDX);<br />    </span><span style="color: #0000FF; ">virtual</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">void</span><span style="color: #000000; "> OnCancel();<br />    </span><span style="color: #0000FF; ">virtual</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">void</span><span style="color: #000000; "> OnOK();<br /><br />    afx_msg BOOL OnInitDialog();<br />    afx_msg </span><span style="color: #0000FF; ">void</span><span style="color: #000000; "> OnTimer(UINT nIDEvent);    <br /><br /></span><span style="color: #0000FF; ">private</span><span style="color: #000000; ">:<br />    </span><span style="color: #0000FF; ">enum</span><span style="color: #000000; ">{ TIME_BEGIN </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #000000; ">100</span><span style="color: #000000; ">, TIME_END </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #000000; ">101</span><span style="color: #000000; ">};<br />    typedef BOOL (__stdcall </span><span style="color: #000000; ">*</span><span style="color: #000000; ">FUNSetLayeredWindowAttributes)(HWND hwnd, COLORREF crKey, BYTE bAlpha, DWORD dwFlags);<br />    FUNSetLayeredWindowAttributes m_funTransparent;<br />    <br />    </span><span style="color: #0000FF; ">enum</span><span style="color: #000000; ">{<br />        MAX_TRANSPARENT </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #000000; ">255</span><span style="color: #000000; ">,        </span><span style="color: #008000; ">//</span><span style="color: #008000; ">最大透明?/span><span style="color: #008000; "><br /></span><span style="color: #000000; ">        NUM_BEGIN </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #000000; ">10</span><span style="color: #000000; ">,                </span><span style="color: #008000; ">//</span><span style="color: #008000; ">开始计时器旉间隔</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">        NUM_END </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #000000; ">10</span><span style="color: #000000; ">,                </span><span style="color: #008000; ">//</span><span style="color: #008000; ">l束计时器时间间?/span><span style="color: #008000; "><br /></span><span style="color: #000000; ">        NUM_CHANGE </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #000000; ">5</span><span style="color: #000000; ">,                </span><span style="color: #008000; ">//</span><span style="color: #008000; ">改变透明?/span><span style="color: #008000; "><br /></span><span style="color: #000000; ">    };<br /><br />    </span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">            m_currentTransparent;    </span><span style="color: #008000; ">//</span><span style="color: #008000; ">当前H口透明?/span><span style="color: #008000; "><br /></span><span style="color: #000000; ">};<br /><br /></span></div><br />FadeIODlg.cpp<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">#include </span><span style="color: #000000; ">"</span><span style="color: #000000; ">stdafx.h</span><span style="color: #000000; ">"</span><span style="color: #000000; "><br />#include </span><span style="color: #000000; ">"</span><span style="color: #000000; ">UI.h</span><span style="color: #000000; ">"</span><span style="color: #000000; "><br />#include </span><span style="color: #000000; ">"</span><span style="color: #000000; ">FadeIODlg.h</span><span style="color: #000000; ">"</span><span style="color: #000000; "><br /><br />#ifdef _DEBUG<br /></span><span style="color: #0000FF; ">#define</span><span style="color: #000000; "> new DEBUG_NEW</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">#undef</span><span style="color: #000000; "> THIS_FILE</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">static</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">char</span><span style="color: #000000; "> THIS_FILE[] </span><span style="color: #000000; ">=</span><span style="color: #000000; "> __FILE__;<br /></span><span style="color: #0000FF; ">#endif</span><span style="color: #000000; "><br /><br /><br />CFadeIODlg::CFadeIODlg(UINT uDLGID, CWnd</span><span style="color: #000000; ">*</span><span style="color: #000000; "> pParent </span><span style="color: #008000; ">/*</span><span style="color: #008000; "> = NULL </span><span style="color: #008000; ">*/</span><span style="color: #000000; ">)<br />    : CDialog(uDLGID, pParent)<br />{}<br /><br />CFadeIODlg::</span><span style="color: #000000; ">~</span><span style="color: #000000; ">CFadeIODlg()<br />{}<br /><br /></span><span style="color: #0000FF; ">void</span><span style="color: #000000; "> CFadeIODlg::DoDataExchange(CDataExchange</span><span style="color: #000000; ">*</span><span style="color: #000000; "> pDX)<br />{<br />    CDialog::DoDataExchange(pDX);<br />}<br /><br /><br />BEGIN_MESSAGE_MAP(CFadeIODlg, CDialog)<br />    ON_WM_TIMER()<br />END_MESSAGE_MAP()<br /><br />BOOL CFadeIODlg::OnInitDialog()<br />{<br />    CDialog::OnInitDialog();<br />    ModifyStyleEx(</span><span style="color: #000000; ">0</span><span style="color: #000000; ">, </span><span style="color: #000000; ">0x80000</span><span style="color: #000000; ">);<br />    m_currentTransparent </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />    m_funTransparent </span><span style="color: #000000; ">=</span><span style="color: #000000; "> (FUNSetLayeredWindowAttributes)GetProcAddress(GetModuleHandle(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">User32.dll</span><span style="color: #000000; ">"</span><span style="color: #000000; ">), </span><span style="color: #000000; ">"</span><span style="color: #000000; ">SetLayeredWindowAttributes</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />    </span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(m_funTransparent)<br />    {<br />        </span><span style="color: #008000; ">//</span><span style="color: #008000; ">m_funTransparent(this->GetSafeHwnd(), 0, 0, 2);</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">        SetTimer(TIME_BEGIN, NUM_BEGIN, NULL);<br />    }<br /><br />    </span><span style="color: #0000FF; ">return</span><span style="color: #000000; "> TRUE;<br />}<br /><br /></span><span style="color: #0000FF; ">void</span><span style="color: #000000; "> CFadeIODlg::OnTimer(UINT nIDEvent)<br />{<br />    </span><span style="color: #0000FF; ">switch</span><span style="color: #000000; ">(nIDEvent)<br />    {<br />    </span><span style="color: #0000FF; ">case</span><span style="color: #000000; "> TIME_BEGIN:<br />        </span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(m_currentTransparent </span><span style="color: #000000; "><=</span><span style="color: #000000; "> MAX_TRANSPARENT)<br />        {<br />            m_funTransparent(</span><span style="color: #0000FF; ">this</span><span style="color: #000000; ">-></span><span style="color: #000000; ">GetSafeHwnd(), </span><span style="color: #000000; ">0</span><span style="color: #000000; ">, m_currentTransparent, </span><span style="color: #000000; ">2</span><span style="color: #000000; ">);<br />            m_currentTransparent </span><span style="color: #000000; ">+=</span><span style="color: #000000; "> NUM_CHANGE;<br />        }<br />        </span><span style="color: #0000FF; ">else</span><span style="color: #000000; "><br />            KillTimer(TIME_BEGIN);<br />        </span><span style="color: #0000FF; ">break</span><span style="color: #000000; ">;<br />    </span><span style="color: #0000FF; ">case</span><span style="color: #000000; "> TIME_END:<br />        </span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(m_currentTransparent </span><span style="color: #000000; ">>=</span><span style="color: #000000; "> </span><span style="color: #000000; ">0</span><span style="color: #000000; ">)<br />        {<br />            </span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(m_currentTransparent </span><span style="color: #000000; ">></span><span style="color: #000000; "> MAX_TRANSPARENT)<br />                m_currentTransparent </span><span style="color: #000000; ">=</span><span style="color: #000000; "> MAX_TRANSPARENT;<br />            m_funTransparent(</span><span style="color: #0000FF; ">this</span><span style="color: #000000; ">-></span><span style="color: #000000; ">GetSafeHwnd(), </span><span style="color: #000000; ">0</span><span style="color: #000000; ">, m_currentTransparent, </span><span style="color: #000000; ">2</span><span style="color: #000000; ">);<br />            m_currentTransparent </span><span style="color: #000000; ">-=</span><span style="color: #000000; "> NUM_CHANGE;<br />        }<br />        </span><span style="color: #0000FF; ">else</span><span style="color: #000000; "><br />        {<br />            KillTimer(TIME_END);<br />            CDialog::OnCancel();<br />        }<br />        </span><span style="color: #0000FF; ">break</span><span style="color: #000000; ">;<br />    }<br />}<br /><br /></span><span style="color: #0000FF; ">void</span><span style="color: #000000;"> CFadeIODlg::OnOK()<br />{<br />}<br /><br /></span><span style="color: #0000FF; ">void</span><span style="color: #000000; "> CFadeIODlg::OnCancel()<br />{<br />    </span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(m_funTransparent)<br />    {<br />        KillTimer(TIME_BEGIN);<br />        SetTimer(TIME_END, NUM_END, NULL);<br />    }<br />    </span><span style="color: #0000FF; ">else</span><span style="color: #000000; "><br />        CDialog::OnCancel();<br />}</span></div><br /><br />ok, 完成, 以后直接l承q个对话? E微修改一? 效果出来了</div><img src ="http://www.shnenglu.com/jianc/aggbug/176639.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/jianc/" target="_blank">jianc</a> 2012-05-29 18:52 <a href="http://www.shnenglu.com/jianc/archive/2012/05/29/176639.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>HOOK CreateProcess没什么作?/title><link>http://www.shnenglu.com/jianc/archive/2012/05/24/176027.html</link><dc:creator>jianc</dc:creator><author>jianc</author><pubDate>Thu, 24 May 2012 07:59:00 GMT</pubDate><guid>http://www.shnenglu.com/jianc/archive/2012/05/24/176027.html</guid><wfw:comment>http://www.shnenglu.com/jianc/comments/176027.html</wfw:comment><comments>http://www.shnenglu.com/jianc/archive/2012/05/24/176027.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/jianc/comments/commentRss/176027.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/jianc/services/trackbacks/176027.html</trackback:ping><description><![CDATA[本来以ؓ(f), 对CreateProcessA和CreateProcessWq行HOOK, 可以对q程的打开做一到防U? 比如, L某某文gq行<br />但是发现没什么作? 看了一? kernel32.dll实是导ZCreateProcessA和CreateProcessW, 但估计这两个只是转发函数, 其实调用的是NTDLL.DLL里面的ZwCreateProcess或ZwCreateProcessEx<br /><img src ="http://www.shnenglu.com/jianc/aggbug/176027.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/jianc/" target="_blank">jianc</a> 2012-05-24 15:59 <a href="http://www.shnenglu.com/jianc/archive/2012/05/24/176027.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MFC对话框工E? theApp对象的析?/title><link>http://www.shnenglu.com/jianc/archive/2012/05/23/175894.html</link><dc:creator>jianc</dc:creator><author>jianc</author><pubDate>Wed, 23 May 2012 06:23:00 GMT</pubDate><guid>http://www.shnenglu.com/jianc/archive/2012/05/23/175894.html</guid><wfw:comment>http://www.shnenglu.com/jianc/comments/175894.html</wfw:comment><comments>http://www.shnenglu.com/jianc/archive/2012/05/23/175894.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/jianc/comments/commentRss/175894.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/jianc/services/trackbacks/175894.html</trackback:ping><description><![CDATA[一开? 我不清楚某某原因, 我在l承自CWinApp的appcMd一个虚函数<div>virtual int ExitInstance();<br /><br />然后, 当我在对话框工程退出的时? 发现q个ExitInstanceҎ(gu)q没有被调用, 我就有些p涂, baidu+google, ...<br /><br />然后, 我就? 我添加一个appcȝ析构Ҏ(gu)了, 但发现这个析构函数还是诡异的没被调用...<br /><br />theApp原本是一个全局对象, 它的构造和析构原本是CRT库来处理?br /><br />后来发现, 只要在theApp对象的成员I(y)nitInstanceҎ(gu)q回TRUE(默认是返回FALSE)可以成功的调用ExitInstance和析构函C<br /><br />ok, 诡异的InitInstanceq回FALSE? ׃?x)调用theApp对象的析?</div><img src ="http://www.shnenglu.com/jianc/aggbug/175894.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/jianc/" target="_blank">jianc</a> 2012-05-23 14:23 <a href="http://www.shnenglu.com/jianc/archive/2012/05/23/175894.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>GDI Plus库用基http://www.shnenglu.com/jianc/archive/2012/05/17/175197.htmljiancjiancThu, 17 May 2012 05:19:00 GMThttp://www.shnenglu.com/jianc/archive/2012/05/17/175197.htmlhttp://www.shnenglu.com/jianc/comments/175197.htmlhttp://www.shnenglu.com/jianc/archive/2012/05/17/175197.html#Feedback0http://www.shnenglu.com/jianc/comments/commentRss/175197.htmlhttp://www.shnenglu.com/jianc/services/trackbacks/175197.html
配置好库环境? 下面写出使用GDI Plus的基本步?
1.包含头文?br />#include <gdiplus.h>
2.使用名字I间
using namespace Gdiplus;
3.q接必要的导入库文g
#pragma comment(lib, "gdiplus.lib")
4.初始?br />
ULONG_PTR m_gdiplusToken;
GdiplusStartupInput m_gdiplusStartupInput;
GdiplusStartup(&m_gdiplusToken, &m_gdiplusStartupInput, NULL);
5.使用GDI Plus?br />6.用完库后, 释放操作
GdiplusShutdown(m_gdiplusToken);


jianc 2012-05-17 13:19 发表评论
]]>
vc6~译时候卡?http://www.shnenglu.com/jianc/archive/2012/05/11/174560.htmljiancjiancFri, 11 May 2012 05:38:00 GMThttp://www.shnenglu.com/jianc/archive/2012/05/11/174560.htmlhttp://www.shnenglu.com/jianc/comments/174560.htmlhttp://www.shnenglu.com/jianc/archive/2012/05/11/174560.html#Feedback0http://www.shnenglu.com/jianc/comments/commentRss/174560.htmlhttp://www.shnenglu.com/jianc/services/trackbacks/174560.html
google一? 原来只要装一下sp6补丁好?br /> q接地址
e文版:  vs6sp6
中文? vs6sp6

jianc 2012-05-11 13:38 发表评论
]]>
MFC点击DialogH体可拖?/title><link>http://www.shnenglu.com/jianc/archive/2012/05/11/174547.html</link><dc:creator>jianc</dc:creator><author>jianc</author><pubDate>Fri, 11 May 2012 02:59:00 GMT</pubDate><guid>http://www.shnenglu.com/jianc/archive/2012/05/11/174547.html</guid><wfw:comment>http://www.shnenglu.com/jianc/comments/174547.html</wfw:comment><comments>http://www.shnenglu.com/jianc/archive/2012/05/11/174547.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.shnenglu.com/jianc/comments/commentRss/174547.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/jianc/services/trackbacks/174547.html</trackback:ping><description><![CDATA[<div>MFC创徏一个可通过鼠标点击客户区拖动窗口位|的Ҏ(gu)<br /><br />通过d消息响应函数<br />afx_msg UINT OnNcHitTest(CPoint point);<br />d?br />ON_WM_NCHITTEST()<br /><br />然后, 定义OnNcHitTest的行为即? OnNcHitTest的代码如?<br /><div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">UINT CTimerDlg::OnNcHitTest(CPoint point)<br />{<br />    CRect rect;<br />    GetClientRect(rect);<br />    ClientToScreen(rect);<br /><br />    </span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(rect.PtInRect(point))<br />        </span><span style="color: #0000FF; ">return</span><span style="color: #000000; "> HTCAPTION;<br />    </span><span style="color: #0000FF; ">return</span><span style="color: #000000; "> CDialog::OnNcHitTest(point);<br />}</span></div><br />首先, 发生WM_NCHITTEST消息的时? E序先取得客户区的窗口矩? q里用到GetClientRectҎ(gu)得到, ׃GetClientRect取得的是相对于窗口坐标系l? 但OnNcHitTest的参数point却是相对于屏q的坐标pȝ, 所以这里用CClientToScreen把取到的客户区矩形{成相对于屏幕的坐? 然后用CRectcȝPtInRectҎ(gu)判断point是否落在q个矩Ş里面, 如果? 则返回HTCAPTION(q当于q次点击是点?yn)L题栏), 所? 可以这h拖动H口? 如果, OnNcHitTest直接q回HTCAPTION的话, 那么, 但用L(fng)击非客户区的时? 有些功能?x)失? 比如点击pȝ的关闭按? 试一下就?x)发现这个按钮无效? ok, 如果点击的是非客L(fng), 者直接返回CDialog::OnNcHitTest(point), q就是按默认处理?<br /><br />以上的这个方法比较麻? 其实可以更简单一? 只要先调用父cȝOnNcHitTest(point), 取得q回? 在判断是不是HTCLIENT, 如果? 则返回HTCAPTION, 否则直接q回父类OnNcHitTest(point)的返回值就ok? 修改后如?<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">UINT CTimerDlg::OnNcHitTest(CPoint point)<br />{<br />    UINT uRet </span><span style="color: #000000; ">=</span><span style="color: #000000; "> CDialog::OnNcHitTest(point);<br />    </span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(HTCLIENT </span><span style="color: #000000; ">==</span><span style="color: #000000; "> uRet)<br />        </span><span style="color: #0000FF; ">return</span><span style="color: #000000; "> HTCAPTION;<br />    </span><span style="color: #0000FF; ">return</span><span style="color: #000000; "> uRet;<br />}</span></div><br />再简化一? 成q样?<br /><div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">UINT CTimerDlg::OnNcHitTest(CPoint point)<br />{<br />    UINT uRet </span><span style="color: #000000; ">=</span><span style="color: #000000; "> CDialog::OnNcHitTest(point);<br />    </span><span style="color: #0000FF; ">return</span><span style="color: #000000; "> (HTCLIENT </span><span style="color: #000000; ">==</span><span style="color: #000000; "> uRet) </span><span style="color: #000000; ">?</span><span style="color: #000000; "> HTCAPTION : uRet;<br />}</span></div><br /><br /><br /></div><img src ="http://www.shnenglu.com/jianc/aggbug/174547.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/jianc/" target="_blank">jianc</a> 2012-05-11 10:59 <a href="http://www.shnenglu.com/jianc/archive/2012/05/11/174547.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>可等待计时器内核对象http://www.shnenglu.com/jianc/archive/2012/05/10/174491.htmljiancjiancThu, 10 May 2012 12:38:00 GMThttp://www.shnenglu.com/jianc/archive/2012/05/10/174491.htmlhttp://www.shnenglu.com/jianc/comments/174491.htmlhttp://www.shnenglu.com/jianc/archive/2012/05/10/174491.html#Feedback0http://www.shnenglu.com/jianc/comments/commentRss/174491.htmlhttp://www.shnenglu.com/jianc/services/trackbacks/174491.html之前学习(fn)win32 platform sdk~程的时? 有学C个计时器的东? 那个挺简单的, 是调用SetTimer创徏一个基于某个窗口回调的计时? 既间隔时间ɽH口收到WM_TIMER消息, 或间隔时? 调用我们自己定义的一个回调函?
创徏可等待计时器内核对象, 可以实现cM功能, 现在, 下边l出如何使用可等待计时器内核对象
1.CreateWatchDogTimer
HANDLE CreateWatchDogTimer(
  LPCWSTR pszWatchDogName,
  DWORD dwPeriod,
  DWORD dwWait,
  DWORD dwDfltAction,
  DWORD dwParam,
  DWORD dwFlags
);


2.SetWaitableTimer
BOOL WINAPI SetWaitableTimer(
  __in      HANDLE hTimer,
  __in      
const LARGE_INTEGER* pDueTime,
  __in      LONG lPeriod,
  __in_opt  PTIMERAPCROUTINE pfnCompletionRoutine,
  __in_opt  LPVOID lpArgToCompletionRoutine,
  __in      BOOL fResume
);


CreateWatchDogTimer函数是创徏一个可{待事g内核对象
SetWaitableTimer函数是讄内核对象的触发时间和旉间隔

废话不多说了, q里直接上代?br />
void CDialogDemoDlg::OnBtnCreateTimer()
{
    SYSTEMTIME st;
    st.wYear 
= 2012;
    st.wDay 
= 10;
    st.wDayOfWeek 
= 0;
    st.wHour 
= 20;
    st.wMilliseconds 
= 0;
    st.wMinute 
= 16;
    st.wMonth 
= 5;
    st.wSecond 
= 0;
    
    FILETIME localft;
    FILETIME utc;
    SystemTimeToFileTime(
&st, &localft);
    LocalFileTimeToFileTime(
&localft, &utc);

    LARGE_INTEGER liUTC;
    liUTC.LowPart 
= utc.dwLowDateTime;
    liUTC.HighPart 
= utc.dwHighDateTime;

    m_Timer 
= CreateWaitableTimer(NULL, FALSE, NULL);

    SetWaitableTimer(m_Timer, 
&liUTC, 10 * 1000, NULL, NULL, FALSE);
}

void CDialogDemoDlg::ThreadProc2(CDialogDemoDlg* pDlg)
{
    
while(1)
    {
        DWORD ret 
= WaitForSingleObject(pDlg->m_Timer, INFINITE);
        
if(WAIT_OBJECT_0 == ret)
        {
            AfxMessageBox(
"可等待事件内核对象触?");
        }
    }
}


ThreadProc2是一个线E? 当时间一? WaitForSingleObject׃(x)q回, 因ؓ(f)q里创徏的是一个自动复位内核对? 说以WaitForSingleObjectq回是会(x)自动把内核对象复? q里为演C? 写了个死循环, 所? 下一ơ调用WaitForSingleObject? 如果旉未到, U程ȝ?x)被挂v.
具体用法l节, MSDN
参? windows核心~程

jianc 2012-05-10 20:38 发表评论
]]>
MFC非模态对话框销?/title><link>http://www.shnenglu.com/jianc/archive/2012/05/07/173914.html</link><dc:creator>jianc</dc:creator><author>jianc</author><pubDate>Mon, 07 May 2012 09:00:00 GMT</pubDate><guid>http://www.shnenglu.com/jianc/archive/2012/05/07/173914.html</guid><wfw:comment>http://www.shnenglu.com/jianc/comments/173914.html</wfw:comment><comments>http://www.shnenglu.com/jianc/archive/2012/05/07/173914.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/jianc/comments/commentRss/173914.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/jianc/services/trackbacks/173914.html</trackback:ping><description><![CDATA[<div>非模态对话框需要重载OnCanelҎ(gu), q调用DestroyWindow, 且不能调用基cȝOnCanel<br />重蝲PostNcDestroy, 需要delete掉this指针</div><br /><div>// Overrides<br />    // ClassWizard generated virtual function overrides<br />    //{{AFX_VIRTUAL(CDlgTest)<br />    protected:<br />    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support<br />    <span style="color: red;">virtual void PostNcDestroy();</span><br />    //}}AFX_VIRTUAL<br /><br />// Implementation<br />protected:<br /><br />    // Generated message map functions<br />    //{{AFX_MSG(CDlgTest)<br />    <span style="color: red;">virtual void OnOK();</span><br /><span style="color: red;">    virtual void OnCancel();</span><br />    //}}AFX_MSG<br /><br /><br /><div>void CDlgTest::OnOK() <br />{<br />    // TODO: Add extra validation here<br />}<br /><br />void CDlgTest::OnCancel() <br />{<br />    DestroyWindow();<br />}<br /><br />void CDlgTest::PostNcDestroy() <br />{<br />    // TODO: Add your specialized code here and/or call the base class<br />    <br />    CDialog::PostNcDestroy();<br />    delete this;<br />}</div><br /><br /></div><img src ="http://www.shnenglu.com/jianc/aggbug/173914.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/jianc/" target="_blank">jianc</a> 2012-05-07 17:00 <a href="http://www.shnenglu.com/jianc/archive/2012/05/07/173914.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用ATL写C(j)OME序http://www.shnenglu.com/jianc/archive/2012/04/29/173106.htmljiancjiancSat, 28 Apr 2012 18:20:00 GMThttp://www.shnenglu.com/jianc/archive/2012/04/29/173106.htmlhttp://www.shnenglu.com/jianc/comments/173106.htmlhttp://www.shnenglu.com/jianc/archive/2012/04/29/173106.html#Feedback0http://www.shnenglu.com/jianc/comments/commentRss/173106.htmlhttp://www.shnenglu.com/jianc/services/trackbacks/173106.html今天没事, 看了下ATL(Active Template Library), 跟着|上的入门学?fn)资料自q猫画? l果一下子ok? ~译? 在创Z个test工程去调用这个组件的接口函数, 一切顺?
ps:以后用ATL写C(j)OMlg, 爽歪?br />ps:有空把COM技术内q看?br />

jianc 2012-04-29 02:20 发表评论
]]>
修改文g的时间DEMOhttp://www.shnenglu.com/jianc/archive/2012/04/27/172954.htmljiancjiancFri, 27 Apr 2012 11:45:00 GMThttp://www.shnenglu.com/jianc/archive/2012/04/27/172954.htmlhttp://www.shnenglu.com/jianc/comments/172954.htmlhttp://www.shnenglu.com/jianc/archive/2012/04/27/172954.html#Feedback0http://www.shnenglu.com/jianc/comments/commentRss/172954.htmlhttp://www.shnenglu.com/jianc/services/trackbacks/172954.html
#include <windows.h>
#include 
<iostream>
using namespace std;
int main(int argc, char* argv[])
{
    FILETIME fTm;
    SYSTEMTIME sysTm;
    HANDLE hFile;
    hFile 
= CreateFile("d:/test.txt", GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_ARCHIVE, NULL);
    
if(INVALID_HANDLE_VALUE == hFile)
    {
        cout 
<< "no" <<endl;
    }
    GetLocalTime(
&sysTm);
    sysTm.wYear 
= 2013;
    SystemTimeToFileTime(
&sysTm, &fTm);
    BOOL bRet 
= SetFileTime(hFile, &fTm, &fTm, &fTm);
    
int ret = GetLastError();
    
if(bRet)
    {
        cout 
<< "ok" <<endl;
    }
   
return 0;
}

主要调用SystemTimeToFileTime


jianc 2012-04-27 19:45 发表评论
]]>
Dll中开启共享数据段http://www.shnenglu.com/jianc/archive/2012/04/24/172630.htmljiancjiancTue, 24 Apr 2012 09:35:00 GMThttp://www.shnenglu.com/jianc/archive/2012/04/24/172630.htmlhttp://www.shnenglu.com/jianc/comments/172630.htmlhttp://www.shnenglu.com/jianc/archive/2012/04/24/172630.html#Feedback0http://www.shnenglu.com/jianc/comments/commentRss/172630.htmlhttp://www.shnenglu.com/jianc/services/trackbacks/172630.html
#pragma data_seg(".DataSegName")
int ifoo;
char cfoo[1024= {"test"};
//...
#pragma data_seg()
然后, dll工程里创Z个def文g, def文g写上:
SECTIONS:
    .
DataSegName READ WRITE SHARE
.DataSegName是节表的名? q里的PE文g中创Z个新节表, 然后def文g指明q个节表为共享节? ? q程在加载这个dll文g的时? 对这个节表进行直接映? 而不是映一份拷贝副?br /> q样, ~译好工E后, 但这个dll文g被加载进q程时? 不通进E就可以通过q个׃n数据节表q行通讯?br />
ps:之前用指?br />
#pragma comment(linker, "/section:.DataSegName, RWS")
而不用defx, 但这样却是不能对.DataSegName节进行数据共? 不是很明?br />
q不是对编译的时? llink.exeE序传递一个参数而已?
link /dll /sections:.DataSegName ......

jianc 2012-04-24 17:35 发表评论
]]>
随笔1http://www.shnenglu.com/jianc/archive/2012/04/03/169905.htmljiancjiancMon, 02 Apr 2012 17:35:00 GMThttp://www.shnenglu.com/jianc/archive/2012/04/03/169905.htmlhttp://www.shnenglu.com/jianc/comments/169905.htmlhttp://www.shnenglu.com/jianc/archive/2012/04/03/169905.html#Feedback0http://www.shnenglu.com/jianc/comments/commentRss/169905.htmlhttp://www.shnenglu.com/jianc/services/trackbacks/169905.html     但是? 梦想是美好的, 现实是残L(fng). 在网? 跟一些同hE序的h一起交? 发现我太q稚? 学识太浅薄了; 工作? 很简单的目也给我莫大的压力; ...呵呵, 是不是我比较W? 也许? 不过我比较勤? q是我的优点. 所? 我走了很多很多的弯\, --一直在学习(fn), 但是q步~慢(也许是我太Qw了? 有进步就应该H喜? 不过上了C会(x), q是鸭梨山大?.
    很多时? 看书都看不懂. 现在我懂? 不是我太W了, 是因为有些基q没打好. 因? 学习(fn)Ҏ(gu)不对? D了我费了好多时? 我太2? 学习(fn)要@序渐q嘛, 好比一个没过?sh)脑的h, 叫他一开始就dmfc, 那是不可能的. 而我? q道理是懂得? 有时候做事却没去惌什么道? 以ؓ(f)惛_, 有书可以? p? l果看了? C一脸灰, q把自己的信心给灭?太难? 怎么看都看不? 再网上跟一些网友交? ? 他们都能看懂, 我自卑啊~~
    现在我明白了, 那是我还有些基础没学q? 但他们已l学扎实? 所? l过一些天的基学习(fn), 我再来学那些以前看似很难的东? 现在学v来就L多了.
    (?..哥文W不? 不会(x)写作, 以上说的语无伦次, U当自己l笔作文? 希望以后能够写的好一? 句子看得通顺一?.....睡觉? 88)

jianc 2012-04-03 01:35 发表评论
]]>
搜烦MessageBoxH口的显C消?/title><link>http://www.shnenglu.com/jianc/archive/2012/04/01/169786.html</link><dc:creator>jianc</dc:creator><author>jianc</author><pubDate>Sun, 01 Apr 2012 06:47:00 GMT</pubDate><guid>http://www.shnenglu.com/jianc/archive/2012/04/01/169786.html</guid><wfw:comment>http://www.shnenglu.com/jianc/comments/169786.html</wfw:comment><comments>http://www.shnenglu.com/jianc/archive/2012/04/01/169786.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/jianc/comments/commentRss/169786.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/jianc/services/trackbacks/169786.html</trackback:ping><description><![CDATA[<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam)<br />{<br />    TCHAR szBuf[</span><span style="color: #000000; ">4096</span><span style="color: #000000; ">];<br />    GetClassName(hwnd, szBuf, </span><span style="color: #0000FF; ">sizeof</span><span style="color: #000000; ">(szBuf));<br />    </span><span style="color: #0000FF; ">string</span><span style="color: #000000; "> str </span><span style="color: #000000; ">=</span><span style="color: #000000; "> szBuf;<br />    </span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(</span><span style="color: #000000; ">!</span><span style="color: #000000; ">str.compare(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">#32770</span><span style="color: #000000; ">"</span><span style="color: #000000; ">))<br />    {<br />        HWND hSubWnd </span><span style="color: #000000; ">=</span><span style="color: #000000; "> GetDlgItem(hwnd, </span><span style="color: #000000; ">0xffff</span><span style="color: #000000; ">);<br />        </span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(hSubWnd)<br />        {<br />            </span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> len </span><span style="color: #000000; ">=</span><span style="color: #000000; "> GetWindowText(hSubWnd, szBuf, </span><span style="color: #0000FF; ">sizeof</span><span style="color: #000000; ">(szBuf));<br />            cout </span><span style="color: #000000; "><<</span><span style="color: #000000; "> </span><span style="color: #000000; ">"</span><span style="color: #000000; ">yes:</span><span style="color: #000000; ">"</span><span style="color: #000000; "> </span><span style="color: #000000; "><<</span><span style="color: #000000; ">szBuf </span><span style="color: #000000; "><<</span><span style="color: #000000; ">endl;<br />        }<br />    }<br />    </span><span style="color: #0000FF; ">return</span><span style="color: #000000; "> TRUE;<br />}<br /><br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> main()<br />{<br />    EnumWindows(EnumWindowsProc, NULL);<br />    </span><span style="color: #0000FF; ">return</span><span style="color: #000000; "> </span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />}</span></div><img src ="http://www.shnenglu.com/jianc/aggbug/169786.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/jianc/" target="_blank">jianc</a> 2012-04-01 14:47 <a href="http://www.shnenglu.com/jianc/archive/2012/04/01/169786.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C++Primer MW记19 多承和虚拟l承http://www.shnenglu.com/jianc/archive/2012/03/30/169532.htmljiancjiancFri, 30 Mar 2012 07:49:00 GMThttp://www.shnenglu.com/jianc/archive/2012/03/30/169532.htmlhttp://www.shnenglu.com/jianc/comments/169532.htmlhttp://www.shnenglu.com/jianc/archive/2012/03/30/169532.html#Feedback5http://www.shnenglu.com/jianc/comments/commentRss/169532.htmlhttp://www.shnenglu.com/jianc/services/trackbacks/169532.html
1.虚拟l承 --l承了多个基cd? 但只需要一份单独的׃n实例
2.对于一个类的基cȝ数目, c++没有限制(可以多?
   两个基类是最常见? 一个基cd常用于表CZ个共有抽象接? W二个基cL供是有的实现
   从第三个或更多个直接基类l承而来的派生类遵@mixin-based设计风格
3.基类构造函数被调用的顺序以z表中声明的顺序ؓ(f)?/span>
4.在多l承? zcd以从两个或者更多个基类中承同名的成员 --直接讉K是二义的, 导致编译时刻错? 所以要昄指明调用哪个基类的哪个成?Base::member
5.publicz被称为类型?type inheritance) --zcL基类的子cd
   提供了较一般的基类的一U特?/span>
6.privatez被称为实现?implementation hinheritance) --zcM直接支持基类的公有接? 提供了自q公有接口, 重用基类的实?/span>
   private基类放映了一U?qZ子类型关p?的承Ş? 基类的整个公有接口在zcM变成private
7.对于is-a子类型关pL? publicl承是一个很有利的机?/span>
8.has-a关系一般由l合(composition)而不是承来支持 --使一个类UCؓ(f)另一个类的成?/span>
   a:如果我们希望改写一个类的虚拟函? 则必M用私有承而不是用组?/span>
   b:如果我们希望一个类能够引用"一个包含多U可能类型的层次l构"中的一个类, 那么必通过引用使用l合
   c:如果只是希望单的重用实现, 则按值组合比l承更好
   d:如果希望对象的迟~型分配, 按引?使用一个指?l合通常是一个不想的设计选择
9.免除(exempting)个别成员的私有承媄?/span>
   以私有方式? 基类的所有protected和public成员全被l承为子cȝU有成员
   c设计者可以针对基cȝ个别成员, 是其免除非公有派生的影响:
      class CSub: private CBase {
      public:
          using CBase::Member;
      };
   免除个别成员的另一个原因是允许后箋的派生类讉KU有基类的protected成员
   zcd能将l承得到的成员恢复到原来的访问? 该访问别不能比基类中原来指定的U别更严格或更不严格
10.protectedl承 --基类的所有公有成员都成ؓ(f)zcȝprotected成员
11.对象l合有两UŞ?/span>
   a:按值组?Composition by value)
   b:按引用组?Composttion by reference)
12.虚拟l承(virtual inheritance) --在虚拟承下, 只有一个共享的基类子对象被l承, 而无基类在派生层ơ中出现多少?/span>
   ׃n的基cd对象被称拟基c?vitual base class)
   在虚拟承下, 基类子对象的复制?qing)由此引L(fng)二义性都被取消了
13.虚拟l承的语?
    CSub: public virtual CBase1, public virtual CBase2 {...};
   virtual ?public的顺序不重要




jianc 2012-03-30 15:49 发表评论
]]>
C++Primer MW记18 cȝ承和子类?/title><link>http://www.shnenglu.com/jianc/archive/2012/03/30/169501.html</link><dc:creator>jianc</dc:creator><author>jianc</author><pubDate>Fri, 30 Mar 2012 03:59:00 GMT</pubDate><guid>http://www.shnenglu.com/jianc/archive/2012/03/30/169501.html</guid><wfw:comment>http://www.shnenglu.com/jianc/comments/169501.html</wfw:comment><comments>http://www.shnenglu.com/jianc/archive/2012/03/30/169501.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/jianc/comments/commentRss/169501.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/jianc/services/trackbacks/169501.html</trackback:ping><description><![CDATA[<span> </span><div><span style="background-color: #ffffff;"></span><span>1.l承(inheritance)</span><br /><span>2.c++通过cL?class derivation)的机制来支持l承</span><br /><span>3.基类(base class)</span><br /><span>4.zc?derived class)</span><br /><span>5.基类和派生类实例的集合称为类l承层次l构(hierarchy)</span><br /><span>6.如果基类和派生类׃n相同的共有接? 则派生类被称做基cȝ子类?subtype)</span><br /><span>7.基类指针或引用可以直接引用其Mz的类, 多?polymorphism)</span><br /><span>8.在运行时刻需要解析出被调用的函数, q个解析q程被称为动态绑?dynamic bindng) --~省情况? 函数实在~译时刻被静态解析的</span><br /><span>9.c++? 通过一U被UCؓ(f)虚拟函数(virtual function)的机制来支持动态绑? 通过集成和动态绑? 子类型多态性ؓ(f)面向对象的程序设计提供了基础</span><br /><span>10.面向对象的程序设计提供了一U方? 把类型解析的负担从程序员的n上{Ud~译器上</span><br /><span>11.cȝ承层ơ结构的主要好处? 我盟可以针对抽象基类的共有接口进E编E? 而不是针对组成承层ơ的个别cd</span><br /><span>    用户代码可以不受语言变化的媄?--多态和动态绑?/span><br /><span>12.在c++? 多态性只存在于子cȝ承层ơ中 --void*型的指针可以被描qCؓ(f)多? 但是语言本nq没有显C的支持他们, 必须q序员自己来管?/span><br /><span>    c++语言通过几种方式支持多态?/span><br /><span>        通过一个隐式{? ?zcL针或引用"转到"其共有基cȝ型的指针或引?</span><br /><span>        通过虚拟函数的机?/span><br /><span>        通过dynamic_cast和typeid操作W?/span><br /><span>            if(SubClass* pSub = dynamic_cast<SubClass*>(pObj)) ...</span><br /><span>13.抽象基类(abstract base class)</span><br /><span>14.实体基类(concrete base class)</span><br /><span>15.U虚拟函?pure virtual function)</span><br /><span>16.覆盖(override)</span><br /><span>17.c++语言为我们提供了一U语法结? 通过它可以指? 一个虚拟函数只是提供了一个可以被子类改写的接?/span><br /><span>18.传递给~省函数的g是在q行时刻军_, 而是在编译时L据被调用函数的对象的cd军_</span><br /><span>19.虚拟析构函数 --主要是ؓ(f)了能够用delete销毁基cȝ时候也能够保证调用zcȝ析构函数, 要不然它只是调用基类的析构函数而已<br /><br /><br /></span></div><img src ="http://www.shnenglu.com/jianc/aggbug/169501.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/jianc/" target="_blank">jianc</a> 2012-03-30 11:59 <a href="http://www.shnenglu.com/jianc/archive/2012/03/30/169501.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C++Primer MW记17 cL?/title><link>http://www.shnenglu.com/jianc/archive/2012/03/29/169443.html</link><dc:creator>jianc</dc:creator><author>jianc</author><pubDate>Thu, 29 Mar 2012 09:20:00 GMT</pubDate><guid>http://www.shnenglu.com/jianc/archive/2012/03/29/169443.html</guid><wfw:comment>http://www.shnenglu.com/jianc/comments/169443.html</wfw:comment><comments>http://www.shnenglu.com/jianc/archive/2012/03/29/169443.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/jianc/comments/commentRss/169443.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/jianc/services/trackbacks/169443.html</trackback:ping><description><![CDATA[<div><span>1.队列(queue) --专门用于对象集合的数据结? 对象被加入到队列的尾? 而从队列的顶部被删除(first in first out FIFO)</span><br /><span>2.位单个类型提供手工生成的拯是一个无休止的过E? 也是一个无限复杂的l护q程</span><br /><span>3.模板参数?template parameter list) --template<xxx> xxx是模板参数?/span><br /><span>4.模板的类型参?type parameter)由关键字class或关键字typename?qing)其后的表示W构?/span><br /><span>5.每个模板参数前面都必L关键字class或typename</span><br /><span>6.模板非类型参?nontype parameter)׃个普通参数声明构? 一个非cd参数只是该参C表了一个潜在的? 而这个值又代表cL板定义中的一个参?</span><br /><span>    template<class Type, int size = 1024></span><br /><span>    class Buffer;</span><br /><span>    //如果模板实例的名字没有指定Buffer的大? 则实例化Buffer的大是1024</span><br /><span>7.cd转换的过E被UCؓ(f)模板实例?template instantiation)</span><br /><span>    从通用的类模板定义中生成类的过E?/span><br /><span>8.模板参数的缺省?/span><br /><span>    template<class Type = string, int size></span><br /><span>    class Buffer;</span><br /><span>9.cL板成原函数可以再cL板的定义中定? 该成员函数是inline成员函数; 也可以定义在cL板定义之?/span><br /><span>10.c++的模板编译模?template compilation model)</span></div><img src ="http://www.shnenglu.com/jianc/aggbug/169443.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/jianc/" target="_blank">jianc</a> 2012-03-29 17:20 <a href="http://www.shnenglu.com/jianc/archive/2012/03/29/169443.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C++Primer MW记16 重蝲操作W和用户定义转换http://www.shnenglu.com/jianc/archive/2012/03/21/168495.htmljiancjiancWed, 21 Mar 2012 06:15:00 GMThttp://www.shnenglu.com/jianc/archive/2012/03/21/168495.htmlhttp://www.shnenglu.com/jianc/comments/168495.htmlhttp://www.shnenglu.com/jianc/archive/2012/03/21/168495.html#Feedback0http://www.shnenglu.com/jianc/comments/commentRss/168495.htmlhttp://www.shnenglu.com/jianc/services/trackbacks/168495.html1.做操作数是该cȝ对象? 才会(x)考虑使用cL员重载操作符
2.c++要求, 赋?=), 下标([]), 调用(()), 和成员访问箭?->)操作W必被定义E类成员操作W? M把这些操作符定义为名字空间成员的定义都会(x)?/span>

标记为编译时刻错?/span>
3.c++预定义可重蝲的操作符:
   + - * / % ^ & | ~
   ! , = < > <= >= ++ --
   << >> == != && || += -= /=
   %= ^= &= |= *= <<= >>= [] ()
   -> ->* new new[] delete delete[]
4.对于内置cd的操作符, 它的预定义意义不能被改变
5.预定义的操作W优先不能被改?/span>
6.除了operator()? 对其他重载操作符提供~省实参都是非法?/span>



jianc 2012-03-21 14:15 发表评论
]]>
C++Primer MW记15 cȝ初始化赋值和析构http://www.shnenglu.com/jianc/archive/2012/03/21/168484.htmljiancjiancWed, 21 Mar 2012 05:04:00 GMThttp://www.shnenglu.com/jianc/archive/2012/03/21/168484.htmlhttp://www.shnenglu.com/jianc/comments/168484.htmlhttp://www.shnenglu.com/jianc/archive/2012/03/21/168484.html#Feedback0http://www.shnenglu.com/jianc/comments/commentRss/168484.htmlhttp://www.shnenglu.com/jianc/services/trackbacks/168484.html
1.~省情况? 用一个类的对象初始化另一个对? 或者向该类另一个对象赋? 都由~省的按成员语义(default memberwise semantics)支持
   在某些情况下, 对类的安全性和处理正确性是不够? 需要类设计者提供特D的拯构造函?copy constructor)和拷贝赋值操作符(copy assignment

operator)的定?/span>
2.newcd?--只有new表达式成功的甌到空间内? 构造函数才?x)被调?/span>
3.构造函数定义ؓ(f)inline? 创徏对象是会(x)在调用点展开构造函?/span>
4.成员初始化列?member initialization list)
5.构造函C能用const或volatile关键字来声明
   一个constcd象在"从其构造函数完成到析构函数开?q段旉内才被认为是const, volatilecd象也一?/span>
6.explicit修饰W通知~译器不要提供隐式{?/span>
   void print(const CTest &test);
   //...
   print("oops");  //q种调用?x)?oops"转换成一个CTest对象
   ~省情况? 单参数构造函?或者有多个参数, 除了W一个参数外, 其他都有~省实参)被用作{换符
   无意的隐式类转换, 是很难跟t的错误!, 关键字explicit被引入到标准c++? 以帮助我们抑制这U不受欢q的~译辅助行ؓ(f)
   explicit只能被应用在构造函C
7.~省构造函数是不需要用h定实参就能够被调用的构造函? --q不意味着它不能接受实? 只意味着构造函数的每个参数都有一个缺省g之关?/span>
8.限制对象创徏 --把相x造函数放到非公有讉K区内, 从而限制或昄止某些形式的对创徏动作
   在实际的c++E序? 非公有的构造函C要用处是:
    防止用一个类对象惌cd一个对象做拯
    指出只有当一个类在承层ơ中被用作基c? 而不能直接被应用E序操纵? 构造函数才能被调用
9.拯构造函?--用一个类对象初始化该cȝ另一个对象被UCؓ(f)~省按成员初始化(default memberwise initialization)
   一个类对象惌cȝ另一个对象作拯是通过依次拯每个非静态数据成员来实现
   c设计者可以通过提供Ҏ(gu)的拷贝构造函?copy constructor)来改变缺省的行ؓ(f)
   拯构造函C一定是const, 但它却必L引用
10.无论何时, 当在一个函数内删除一个独立的堆对象时, 最好用auto_ptrcd象而不是一个实际的指针
   如果delete表达式失? 如一个异常被抛出, ?x)到时内存泄?异常抛出, 跌了delete操作?), 不会(x)调用析构函数
   所以徏议用auto_ptr指针
11.对于在堆中分配的cd象数l的元素, 我们没有办法提供一l显C的值来做初始化, 如果l化支持通过new表达式分配数l? 则类必须提供一个缺省的?/span>

造函? 或不提供构造函?/span>
12.用一个类对象初始化另一个类对象, UCؓ(f)按成员初始化(default memberwise initialization)
    发生?用一个类对象昄的初始化另一个对?/span>
           把一个类对象作ؓ(f)实参传递给一个函?/span>
           把一个类对象作ؓ(f)一个函数的q回g递回?/span>
           非空序容器cd的定?/span>
           把一个类对象插入C个容器类型中
13.成员cd象初始化
14.~省按成员赋?default memberwise assignment) --用一个类对象向该cȝ另一个对象的赋值操?/span>
    用隐式的拯赋值操作符
    一般来所, 如果~省的按成员初始化对于一个类不合? 则缺省的按成员赋g不合?/span>
    通过提供一个现实的拯赋值操作符的实? 可以改变~省的按成员赋?/span>
    注意要防止一个类对象向自p?--对于"先释放与该对象当前相关的资源, 以便分配与被拯对象相关资源"q样的拷贝赋值操作符, 拯自n其?/span>

合?/span>
    当一个类对象被赋值给该类的另一个对象是:
        a查该c? 判断是否提供了一个现实的拯赋值操作符
        b如果? 查访问权? 判断是否可以被调?/span>
        c如果不能被调? ~译错误, 否则执行q个调用
        d如果该类没有提供昄的拷贝赋值操作符, 则执行按~省成员赋?/span>
        e在缺省按成员赋g, 每个内置cd或复合类型的数据成员被赋值给相应的成?/span>
        f对于每个cL员对? 递归执行a到f? 知道所有内|或复合cd的数据成员都被赋?/span>
    如果希望完全止按成员拷贝的行文, 操作符声明为privateq且不提供实际定义即?/span>
    一般来? 应该拷贝构造函数和拯赋值操作视Z个个体单?/span>
15.C++语言不能有效地返回一个类对象, q被视ؓ(f)c++语言的一个重大缺?/span>
16.c++cd象的初始化L比赋值更有效

 

 



jianc 2012-03-21 13:04 发表评论
]]>
什么是N归?http://www.shnenglu.com/jianc/archive/2012/03/21/168475.htmljiancjiancWed, 21 Mar 2012 03:31:00 GMThttp://www.shnenglu.com/jianc/archive/2012/03/21/168475.htmlhttp://www.shnenglu.com/jianc/comments/168475.htmlhttp://www.shnenglu.com/jianc/archive/2012/03/21/168475.html#Feedback0http://www.shnenglu.com/jianc/comments/commentRss/168475.htmlhttp://www.shnenglu.com/jianc/services/trackbacks/168475.htmlhttp://www.cnblogs.com/JeffreyZhao/archive/2009/03/26/tail-recursion-and-continuation.html
http://fleurer-lee.com/lyah/recursion.htm

jianc 2012-03-21 11:31 发表评论
]]>
MFC多线E?/title><link>http://www.shnenglu.com/jianc/archive/2012/03/20/168426.html</link><dc:creator>jianc</dc:creator><author>jianc</author><pubDate>Tue, 20 Mar 2012 12:02:00 GMT</pubDate><guid>http://www.shnenglu.com/jianc/archive/2012/03/20/168426.html</guid><wfw:comment>http://www.shnenglu.com/jianc/comments/168426.html</wfw:comment><comments>http://www.shnenglu.com/jianc/archive/2012/03/20/168426.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/jianc/comments/commentRss/168426.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/jianc/services/trackbacks/168426.html</trackback:ping><description><![CDATA[<p><span>mfc下多U程~程</span></p> <p><span>1.mfc支持两种U程</span><br /> <span>   用户界面U程</span><br /> <span>   工作U程</span><br /> <span>2.mfc中所有线E都是由CWinThread对象表示</span><br /> <span>    CWinThread是用h口线E的基类, CWinApp是从CWinThreadz出来?/span><br /> <span style="background-color: transparent;">    在写用户接口U程? 也要从CWinThreadcL生出自己的线E类</span><br /> <span>    可以调用AfxBeginThread函数, ?x)创建CWinThread对象</span><br /> <span>3.~写是想工作U程的控制函? 控制函数的原?</span><br /> <span>    UINT ControlFunctionName(LPVOID pParam); //U程回调</span><br /> <span>4.U程调用AfxBeginThread函数可以创建新的线E?/span><br /> <span>5.创徏q启动工作线E?</span><br /> <span>    CWinThread* AfxBeginThread(</span><br /> <span>        AFX_THREADPROC pfnThreadProc,</span><br /> <span>        LPVOID pParam,</span><br /> <span>        int nPriority = THREAD_PRIORITY_NORMAL,</span><br /> <span>        UINT nStackSize = 0,</span><br /> <span>        WORD dwCreateFlags = 0,</span><br /> <span>        LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL);</span><br /> <span>6.AfxEndThreadl止U程</span><br /> <span>7.创徏用户界面U程</span><br /> <span>    从CWinThreadcL生出自己的线E类</span><br /> <span>    攚w这个类</span><br /> <span>    启动用户界面</span><br /> <span>8.基类的一些成员函?</span><br /> <span>    ExitInstance, 当线E退出是, ?x)调用执行清理工?/span><br /> <span>    InitInstance, 执行U程cd例初始化, 子类必须重写</span><br /> <span>    OnIdle, 执行U程特定I闲旉处理</span><br /> <span>    PreTranslateMessage, qo(h)消息</span><br /> <span>    Run, 执行U程函数</span><br /> <span>9.AfxBeginThread函数的另一个重载原?(界面U程)</span><br /> <span>    CWinThread* AfxBeginThread(</span><br /> <span>        CRuntimeClass* pThreadClass,  //用RUNTIME_CLASS宏将U程cL针{换ؓ(f)指向CRuntimeClass对象指针</span><br /> <span>        int nPriority = THREAD_PRIORITY_NORMAL,</span><br /> <span>        UINT nStackSize = 0;</span><br /> <span>        DWORD dwCreateFlags = 0,</span><br /> <span>        LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL</span><br /> <span>    );</span><br /> <span>10.l止U程</span><br /> <span>    正常l止U程 VOID PostQuitMessage(int nExitCode);</span><br /> <span>    提前l止U程 在线E内调用AfxEndThread函数 VOID AfxEndThread(UINT nExitCode);</span><br /> <span>11.U程同步技?/span><br /> <span>    信号?--限制使用׃n资源的线E数?/span><br /> <span>        CSemaphore g_Sem(5, 5); 旉内最多只?个线E能׃n资源, q初始开始时没有U程获得信号资源</span><br /> <span>            一旦线E访问共享资? 信号量计数器减1, 若变?, 则下来对资源的访问就?x)被拒? 知道持有的资源线E释放了资源的持有权</span><br /> <span>    互斥对象 --内核对象</span><br /> <span>    临界?--用户模式对象 弄不好就Ҏ(gu)出现死锁, 不过用v来很? 只有4个API</span><br /> <span>        InitializeCriticalSection, EterCreiticalSection, LeveCriticalSection, DeleteCriticalSection</span><br /> <span>    事g对象 --内核对象 分收工重|对象和自动重置对象</span></p> <p><font style="background-color: #cce8cf" color="#000000" face="Verdana"></font> </p> <p><font style="background-color: #cce8cf" color="#000000" face="Verdana"><br /> </font> </p><img src ="http://www.shnenglu.com/jianc/aggbug/168426.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/jianc/" target="_blank">jianc</a> 2012-03-20 20:02 <a href="http://www.shnenglu.com/jianc/archive/2012/03/20/168426.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>lua基础知识http://www.shnenglu.com/jianc/archive/2012/03/16/168084.htmljiancjiancFri, 16 Mar 2012 08:16:00 GMThttp://www.shnenglu.com/jianc/archive/2012/03/16/168084.htmlhttp://www.shnenglu.com/jianc/comments/168084.htmlhttp://www.shnenglu.com/jianc/archive/2012/03/16/168084.html#Feedback1http://www.shnenglu.com/jianc/comments/commentRss/168084.htmlhttp://www.shnenglu.com/jianc/services/trackbacks/168084.htmllua脚本基础
1.界面的编写很大一部分可以通过脚本来实? 可以修改加脚本而不必重新编译程? 可以节省界面设计的时?/span>
2.lua脚本设计目的是ؓ(f)了嵌入应用程序中, 为应用程序提供灵zȝ扩展功能
3.lua脚本可以被c/c++调用, 也可以调用c/c++的函? 也可以代替xml, ini{文? Ҏ(gu)理解和维?/span>
4.lua由标准c~写而成, 解释器不q?00k, 在目前所有脚本引擎中, lua的速度最? 是作为嵌入式脚本的最佳选择
5.lua_open() q回一个指向lua解释器的一个指?/span>
6.luaL_openlibs() 装蝲lua? 提供了一些简单的函数, 如print
7.luaL_dofile() 执行脚本
8.lua_close() 关闭lua
9.相关头文?
    #include "lua.h"
    #include "lualib.h"
    #include "lauxlib.h"
    #pragma comment(lib, "lua5.1.lib") //5.1版本的lua?/span>
    lua_State* L; //lua解释器指?/span>
    L = lua_open(); //初始化lua
    luaL_openlibs(L); //载入lua基本?/span>
    luaL_dofile(L, "test.lua"); //执行脚本
    lua_close(L); //清除lua
10.解释器加载lua脚本E序? dofile("test.lua")
   然后可以执行test.lua里面的函C
11.lua_getglobal(L, "add"); //lua库的add全局函数
    luapushnumber(L, x); //x压栈
    luapushnumber(L, y); //y压栈
    lua_call(L, 2, 1); //调用前面的add函数, 2个参? 1个返回?/span>
    int ret = (int)lua_tonumber(L, -1); //取得q回?/span>
    lua_pop(L, 1); //弹出?/span>
12.lua的注?
    单行注释: ?--"到行?/span>
    多行注释: ?--[["?]]", 当重新启用这D代码时
    技?
    --[[
    语句
    --]]
    q样注释? 只要?--[["前加一?-", 那么语句可以执行了
13.lua io输入:
    a = io.read("*number") --read a number
14.lua中唯一一U数据结?table
15.q入lua交互模式, 执行os.exit()旉Z互模?/span>
    C:\>lua
    Lua 5.1.4  Copyright (C) 1994-2008 Lua.org, PUC-Rio
    > os.exit()
   
    C:\>
16.用lua -i参数来执行lua解释器时, q行完luaE序后将q入交互式模?/span>
   -i对于调试收工试ؓ(f)有用
   用lua -e参数, 可以直接在命令行中输入代?
    C:\>lua -e "print(math.sin(12))"
    -0.53657291800043
   用lua -l 可以加蝲库文?
    lua -i -l a -e "x = 10" --命o(h)行下加蝲库a, 执行x=10操作, 执行完后q入交互模式
   只要定义了一个名?_PROMPT"的全局变量, 解释器就?x)用它的gZ互模式的命o(h)提示W?/span>
    lua -i -e "_PROMPT=' lua>'"
17.lua的保留字 --关键?
   and break do else elseif
   end false for function if
   repeat return then true until
   while
18.全局变量不需要声? 只需要将一个D予一个全局变量可以创Z, 在lua中访问一个未初始化的变量不会(x)出错, l果是一个nil?/span>
   要删除一个变? 可以把这个变量赋gؓ(f)nil
19.在交互模式中, 如果要打CQ何表辑ּ的? 可以用等号开? q跟随一个表辑ּ:
    = math.sin(3)
20.lua?中基的类?/span>
   nil(I? boolean(布尔) number(数字) string(字符?
   userdata(自定义类? function(函数) thread(U程)
   table(?
   函数与type可以Ҏ(gu)一个D回其cd的名U?/span>


jianc 2012-03-16 16:16 发表评论
]]>
C++Primer MW记14 c?/title><link>http://www.shnenglu.com/jianc/archive/2012/03/13/167774.html</link><dc:creator>jianc</dc:creator><author>jianc</author><pubDate>Tue, 13 Mar 2012 06:20:00 GMT</pubDate><guid>http://www.shnenglu.com/jianc/archive/2012/03/13/167774.html</guid><wfw:comment>http://www.shnenglu.com/jianc/comments/167774.html</wfw:comment><comments>http://www.shnenglu.com/jianc/archive/2012/03/13/167774.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/jianc/comments/commentRss/167774.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/jianc/services/trackbacks/167774.html</trackback:ping><description><![CDATA[<p><span>1.c++c?--用户定义的类?user-defined type, UDT)</span><br /> <span>2.信息隐藏(information hiding)</span><br /> <span>3.除了静态数据成员外, 数据成员不能在类中被昄地初始化</span><br /> <span>4.一个成员函数只能重载自q的其他成员函?/span><br /> <span>5.数据隐藏的优?</span><br /> <span>    如果数据的访问属性是U有? 则一般除了类的共有接? 不能直接讉KU有成员</span><br /> <span>    如果数据的访问属性是共有? 则Q何地斚w可以直接讉Kq个数据成员</span><br /> <span>    但是, 如果cȝ实现变动? 即那个成员改变了, 那么, 如果q个成员是私有的, 但共有接口没改变, 则不需要修改用这个类的代?/span><br /> <span>    如果q个成员是共有的, 那么, 直接讉Kq个成员的Q何代码都需要做相应的改变了</span><br /> <span>    --所? 数据装性自有它的优?/span><br /> <span>6.讉K限定W?access specifier) public, private, protected</span><br /> <span>7.在某些情况下, 允许某个函数而不是整个程序可以访问类的私有成? q样做会(x)比较方便, 友元(friend)机制允许一个类授权其他的函数访问他的非公有</span><br /> <span>成员</span><br /> <span>8.友元声明以关键字friend开? 只能出现在类的声明中</span><br /> <span>9.因ؓ(f)只有当一个类的类体已l完整时, 它才被视为已l被定义, 所以一个类不能有自w类型的数据成员, 但可以用指向自ncd的指针或引用作ؓ(f)数据?/span></p> <p><span>?/span><br /> <span>10.cȝ定义不会(x)引v存储区分? 只有当定义一个类的对象时, pȝ才会(x)分配存储?/span><br /> <span>11.每个cL员函数的拯只有一?/span><br /> <span>12.把一个成员函数声明ؓ(f)const可以保证q个成员函数不修改类的数据成? 但是, 如果该类含有指针, 那么在const成员函数中就能修Ҏ(gu)针所指的对象, </span></font></p> <p><span>~译器不?x)检ؓ(f)错误, q常o(h)c++初学者吃?/span><br /> <span>13.Z允许修改一个类的数据成? 即它是一个const对象的数据成? 我们也可以把Ҏ(gu)据成员声明ؓ(f)mutable(易变?. mutable数据成员永远不会(x)?/span></p> <p><span>const成员, mutable成员中可以被更新</span><br /> <span>14.每个cL员函数都含有一个指向被调用对象的指? q个指针被称为this:</span><br /> <span>    在非const成员函数? 它的cd是指向该cȝ型的指针</span><br /> <span>    在const成员函数? 是指向constcȝ型的指针</span><br /> <span>    在volatile成员函数? 是指向volatilecȝ型的指针</span><br /> <span>15.cȝ静态成员被当做该类cd的全局对象, 对于非静态成? 每个cd象都有自q拯, 而静态数据成员对每个cȝ型只有一个拷? 静态数据成员只</span></p> <p><span>有一? 该类cdҎ(gu)有对象共享访?/span><br /> <span>16.同全局对象相比, 使用静态数据成员有两个优势:</span><br /> <span>    静态数据成员没有进入程序的全局名字I间</span><br /> <span>    可以实现信息隐藏, 静态成员可以是private成员, 而全局对象不能</span><br /> <span>17.静态数据成员的cd可以是其他所属类, 而非static数据成员只能被声明ؓ(f)该类的对象的指针或引?/span><br /> <span>18.静态数据成员可以被作ؓ(f)cL员函数的~省实参, 而非static成员不能</span><br /> <span>19.静态成员函数的声明除了在类体中的函数声明加上关键字static, 以及(qing)不能声明为const或volatile之外, 与非静态成员函数相? 出现在类体外的函?/span></p> <p><span>定义不能指定关键字static</span><br /> <span>20.静态成员没有this指针</span><br /> <span>21.cL员的指针必须L通过特定的对象或指向该类cd的对象的指针来访?/span><br /> <span>    针对cd象和引用?*</span><br /> <span>    针对指向cd象的指针?>*</span><br /> <span>22.定义一个成员函数指针需要制定函数返回类? 参数表和c?</span><br /> <span>    int (CTest::*)();</span><br /> <span>    int (CTest::*pmf)() = &CTest::test;</span><br /> <span>    pmf = &CTest::test2;</span><br /> <span>23.静态类成员属于该类的全局对象和函?/span><br /> <span>24.联合:一U节省空间的c?/span><br /> <span>    使用union是危险的, 通过一个不适当的数据成员以为的获取到当前存储在union中的值]</span><br /> <span>25.c++标准库提供了一个bitsetcL? 它可以辅助操作位的集? 在可能的情况? 应尽可能使用它来取代位域</span><br /> <span>26.一个类可以在另一个类中定? q样的类被称为嵌套类(nested class)</span><br /> <span>    嵌套cL其外围类的一个成?/span><br /> <span>27.cM可以定义在函C? q样的类被称为局部类(local class)</span><br /> <span>    局部类的成员函数必被定义在类定义? q就把局部类的成员函数的复杂性限制在几行代码?/span><br /> <br /> <br /> </p><img src ="http://www.shnenglu.com/jianc/aggbug/167774.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/jianc/" target="_blank">jianc</a> 2012-03-13 14:20 <a href="http://www.shnenglu.com/jianc/archive/2012/03/13/167774.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C++Primer MW记13 泛型法http://www.shnenglu.com/jianc/archive/2012/03/13/167758.htmljiancjiancTue, 13 Mar 2012 01:45:00 GMThttp://www.shnenglu.com/jianc/archive/2012/03/13/167758.htmlhttp://www.shnenglu.com/jianc/comments/167758.htmlhttp://www.shnenglu.com/jianc/archive/2012/03/13/167758.html#Feedback0http://www.shnenglu.com/jianc/comments/commentRss/167758.htmlhttp://www.shnenglu.com/jianc/services/trackbacks/167758.html1.copy() 法把一堆iterator当做前两个实? 用它们标记出要拷贝的元素范围, W三个实参是一个iterator, 它标C被拷贝元素将要放|的起始位置, back_inserter被称为iterator适配? 它得元素被插入C为实参的vector的尾?/span>
2.unique()随然L了容器中的重复? 但是只去掉相?c)重复? 因此可以先对容器q行sort()排序


jianc 2012-03-13 09:45 发表评论
]]>
C++Primer MW记12 异常处理http://www.shnenglu.com/jianc/archive/2012/03/12/167709.htmljiancjiancMon, 12 Mar 2012 03:55:00 GMThttp://www.shnenglu.com/jianc/archive/2012/03/12/167709.htmlhttp://www.shnenglu.com/jianc/comments/167709.htmlhttp://www.shnenglu.com/jianc/archive/2012/03/12/167709.html#Feedback0http://www.shnenglu.com/jianc/comments/commentRss/167709.htmlhttp://www.shnenglu.com/jianc/services/trackbacks/167709.html1.c++的异常处理机制被UCؓ(f)不可恢复?nonresumptive)
2.栈展开(stack unwinding)
    如果扑ֈ一个catch子句, 则该异常被处? 如果没有扑ֈcatch子句, 则在主调函数l箋查找
    q个q程沿着潜逃函数调用链向上l箋, 直到扑ֈ该异常的catch子句.
3.重新抛出(rethow)
    throw; //rethrow语句只能出现在catch子句飞复合语句中
    被抛出的异常是原来的异常对?br />4.把catch子句中的异常对象声明为引? 免去了对象的内存拯, 又可以确保应用在catch子句中的异常对象上的修改操作, 能够反映到被重新抛出的异?/p>

对象?br />5.catch-all
    try {
        ....
    }
    catch(...) {} //catch-all格式
6.catch子句被检查的序与它们在try块之后出现的序相同, 一旦找C一个匹? 则后l的catch子句不再检?br />7.异常规范(exception specification)
    void foo() throw(Object); //q种声明是异常规范
    异常声明是函数接口的一部分
8.异常规范不允?dng)R被抛出的异常cd到异常规范制定的cd之间的{?
    void foo() throw(string) {
        ....
        throw "exception";  //不允总const char* 到string的{? 此时调用unexpected()
        throw string("exception"); //可以
    }





jianc 2012-03-12 11:55 发表评论
]]>
C++Primer MW记11 函数模板http://www.shnenglu.com/jianc/archive/2012/03/12/167706.htmljiancjiancMon, 12 Mar 2012 02:55:00 GMThttp://www.shnenglu.com/jianc/archive/2012/03/12/167706.htmlhttp://www.shnenglu.com/jianc/comments/167706.htmlhttp://www.shnenglu.com/jianc/archive/2012/03/12/167706.html#Feedback0http://www.shnenglu.com/jianc/comments/commentRss/167706.htmlhttp://www.shnenglu.com/jianc/services/trackbacks/167706.html1.关键字templateL攑֜模板的定义与声明的最前面, 后面是用逗号分隔的模板参数列?template parameter list), 参数表不能ؓ(f)I?/span>
2.模板非类型参数是׃个普通的参数声明构成, 代表一个潜在的?
    template <typename Type, int size>
    Type min(Type (&arr)[size]);
    //当函数模板min()被实例化? size的g(x)被一个编译时d知的帔Rg?/span>
3.cd和值的替换q程被称为模板的实例?template instantiation)
4.c++支持两种模板~译模式:
    包含模式(Inclusion Model)
    分离模式(Separation Model)

    包含~译模式? 在每个模板被实例化的文g中包含函数模板的定义, q且往往把定义放在头文g? 向对内联函数左那?/span>
    --~点: 函数模板?body)描述了实现细?/span>
    分离~译模式? 函数模板声明攑֜头文件中, 函数模板定义攑֜cpp文g?/span>

    //.h
    template <typename Type> Type min(Type t1, Type t2);

    //.cpp
    export template <typename Type>
    Type min(Type t1, Type t2) { /* ... */ }

    //关键?export! 可导出的模板
    //q不是所有的~译器都支持分离模式



jianc 2012-03-12 10:55 发表评论
]]>
xl习(fn)http://www.shnenglu.com/jianc/archive/2012/03/09/167484.htmljiancjiancFri, 09 Mar 2012 05:53:00 GMThttp://www.shnenglu.com/jianc/archive/2012/03/09/167484.htmlhttp://www.shnenglu.com/jianc/comments/167484.htmlhttp://www.shnenglu.com/jianc/archive/2012/03/09/167484.html#Feedback0http://www.shnenglu.com/jianc/comments/commentRss/167484.htmlhttp://www.shnenglu.com/jianc/services/trackbacks/167484.html

stl 扑և数组的最?

#include <iostream>
#include 
<string>
#include 
<algorithm>
#include 
<vector>
using namespace std;

template
<typename Type, int size>
Type getMin(
const Type (&arr)[size])
{
    cout 
<< "Size:" << size <<endl;
    vector
<Type> vec(arr, arr + size);
    sort(vec.begin(), vec.end());
    
return vec[0];
}


int main(int argc, char *argv[])
{
    
int arr[] = {4-3245343};

    cout 
<< getMin(arr) < <endl;
    
    
return 0;
}


stl删除重复数据

 

#include <iostream>
#include 
<vector>
#include 
<algorithm>
#include 
<iterator>
using namespace std;

template
<typename Type>
void display(const vector<Type>& vec)
{
    vector
<Type>::const_iterator iter = vec.begin();
    
while(iter != vec.end())
    {
        cout 
<< *iter <<" ";
        iter
++;
    }
    cout 
<<endl;
}

int main(int argc, char *argv[])
{
    
const int Len = 12;
    
int arr[Len] = {223212345456};
    vector
<int> vec(arr, arr + Len);

    sort(vec.begin(), vec.end());

    display(vec);

    vector
<int>::iterator iterBegin = vec.begin();
    vector
<int>::iterator iterEnd = unique(vec.begin(), vec.end());    //L重复?/span>

    display(vec);

    
while(iterBegin != iterEnd)
    {
        cout 
<< *iterBegin << " ";
        iterBegin
++;
    }
    cout 
<<endl;


    
return 0;
}

 

map字符?/h3>

 

#include <string>
#include 
<map>
#include 
<algorithm>
#include 
<iostream>
using namespace std;

int main(int argc, char *argv[])
{
    map
<charint> mObj;

    
string str;
    cin 
>> str;

    
for(int i = 0; i < str.size(); ++i)
    {
        
if(mObj.count(str[i]))
            mObj[str[i]]
++;
        
else
            mObj.insert(map
<charint>::value_type(str[i], 1));
    }
    
    map
<charint>::iterator iter = mObj.begin();
    
while(iter != mObj.end())
    {
        cout 
<< iter->first << ":" <<iter->second <<endl;
        
++iter;
    }

    
return 0;
}

 



jianc 2012-03-09 13:53 发表评论
]]>C++Primer MW记10 函数重蝲(待更?http://www.shnenglu.com/jianc/archive/2012/03/09/167474.htmljiancjiancFri, 09 Mar 2012 03:59:00 GMThttp://www.shnenglu.com/jianc/archive/2012/03/09/167474.htmlhttp://www.shnenglu.com/jianc/comments/167474.htmlhttp://www.shnenglu.com/jianc/archive/2012/03/09/167474.html#Feedback0http://www.shnenglu.com/jianc/comments/commentRss/167474.htmlhttp://www.shnenglu.com/jianc/services/trackbacks/167474.html2.链接提示Wextern "C"只能指定重蝲函数集中的一个函?br />    --因ؓ(f)重蝲函数? 需要c++的名字改~功? 才能区分不同的函? 而extern "C"是指明了不要q行名字改编
//其他l节回头再看






jianc 2012-03-09 11:59 发表评论
]]>
C++Primer MW记9 域和生命?/title><link>http://www.shnenglu.com/jianc/archive/2012/03/09/167473.html</link><dc:creator>jianc</dc:creator><author>jianc</author><pubDate>Fri, 09 Mar 2012 03:40:00 GMT</pubDate><guid>http://www.shnenglu.com/jianc/archive/2012/03/09/167473.html</guid><wfw:comment>http://www.shnenglu.com/jianc/comments/167473.html</wfw:comment><comments>http://www.shnenglu.com/jianc/archive/2012/03/09/167473.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/jianc/comments/commentRss/167473.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/jianc/services/trackbacks/167473.html</trackback:ping><description><![CDATA[<p>1.上下?context)<br /> 2. 全局域内的函数声明将引入全局函数(global function)<br /> 3.全局域内的变量将引入全局对象(global object)<br /> 4.生命?lifetime)<br /> 5.函数声明(declaration) 指定了该函数的名字以?qing)函数的q回cd和参数列?br /> 6.函数定义(definition)qؓ(f)函数提供了函C<br /> 7.extern为声明但不定义一个对象提供了一U方? --承诺了该对象?x)在其他地方被定?br />     extern 声明不会(x)引v内存被分?br /> 8.c++中有一U机? 通过它可以把函数参数的类型和数目~码在函数名? Ҏ(gu)制叫做类型安全链?type-safe-linkage)<br /> 9.不同文g中出现同一对象或函数声明的其他cd不匹配情? 在编译或链接时可能不?x)被捕捉? 因ؓ(f)~译器一ơ只能处理一个文? 他不能很Ҏ(gu)地检</p> <p>查到文g之间的类型违? q些cdq例可能是程序严重错误的Ҏ(gu)<br /> 10.头文件ؓ(f)所向extern对象声明, 函数声明以及(qing)inline函数定义提供了一个集中的位置: q被UC声明的局部化(localization)<br /> 11.头文件提供了两个安全保证<br />     保证所有文仉包含同一个全局对象或函数的同一份声?br />     如果需要修改声? 则只需要改变一个头文g<br />     --只在本cpp用的全局函数, 该不该定义在头文仉?<br /> 12.局部对?local object)<br />    自动对象(automatic object)  --E序q行?br />    寄存器对?register object) --如果所选择的变量被频繁使用, 则寄存器变量可以提高函数的执行速度<br />    局部静态对?local static object)<br /> 13.当一个自动变量的地址呗存储在一个生命期长与它的指针? 该指针被UCؓ(f)I?zhn)指?dangling pointer)<br /> 14.动态分配的对象被分配在E序的空闲存储区(free store)的可用内存池?br /> 15.new表达式失败时, 通常?x)抛出bad_alloc异常<br /> 16.应用delete表达式失? 使内存无法返回空闲存储区, UC内存泄露(memory leak)<br /> 17.对用一内存应用了两ơdelete表达? 通常发生在两个指针指向同一个动态分配对象的时? q是一个很难跟t的问题<br /> 18.在对象被释放后读写该对象, q常怼(x)发生, 因ؓ(f)delete表达式应用的指针没有被设|ؓ(f)0<br /> 19.为帮助程序员更好地管理动态分配的内存, c++库提供了auto_ptrcȝ型的支持 --指针<br /> 20.auto_ptrcL板头文g<memory><br />     auto_ptr<int>pi(new int(1024));<br />     //pi是局部智能指? 当pi生命期结束时? ?x)自动释放pi指向的堆I间<br />     Z判断auto_ptr对象是否指向了一个对? 可以用操作get()q回auto_ptr对象内部的底层指?br />     if(p_auto_int.get() != 0 && *p_auto_int != 1024) { ... }<br /> 21.在某些情况下, 细节会(x)U聚成可怕的性能瓉, q些l节不应该烦扰那些试图ؓ(f)整个E序提供解决Ҏ(gu)的h, 但是q些l节是有l验的程序员应该考虑<br /> ?br /> 22.定位new表达?br />     new表达式可以允许程序员要求对象创建在已经被分配好的内存中, q种形式的new表达式被UCؓ(f)定位new表达?placement new expression)<br />     new (place_address) type -specifier<br />     place_address必须是个指针<br />     头文?lt;new><br />     byte *mem = new byte[4096]; //q个是自定义内存?<br />     char *tmp = new(mem) char; //在内存池分配一个char来用?<br />     delete [] mem;</p> <img src ="http://www.shnenglu.com/jianc/aggbug/167473.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/jianc/" target="_blank">jianc</a> 2012-03-09 11:40 <a href="http://www.shnenglu.com/jianc/archive/2012/03/09/167473.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C++Primer MW记8 函数http://www.shnenglu.com/jianc/archive/2012/03/08/167436.htmljiancjiancThu, 08 Mar 2012 12:22:00 GMThttp://www.shnenglu.com/jianc/archive/2012/03/08/167436.htmlhttp://www.shnenglu.com/jianc/comments/167436.htmlhttp://www.shnenglu.com/jianc/archive/2012/03/08/167436.html#Feedback0http://www.shnenglu.com/jianc/comments/commentRss/167436.htmlhttp://www.shnenglu.com/jianc/services/trackbacks/167436.html 2.按g?pass-by-value)
3.某些情况? ~译器自动将按D回{换到按引用返? 该优化称为命名返回g?named return value optimization)
4.直接或间接调用自q函数被称为递归函数(recursive function)
5.inline指示对编译器来说只是一个徏? ~译器可以选择忽略该徏?br />








jianc 2012-03-08 20:22 发表评论
]]>
C++Primer MW记7 抽象容器cdhttp://www.shnenglu.com/jianc/archive/2012/03/08/167416.htmljiancjiancThu, 08 Mar 2012 09:06:00 GMThttp://www.shnenglu.com/jianc/archive/2012/03/08/167416.htmlhttp://www.shnenglu.com/jianc/comments/167416.htmlhttp://www.shnenglu.com/jianc/archive/2012/03/08/167416.html#Feedback0http://www.shnenglu.com/jianc/comments/commentRss/167416.htmlhttp://www.shnenglu.com/jianc/services/trackbacks/167416.html1.序容器(sequence container) --拥有由单一cd元素l成的一个有序集?br />    list, vector, deque
2.兌容器(associative container) --支持查询一个元素是否存? q且可以有效地获取元?br />    map, set, multimap, multiset
3.容器的容?--在容器下一ơ需要增长自׃前能够被加入到容器中的元素的L(定w只与q箋存储的容器相?vector, deque, string. 而list不要?/p>

定w)
4.capacity()操作 --求一个容器的定w
5.容器的长?--容器当前拥有元素的个?br /> 6.size()操作 --求一个容器的长度
7.数据cd复? vector的效率就低
8.reserve()操作 --允许E序员将容器的容量设|成一个现实指定的?br /> 9.q代?iterator) --提供了一U一般化的方? 寚w序或兌容器cd中的每个元素q行q箋讉K
10.每个容器cd都提供了一个begin()和一个end()成员函数
11.begin()q回一个iterator, 指向容器的第一个元?br /> 12.end()q回一个iterator, 指向容器的末元素的下一个位|?br /> 13.Ziteratorcd, 每个容器q定义了一个const iteratorcd, 对于遍历const容器是必需?br /> 14.iterator术论算只适用于vector或deque, 而不适用与list, 因ؓ(f)ielist的元素在内存中不是连l存储的
15.string.find_first_of()查找与被搜烦字符串中L一个字W相匚w的第一ơ出? q返回它的烦引位|?br /> 16.string.substr()生成string对象的字串的一个拷?br /> 17.string.rfind()查找最后的指定字串出现的烦?br /> 18.string.find_first_not_of()查找W一个不与要搜烦字符串的L字符相匹配的字符
19.string.find_last_of()查找字符串中?与搜索字W串L元素相匹?的最后一个字W?br /> 20.string.find_last_not_of()查找字符串中?与搜索字W串L字符全不匚w"的最后一个字W?br /> 21.string.erase(pos, num)操作L字符串中的指定串, pos表示位置, num表示L的长?br /> 22.<locale>ctypec? {了标准c库函数的功能?qing)一l非成员函数
23.string.compare(pos, num, str); 比较pos位置的后面num个字W是否ؓ(f)str
24.string.insert(pos, newstring); pos表示要插入的位置, newstring表示要插入的字符?br /> 25.string.assign(); 字符串拷?br /> 26.string.append(); 字符串拼?br /> 27.string.swap(); 交换两个字符?br /> 28.string.at(); 对字W的下标索引操作, 有对索引D围检? 下标界时抛出out_of_range异常
   try {
      char ch = st.at(index);
   } catch(std::out_of_range) { ... }
29.string.replace(pos, num, newstring); 用newstring代替pos后面num个字W子?br /> 30.map 也叫兌数组(associative array) ?值对 key/value
    键用来烦引map, 值用作存储和索的数据
    map对象定义, 臛_要指明键和值的cd, ?
    map<string, int> word_count;
31.map的数据录?br />     map<string, string> str_str;
    str_str[string("one")] = string("1"); //q种效率比较?br />     str_str.insert(
        map<string, string>::value_type("two", "2")
    );  //q种效率?br /> 32.查找q获取map中的元素
    最单的Ҏ(gu):
    value = mapObj[key];
    但这h个问? 如果不存在keyq个? mapObj׃(x)插入key? q把对应的valuegؓ(f)默认? q样得到的value是无效的
    所? 应该q样?br />     if(mapObj.count(key))
        value = mapObj[key];
    或者这?
    map<keyType, valueType>::iterator iter = mapObj.find(key);
    if(iter != mapObj.end())
      value = mapObj[key];
33.从map中删除元?br />     erase操作
    mapObj.erase(key);
    q有两种重蝲方式, 详见文档

    mapObj.clear(); 清空map对象所有?br />

34.set对象插入元素
    #include <set>
    set<setType> setObj;
    setObj.insert(key);
35.set对象查找元素
    setObj.count(key); //1? 0没有
    setObj.find(key); iter为setObj.end()表示没有
36.multiset和multimap允许要被存储的键出现多次
    对于multiset和multimap的P代策略是联合使用findq回的iterator和countq回的?
    count = mulsetObj.count();
    multiset<type>::iterator iter;
    iter = mulsetObj.find(key);
    for(int i = 0; i < count; ++i, ++iter)
        do_something(*iter);
    另一U方法是使用equal_range()q回的iterator?br />     如果q个值存? 则第一个iterator指向该值的W一个实? 且第二个iterator指向q个值的最后一个实例的下一个位|?
    switch(mulmapObj.count) {
    case 0: break; //不存?br />     case 1: //只有一? 用普通的find操作
        multimap<keyType, valueType>::iterator iter;
        iter = mulmapObj.find(key);
        do_something(*iter);
        break;
    default: //有许多项
        typedef multimap<keyType, valueType>::iterator it;
        pair<it, it>pos;
        pos = mulmapObj.equal_range(key);
        for(; pos.first != pos.second; pos.first++)
            do_somethine(*pos.first);
    }
    //对应? 删除的话用mulmapObj.erase(pos.first, pos.second);
    //不支持下标操作是讉Kmultimap元素的一个限?
    mulmapObj[key]; //错误
37.栈容?stack container)支持的操?//头文?lt;stack>
   empty()
   size()
   pop()
   top()
   push(item)
38.栈类型被UCؓ(f)容器适配?container adapter)
39.~省情况? 栈用容器cddeque实现, 改变q个~省值可以这?
    stack<type, list<type>> stackObj; //Ҏ(gu)用容器类型list实现
    //一般是定义一个指针栈
    class CTest;
    stack<CTest*> ctestStack;
40.标准库提供了两种风格的队? queue(队列), priority_queue(优先U队?
    头文?<queue>
41.queue和priority_queue操作
   empty()
   size()
   pos()
   front() //只能用在一般队?br />    back() //只能用在一般队?br />    top()  //只能用在优先U队?br />    push(item)



jianc 2012-03-08 17:06 发表评论
]]>
Ʒþ| ?VþþƷ | þ99ֻоƷ66| Ʒþþþû| 91鶹Ʒ91þþþþ| 97þþþ| þAVһ| պŷһþþþ| ݺɫþۺ_| þ| þþۺϾɫۺ̾ | þۺ϶㼤þ| ޺ݺۺϾþþþ | ձѾþþþþþվ| ˾þۺϳ| þøݾƷԴվ| 97þþƷˬ| þþþþþþþþ| þɬۺ| þþŮһ| ھƷþþþþĻ| 97㽶þҹɫƷ| ۺۺϾþ69| þۺĻ| 97þþƷƷ| þþŷղ| þĻƷһ| þһ| þҹӰ| ޹Ʒþ| þþþ뾫Ʒapp| þþ޾Ʒ| þþƷAvӰƬ| Ʒ׾þAAAƬ69| þþƷAVDz18| ƷۺϾþ| ŷƷۺϾþ| ľþþƷ| ɫۺϾþʮ·| þþƷAV͵| þþþþAv뾫Ʒר|