??xml version="1.0" encoding="utf-8" standalone="yes"?>国产精品久久久久…,精产国品久久一二三产区区别,波多野结衣久久精品http://www.shnenglu.com/mzty/category/201.html<br/> <br/> <a href = "http://www.shnenglu.com/mzty/archive/2007/03/02/19109.html"><font size = 5 color ="#00FFFF">{C++ 基础}<font/></a> <a href = "http://www.shnenglu.com/mzty/archive/2007/08/13/29922.html"><font size = 5 color ="#00FFFF">{C++ 高}<font/></a> <a href = "http://www.shnenglu.com/mzty/archive/2007/04/16/22064.html"><font size = 5 color ="#00FFFF">{C#界面QC++核心法}<font/></a> <a href = "http://www.shnenglu.com/mzty/archive/2007/03/04/19163.html"><font size = 5 color ="#00FFFF">{设计模式}<font/></a> <a href = " http://www.shnenglu.com/mzty/archive/2007/03/04/19167.html"><font size = 5 color ="#FF0000">{C#基础}<font/></a> zh-cnThu, 22 May 2008 09:01:31 GMTThu, 22 May 2008 09:01:31 GMT60微YC++标准Q事件实例)http://www.shnenglu.com/mzty/archive/2006/11/25/15657.html梦在天梦在天Sat, 25 Nov 2006 09:38:00 GMThttp://www.shnenglu.com/mzty/archive/2006/11/25/15657.htmlhttp://www.shnenglu.com/mzty/comments/15657.htmlhttp://www.shnenglu.com/mzty/archive/2006/11/25/15657.html#Feedback3http://www.shnenglu.com/mzty/comments/commentRss/15657.htmlhttp://www.shnenglu.com/mzty/services/trackbacks/15657.html阅读全文

梦在天 2006-11-25 17:38 发表评论
]]>
如何调试E序?Release 版本Q??http://www.shnenglu.com/mzty/archive/2006/11/19/15439.html梦在天梦在天Sun, 19 Nov 2006 15:39:00 GMThttp://www.shnenglu.com/mzty/archive/2006/11/19/15439.htmlhttp://www.shnenglu.com/mzty/comments/15439.htmlhttp://www.shnenglu.com/mzty/archive/2006/11/19/15439.html#Feedback1http://www.shnenglu.com/mzty/comments/commentRss/15439.htmlhttp://www.shnenglu.com/mzty/services/trackbacks/15439.html
Ҏ一、利?*.PDB W号文g调试 Release 版本
?VCKBASE 的在U杂志中有一参考文章:W号文g——Windows 应用E序调试必备Qhttp://www.vckbase.com/document/viewdoc/?id=1710Q,文章谈到了如何?Release 版本二进制文件对应的 PDB 文g的问题。有?PDB 文g后,可以调?Release 了,Ҏ是:
    1、在Project Settings里选Settings For为All Configurations?
    2、在C/C++标签中,Debug info ?Program Database?
    3、在Link 标签中,Category?DebugQ选中Debug info 复选框和Microsoft format?
q行了上q设|后Q我们就可以像在调试版本中那栯|断点进行测试了Q由于代码优化,有些变量观察不到Q行的运行顺序可能也会不同?
有一炚w要注意:ASSERT宏在 Release 版本中不起作用,?Release 版本中应该?VERIFY 来代?ASSERT q行调试。如果发行版本运行有问题Q可以先止所有代码优化再q行调试?br />
Ҏ二、在需要加断点的地Ҏ加如下汇~语句:
    __asm int 3

不过调试的时候无法显CCE序Q只有asm代码?
    
此处 int 3 是专门用来设|断点的Q是 CPU 定义的,Windows ?DOS 下的大多数调试器都采用这U方法?br />
本脓不断更新中,希望大家跟脓贡献出更好的调试Ҏ。以便受益者少走弯?.....

梦在天 2006-11-19 23:39 发表评论
]]>
VC中动态生成控??http://www.shnenglu.com/mzty/archive/2006/11/14/15150.html梦在天梦在天Tue, 14 Nov 2006 05:06:00 GMThttp://www.shnenglu.com/mzty/archive/2006/11/14/15150.htmlhttp://www.shnenglu.com/mzty/comments/15150.htmlhttp://www.shnenglu.com/mzty/archive/2006/11/14/15150.html#Feedback0http://www.shnenglu.com/mzty/comments/commentRss/15150.htmlhttp://www.shnenglu.com/mzty/services/trackbacks/15150.html动态控件是指在需要时由Create()创徏的控Ӟq与预先在对话框中放|的控g是不同的?

  一、创建动态控Ӟ

  Z对照Q我们先来看一下静态控件的创徏?br />
  攄静态控件时必须先徏立一个容器,一般是对话框,q时我们在对话框~辑H口中,从工L口中拖出所需控g攑֜对话框中卛_Q再适当修改控gIDQ设|控件属性,一个静态控件就创徏好了Q当对话框被昄Ӟ其上的控件也会显C?br />
  静态控件不需要调用Create()函数来创建?br />
  而创建动态控件有很大不同Q以下以按钮ZQ看一下动态控件的创徏q程Q?br />
  1.建立控gIDP

  IDh控g的标识,创徏控g前必d为它讄一个ID受?br />
  打开资源中的“String Table”,在空白行上双击鼠标,q时会弹Z个ID属性对话框Q在其中的ID~辑框中输入IDQ如QIDC_MYBUTTONQ在Caption中输入控件标题或注解Q注QCaption框不能ؓI,为空会导致创建失败)Q这里我输入的是按钮上要昄的文?-动态按钮?br />
  2.建立控g对象Q?br />
  不同U类的控件应创徏不同的类对象Q?br />
  ·按钮控g CButton Q包括普通按钮、单选按钮和复选按钮)
  ·~辑控g CEdit
  ·静态文本控?CStatic
  ·标签控g CTabCtrl
  ·旋{控g CSpinButtonCtrl
  ·滑标控g CSliderCtrl
  ·多信息编辑控?CRichEditCtrl
  ·q度条控?CProgressCtrl
  ·滚动条控?CSrcollBar
  ·l合框控?CComboBox
  ·列表框控?CListBox
  ·囑փ列表控g CImageCtrl
  ·树状控g CTreeCtrl
  ·动画控g CAnimateCtrl

  本例中我们创Z个CButtoncȝ普通按钮。注意不能直接定义CButton对象Q如QCButton m_MyBut;q种定义只能用来l静态控件定义控制变量,不能用于动态控件?br />
  正确做法是用new调用CButton构造函数生成一个实例:

CButton *p_MyBut = new CButton();

  然后用CButtoncȝCreate()函数创徏Q该函数原型如下Q?br />
BOOL Create( LPCTSTR lpszCaption, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID );

  lpszCaption是按钮上昄的文本;dwStyle指定按钮风格Q可以是按钮风格与窗口风格的l合Q取值有Q?br />
  H口风格Q?br />
  ·WS_CHILD 子窗口,必须?br />  ·WS_VISIBLE H口可见Q一般都?br />  ·WS_DISABLED 用H口Q创建初始状态ؓ灰色不可用的按钮时?br />  ·WS_TABSTOP 可用Tab键选择
  ·WS_GROUP 成组Q用于成l的单选按钮中的第一个按?br />
  按钮风格Q?br />
  ·BS_PUSHBUTTON 下压式按钮,也即普通按?br />  ·BS_AUTORADIOBUTTON 含自动选中状态的单选按?br />  ·BS_RADIOBUTTON 单选按钮,不常?br />  ·BS_AUTOCHECKBOX 含自动选中状态的复选按?br />  ·BS_CHECKBOX 复选按钮,不常?br />  ·BS_AUTO3STATE 含自动选中状态的三态复选按?br />  ·BS_3STATE 三态复选按钮,不常?br /> 
  以上风格指定了创建的按钮cdQ不能同时用,但必L其一?br />
  ·BS_BITMAP 按钮上将昄位图
  ·BS_DEFPUSHBUTTON 讄为默认按钮,只用于下压式按钮Q一个对话框中只能指定一个默认按?br />  ·rect指定按钮的大和位置Q?br />  ·pParentWnd指示拥有按钮的父H口Q不能ؓNULLQ?br />  ·nID指定与按钮关联的IDP用上一步创建的ID受?br />
  不同控gcȝCreate()函数略有不同Q可参考相兌料?br />
  例:p_MyBut->Create( "动态按?, WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, CRect(20,10,80,40), this, IDC_MYBUTTON );
q样Q我们就在当前对话框中的(20,10)处创Z?0Q高30Q按钮文字ؓ“动态按钮”的下压式按钮?br />
  Z使创E更方便易用Q我定义了如下函敎ͼ

CButton* CTextEditorView::NewMyButton(int nID,CRect rect,int nStyle)
{
CString m_Caption;
m_Caption.LoadString( nID ); //取按钮标?br />CButton *p_Button = new CButton();
ASSERT_VALID(p_Button);
p_Button->Create( m_Caption, WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON | nStyle, rect, this, nID ); //创徏按钮
return p_Button;
}

  其中m_Caption.LoadString( nID )是从字符串表中读取按钮文本,q样在创建按钮IDӞ应该把文本设|好Q参数nStyle为除必须风格外的额外风格?br />
  以下Q我调用该函数创Z个按钮,q指定第一个按钮ؓ默认按钮Q按钮的ID已预先设|好了:

CButton *p_MyBut[3];
p_MyBut[0] = NewMyButton( ID_MYBUT1, CRect(10,20,50,35), BS_DEFPUSHBUTTON );
p_MyBut[1] = NewMyButton( ID_MYBUT2, CRect(55,20,95,35), 0 );
p_MyBut[2] = NewMyButton( ID_MYBUT3, CRect(100,20,140,35), 0 );

  二、动态控件的响应Q?br />
  动态控件的响应函数不能用ClassWizarddQ只能手动添加。仍以上面的按钮ZQ我们制作按钮的单击响应函数?br />
  1.在MESSAGE_MAP中添加响应函敎ͼ

  MESSAGE_MAP表中定义了消息响应函敎ͼ其格式ؓQ消息名(ID,函数?Q当我们用ClassWizardd函数Ӟ会自动添加在AFX_MSG_MAP括v的区间内Q如Q?br />
BEGIN_MESSAGE_MAP(CTextEditorView, CFormView)
//{{AFX_MSG_MAP(CTextEditorView)
ON_BN_CLICKED(IDC_ICONBUT0, OnIconbut0)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
 
  手工d时不要添加到AFX_MSG_MAP区间内,以防ClassWizard不能正常工作Q如Q?

BEGIN_MESSAGE_MAP(CTextEditorView, CFormView)
//{{AFX_MSG_MAP(CTextEditorView)
ON_BN_CLICKED(IDC_ICONBUT0, OnIconbut0)
//}}AFX_MSG_MAP
ON_BN_CLICKED(ID_MYBUT1, OnMybut1)
ON_BN_CLICKED(ID_MYBUT2, OnMybut2)
ON_BN_CLICKED(ID_MYBUT3, OnMybut3)
END_MESSAGE_MAP()

  其中ON_BN_CLICKED是按钮单L息?br />
  2.在头文g中添加函数定义:

  用ClassWizardd函数Ӟ会在头文件的AFX_MSG区间内添加函数定义,如:

protected:
//{{AFX_MSG(CTextEditorView)
afx_msg void OnIconbut0();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()

  我们模仿q种形式Q只是把函数定义d到AFX_MSG区间外就行了Q?br />
protected:
//{{AFX_MSG(CTextEditorView)
afx_msg void OnIconbut0();
//}}AFX_MSG
afx_msg void OnMybut1();
afx_msg void OnMybut2();
afx_msg void OnMybut3();
DECLARE_MESSAGE_MAP()

  3.~写消息响应函数Q?br />
  以上是把消息和函数关联v来了Q具体在单击按钮后应做的工作在函C完成Q?

void CTextEditorView::OnMybut1()
{
MessageBox( "哈!你单M动态按钮? );
}
void CTextEditorView::OnMybut2()
{
…?br />}
void CTextEditorView::OnMybut3()
{
…?br />}

  除了按钮的响应函数外Q你q可以用上面获得的指针访问按钮,如:

  修改按钮的大和位置Qp_MyBut[0]->MoveWindow(…?;

  修改按钮文本Qp_MyBut[0]->SetWindowText(…?;

  昄/隐藏按钮Qp_MyBut[0]->ShowWindow(…?;{等?br />三、回收资源:

  ׃动态控件对象是由new生成的,它不会被E序自动释放Q所以需手工释放。在控g不再使用时可以删除它Q?br />
if( p_MyBut[0] )
delete p_MyBut[0];

  以上是按钮控g动态生成的Ҏ。下面,再看一下单选按钮的动态生成问题?四、实例:单选按钮组的动态生?br />
  单选按钮也属于CButtonc,但由于单选按钮L成组使用的,所以它在制作和使用上与普通按钮有一定区别?br />
  假设有三个单选按钮组成一l,初始ӞW一个单选按钮处于选中状态?br />
  我们先来看静态制作方法:在对话框中放|三个单选按钮,讄属性如下:

  ·Radio1属性:Visible、Group、Tab stop、Auto
  ·Radio2属性:Visible、Tab stop、Auto
  ·Radio3属性:Visible、Tab stop、Auto

  q样的属性设|就把三个单选按钮分成了一l,它们一ơ只能有一个被选中Q若对话框中q有其它成组的单选按钮,使用时也会互不干扰。但q时q没有ɽW一个按钮处于选中状态?br />
  接着qClassWizardl单选按钮添加变量,q里只需为第一个单选按钮添加变量即可。设变量名ؓm_RadioQ类型选ؓint型。在构造函CClassWizard把m_Radio的D|ؓ-1Q我们把它改?Q这样在q行E序时可以看到第一个单选按钮处于选中状态了。之后,q应该用ClassWizardZ个单选按钮添加单d应函敎ͼ在里面修改m_Radio的值对应三个单选按钮就可以了?br />
  以上是通常制作单选按钮组的办法,现我们欲改ؓ动态生成,主要要解x钮分l和单击控制问题。以下ؓ制作步骤Q?br />
  1.定义三个单选按钮的IDQ?br />
  打开资源中的“String Table”,在其中添加三个ID|

  ·W一个:ID为IDC_MYRADIO1QCaption为单?
  ·W二个:ID为IDC_MYRADIO2QCaption为单?
  ·W三个:ID为IDC_MYRADIO3QCaption为单?

  其中Caption为按钮上要显C的文字Q可Ҏ需要设|?br />
  2.用CButtoncȝCreate()函数生成三个单选按钮:

  为方便v见,先定义一个函数生成单选按钮:

CButton* CTextEditorView::NewMyRadio(int nID,CRect rect,int nStyle)
{
 CString m_Caption;
 m_Caption.LoadString( nID ); //取按钮标?br /> CButton *p_Radio = new CButton();
 ASSERT_VALID(p_Radio);
 p_Radio->Create( m_Caption, WS_CHILD | WS_VISIBLE | nStyle | WS_TABSTOP | BS_AUTORADIOBUTTON, rect, this, nID ); //创徏按钮
 return p_Radio;
}

  函数LoadString()用于从“String Table”中d按钮文本QCreate()函数中设定了单选按钮必ȝ属性,其中包括了Visible、Tab stop、Auto属性?br />
  参数nID为单选按钮IDPrect为单选按钮尺寸,nStyle为除必要属性外的其它属性。返回gؓ指向新徏按钮的指针?br />
  有了q个函数后,创徏单选按钮组时只要依ơ调用该函数卛_Q其中单选按钮组的第一个单选按钮必L定WS_GROUP属性?br />
CButton *p_MyRadio[3];
p_MyRadio[0] = NewMyRadio( IDC_MYRADIO1, CRect(15,90,60,105), WS_GROUP );
p_MyRadio[1] = NewMyRadio( IDC_MYRADIO2, CRect(15,108,60,123), 0 );
p_MyRadio[2] = NewMyRadio( IDC_MYRADIO3, CRect(15,126,60,141), 0 );

  3.定义单选按钮组的控制变量,讄W一个单选按钮ؓ选中状态:

  q里不能用ClassWizardd变量Q也不要在DoDataExchange()中添加控制变量,因ؓ动态控件一开始ƈ不存在,在DoDataExchange()中添加控制变量会造成q行错误。这里我们只需在头文g中随意定义一个int型变量作为控制变量即可,如:

int m_SelRadio;

  在构造函C讄其初gؓ0Qm_SelRadio = 0;

  在上面的创徏按钮的语句中Q用SetCheck()函数讄初始选中的按钮:

CButton *p_MyRadio[3];
p_MyRadio[0] = NewMyRadio( IDC_MYRADIO1, CRect(15,90,60,105), WS_GROUP );
p_MyRadio[1] = NewMyRadio( IDC_MYRADIO2, CRect(15,108,60,123), 0 );
p_MyRadio[2] = NewMyRadio( IDC_MYRADIO3, CRect(15,126,60,141), 0 );
p_MyRadio[m_SelRadio]->SetCheck(1); //讄W一个单选ؓ选中状?

  在SetCheck()函数中,参数?表示讄为选中状态,?表示未选中状态?br />
  4.d鼠标单击响应函数Q?br />
  鼠标单击某单选按钮后Q其状态已l能自动改变Q这里我们还需修改控制变量m_SelRadio的|以便跟踪选中的单选按钮?br />
  首先在MESSAGE_MAP中把鼠标单击消息与响应函数联pv来:

BEGIN_MESSAGE_MAP(CTextEditorView, CFormView)
//{{AFX_MSG_MAP(CTextEditorView)
ON_BN_CLICKED(IDC_ICONBUT0, OnIconbut0) //ClassWizard在此处添?br />//}}AFX_MSG_MAP
ON_BN_CLICKED(IDC_MYRADIO1, OnMyRadio1) //单选按?
ON_BN_CLICKED(IDC_MYRADIO2, OnMyRadio2) //单选按?
ON_BN_CLICKED(IDC_MYRADIO3, OnMyRadio3) //单选按?
END_MESSAGE_MAP()

  然后在头文g的MESSAGE_MAP中定义单d敎ͼ

protected:
//{{AFX_MSG(CTextEditorView)
afx_msg void OnIconbut0(); //ClassWizard在此处添?br />//}}AFX_MSG
afx_msg void OnMyRadio1(); //单选按?
afx_msg void OnMyRadio2(); //单选按?
afx_msg void OnMyRadio3(); //单选按?
DECLARE_MESSAGE_MAP()

  q里注意不要把函数加在AFX_MSG区间内,以防影响ClassWizard的用?br />
  定义具体的响应函敎ͼq里是用手工加入的,不是用ClassWizard加入的)Q?br />
//单击单选按? void CTextEditorView::OnMyRadio1()
{
m_SelRadio=0;
}

//单击单选按? void CTextEditorView::OnMyRadio2()
{
m_SelRadio=1;
}

//单击单选按? void CTextEditorView::OnMyRadio3()
{
m_SelRadio=2;
}

  5.回收资源Q?br />
  在析构函CQ回收创建的单选按钮(也可以在不用单选按钮时立即回收Q:

CTextEditorView::~CTextEditorView()
{
int i;
for( i=0; i<3; i++)
{
if(p_MyRadio[i])
delete p_MyRadio[i];
}
}

  以上是动态控件的生成和响应方法,各种不同的控件做法略有不同,但思\和步骤都是类似的Q希望以上实例对你能够有所帮助?img src ="http://www.shnenglu.com/mzty/aggbug/15150.html" width = "1" height = "1" />

梦在天 2006-11-14 13:06 发表评论
]]>
VC 常见?08个问?(?http://www.shnenglu.com/mzty/archive/2006/11/14/15149.html梦在天梦在天Tue, 14 Nov 2006 05:03:00 GMThttp://www.shnenglu.com/mzty/archive/2006/11/14/15149.htmlhttp://www.shnenglu.com/mzty/comments/15149.htmlhttp://www.shnenglu.com/mzty/archive/2006/11/14/15149.html#Feedback2http://www.shnenglu.com/mzty/comments/commentRss/15149.htmlhttp://www.shnenglu.com/mzty/services/trackbacks/15149.html阅读全文

梦在天 2006-11-14 13:03 发表评论
]]>
VC中动态改变控件和对话框字?大小)http://www.shnenglu.com/mzty/archive/2006/11/13/15131.html梦在天梦在天Mon, 13 Nov 2006 08:47:00 GMThttp://www.shnenglu.com/mzty/archive/2006/11/13/15131.htmlhttp://www.shnenglu.com/mzty/comments/15131.htmlhttp://www.shnenglu.com/mzty/archive/2006/11/13/15131.html#Feedback1http://www.shnenglu.com/mzty/comments/commentRss/15131.htmlhttp://www.shnenglu.com/mzty/services/trackbacks/15131.html    例子Q?
    1、改静态文体的IDQ如:IDC_STATIC1
    2、添加一个Edit控gQ徏立一个关联的控gm_editControl?
    3、在OnInitDialog中添加如下代码:
CFont * f; 
     f 
= new CFont; 
     f
->CreateFont(16// nHeight 
     0// nWidth 
     0// nEscapement 
     0// nOrientation 
     FW_BOLD, // nWeight 
     TRUE, // bItalic 
     FALSE, // bUnderline 
     0// cStrikeOut 
     ANSI_CHARSET, // nCharSet 
     OUT_DEFAULT_PRECIS, // nOutPrecision 
     CLIP_DEFAULT_PRECIS, // nClipPrecision 
     DEFAULT_QUALITY, // nQuality 
     DEFAULT_PITCH | FF_SWISS, // nPitchAndFamily 
     _T("Arial")); // lpszFac 
   
     GetDlgItem(IDC_STATIC1)
->SetFont(f); 
需要注意的是,q里我们使用的是CFont指针Q而不是普通的CFont局部变? 在非MFCE序Q首先用CreateFont来徏立一个字体句柄,然后再用SendMessage发给控gWM_SETFONT消息Q将建立的字体句柄赋D去,可以了?br />
实例下蝲:http://www.china-askpro.com/download/CtrlFont.zip

 
2 但是整个对话框或H口的字体的大小,使用对话框或H口的SetFont()函数却没有Q何的作用.可以在初始化旉历每个控件分别设|来处理,但这里说另一U用回调函数的单方?
   :调用pȝ的API:::EnumChildWindows(). ,传入回调函数和重新定义的字体.(W一个参C用管?本来有?
)
   1)在文档视囄构中CMainFrame::OnCreate().中调?:EnumChildWindows(). 实现所有窗口和子窗口字体改?br />   2) 在对话框的OnInitDialog(). 中调?:EnumChildWindows(). 改变对话H上的所有控?

回调函数如下:

// lParam is a pointer to CFont object
BOOL __stdcall SetChildFont(HWND hwnd, LPARAM lparam)
{
  CFont 
*pFont = (CFont*)lparam;
  CWnd 
*pWnd = CWnd::FromHandle(hwnd);
  pWnd
->SetFont(pFont);
  
return TRUE;
}

 

使用1:

BOOL CAboutDlg::OnInitDialog() 
{
    CDialog::OnInitDialog();
    
    
// TODO: Add extra initialization here
  ::EnumChildWindows(m_hWnd, ::SetChildFont, (LPARAM)g_Font.GetFont());
    
    
return TRUE;  // return TRUE unless you set the focus to a control
                  
// EXCEPTION: OCX Property Pages should return FALSE
}



使用2:

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
    
if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
        
return -1;
    
    
if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
        
| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
        
!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
    
{
        TRACE0(
"Failed to create toolbar\n");
        
return -1;      // fail to create
    }


    
if (!m_wndStatusBar.Create(this||
        
!m_wndStatusBar.SetIndicators(indicators,
          
sizeof(indicators)/sizeof(UINT)))
    
{
        TRACE0(
"Failed to create status bar\n");
        
return -1;      // fail to create
    }


    m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
    EnableDocking(CBRS_ALIGN_ANY);
    DockControlBar(
&m_wndToolBar);

  ::EnumChildWindows(m_hWnd, ::SetChildFont, (LPARAM)g_Font.GetFont());

    
return 0;
}

(很好?不像mfc中的那个垃圾setfont(),讄了对话框的没有一点反?)

实例下蝲:http://www.codeproject.com/gdi/SetFont/SetFont_demo.zip


3 如何在mfc中实?当系l的字体变大的时?对话框上面的字体也相应的变大?(非常感谢)

//IconFont
    LOGFONT logFont;
    
int  size = sizeof(LOGFONT);
    
bool isGood = SystemParametersInfo(SPI_GETICONTITLELOGFONT,size,&logFont,0);
    
if(isGood == true)
    
{
        CFont 
* f;
        f 
= new CFont;
             const LOGFONT* pFont = new LOGFONT(logFont);
        f
->CreateFontIndirectW(pFont);
        
//::EnumChildWindows(m_hWnd, ::SetChildFont, (LPARAM)f);
    }


    
//other Font
    NONCLIENTMETRICS ncm = new NONCLIENTMETRICS();                
    
bool isGood = SystemParametersInfo(SPI_GETNONCLIENTMETRICS, sizeof(NONCLIENTMETRICS), ref ncm, 0);
    
if (isGood == true)
    
{
        LOGFONT logFont2;
        
//logFont2=ncm.lfntCaptionFont);//CaptionFont
        
//logFont2 =ncm.lfntSMCaptionFont;//CaptionFont_Small
        
//logFont2 = ncm.lfntMenuFont;//MenuFont
        
//logFont2 = ncm.lfntStatusFont;//StatusFont
        logFont2 = ncm.lfntMessageFont;//MessageFont

        CFont 
* f;
        f 
= new CFont;
             const LOGFONT* pFont = new LOGFONT(logFont2);
        f
->CreateFontIndirectW(pFont);
        
//::EnumChildWindows(m_hWnd, ::SetChildFont, (LPARAM)f);

    }

以上是取得系l字体的大小,然后再调用上面的W二U方?哈哈哈哈?
H体上的所有字体都会跟着pȝ字体的大改?哈哈哈哈!


主要使用API:

SystemParametersinfo该函数查询或讄pȝU参数。该函数也可以在讄参数中更新用户配|文?/h4>
函数功能Q该函数查询或设|系l参数。该函数也可以在讄参数中更新用户配|文件?br />
    函数原型QB00L SystemParametersinfoQUINT uiActionQUINT uiParamQPVOID pvParamQUINT fWinlniQ;

    参数Q?br />
    uiActionQ该参数指定要查询或讄的系l参数。其取值如下;

    SPI_GETACCESSTIMEOUTQ检索与可访问特性相兌的超时段的信息,PvParam参数必须指向某个ACCESSTIMEOUTl构以获得信息,q将该结构中的cbSjze成员和ulParam参数的D为sizeofQACCESSTIMEOUTQ?br />
    SPI_GETACTIVEWINDOWTRACKINGQ用于Windows 98和Windows NT 5.0及以后的版本。它表示是否打开zdH口跟踪Q激z该H口旉标置为开状态)QpvParam参数必须指向一个BOOL型变量(打开时接收gؓTRUEQ关闭时为FALSEQ?br />
    SPI_GETACTIVEWNDTRKZORDERQ用于Windows 98和Windows NT 5.0及以后版本。它表示通过zdH口跟踪开xzȝH口是否要置于最层。pvParam参数必须指向一个BOOL型变量,如果要置于顶层,那么该变量的gؓTRUEQ否则ؓFALSE?br />
    SPI_GETACTIVEWNDTRKTIMEOUTQ用于Windows 98和 Windows NT 5.0及以后版本。它指示zdH口跟踪延迟量,单位为毫U。pvParam参数必须指向DWORDcd变量Q以接收旉量?br />
    SPI_GETANIMATIONQ检索与用户zd有关的动L果。pvParam参数必须指向ANIMATIOINFOl构以接收信息。ƈ该l构的cbSize成员和ulParam参数|ؓsizeofQANIMATIONINFOQ?br />
    SPI_GETBEEPQ表C告蜂鸣器是否是打开的。pvParam参数必须指向一个BOOLcd变量Q如果蜂鸣器处于打开状态,那么该变量的gؓTRUEQ否则ؓFALSE?br />
    SpI_GETBORDERQ检索决定窗口边界放大宽度的边界攑֤因子。pvParam参数必须指向一个整型变量以接收该倹{?br />
    SPI_GETDEFAULTINPUTLANGQ返回用于系l缺省输入语a的键盘布局句柄。pvParam参数必须指向一?2位变量,以接收该倹{?br />
    SPI_GETCOMBOBOXANIMATIONQ用于Windows 98和Windows NT 5.0及以后版本。它表示用于l合柜的动打开效果是否允许。pvParam参数必须指向一个BOOL变量Q如果允许,那么变量q回gؓTRUEQ否则ؓFALSE?br />
    SPI_GETDRAGFULLWINDOWSQ确定是否允许拖拉到最大窗口。pvParam参数必须指向BOOL变量Q如果允许,q回gؓTRUEQ否则ؓFALSE。对于Windows 95pȝQ该标志只有在安装了Windows plusl才支持?br />
    SPI_GETFASTTASKSWITCHQ该标志已不用!以前版本的系l用该标志来确定是否允许AltQTab快速Q务切换。对于Windows 95、Windows 98和Windows NT 4.0版而言Q快速Q务切换通常是允许的?br />
    SPI_GETFILTERKEYSQ检索有关FILTERKEYSQ过滤键Q易用特征信息。pvParam参数必须指向接收信息的filterkeysl构Qƈ该l构中的cbSze成员和ulParam参数的D为sizeofQFILTERKEYSQ?br />
    SPI_GETFONTSMOOTHINGQ表C字体^滑处理特征是否允许。该特征使用字体保真技术,通过在不同灰度上涂上像素字体曲线昑־更加qx。参数pvParam必须指向BOOLcd变量Q如果该特征被允许,那么q回gؓTRUEQ否则ؓFALSE。对于Windows 95pȝQ该标志只有在安装了Windows plusl才支持?br />
    SPI_GETFOREGROUNDFLASHCOUNTQ用于Windows 98和Windows NT 5.0及以后版本。它表示在拒l前台切换申hpȝ闪烁d条按钮的ơ数。参数pvParam必须指向DWORD变量Q以接收该倹{?br />
    SPI_GETFOREGROUNDLOCKTIMEOUTQ用于Windows NT 5.O及以后版本或Windows 98。它表示在系l禁止应用程序强行将自己q入前台期间的时间量Q单位ؓ毫秒Q参数pvParam必须指向DWORD变量以接收时间倹{?br />
    SPI_GETGRADIENTCAPTIONSQ用于Windows 98和Windows NT 5.0及以后版本。它表示是否允许有用于窗口标题栏的倾斜效果。参数pvParam必须指向BOOL变量Q其值在允许时ؓTRUEQ禁止时为FALSE?br />
    SPL_GETGRIDGRANULARITYQ检索桌面大网格的当前颗粒度倹{参数pVparam必须指向一个整型变量以接收该倹{?br />
    SPI_GETHIGHCONTRASTQ用于Windows 95及更高版本、Windows NT 5.0及以后版本。检索与HighContrast易用特征有关的信息。pvParam参数必须指向用于接收该信息的HIGHCONTRASTl构Q该l构中的。cbSize成员和ulParam参数的值应设ؓsizeofQNIGHCONTRASTQ?/div>
2004-09-10 11:47:30
回复? lixiaosan
SPI_GETICONMETRICSQ检索与图标有关的度量信息。参数pvParam必须指向一个ICONMETRICSl构以接收信息。该l构中的。cbSize成员和ulParam参数的值应设ؓsizeofQICONMETRICSQ?br />
    SPI_GETICONTITLELOGFONTQ检索当前图标标题字体的逻辑字体信息。参数ulParam规定了logfontl构的大,参数pvParam必须指向要填充的Iogfontl构?br />
    SPI_GETICONTITLEWRAPQ确定是否允许图标标题环l。pvParam参数必须指向一个BOOLcd变量Q该变量的值在允许时ؓTRUEQ否则ؓFALSE?br />
    SPI_GETKEYBOARDDELAYQ检索键盘重复击键gq设|,该D围从0Q大U?5Oms延迟Q到3Q大U?Ugq)。与该范围里每一个值相关的实际延迟旉可能与硬件有兟뀂pvParam参数必须指向一个整型变量以接收讄倹{?br />
    SPI_GETKEYBOARDPREFQ用于Windows 95及以后版本。Windows NT 5.O及以后版本。它定用户是否依赖键盘而非鼠标Q是否要求应用程序显C键盘接口,以免隐藏。pvParam参数必须指向一个BOOLcd变量Q如果用户依赖键盘,那么该变量取gؓTRUEQ否则ؓFALSE?br />
    SPI_GETKEYBOARDSPEEDQ检索键盘重复击键速度讄情况Q该D围从0Q大U?0?U)?1Q大U?5?U)。实际的击键速率与硬件有养I而且变动的线性幅度有可能高达20Q。参数pvParam必须指向DWORD变量以接收设|倹{?br />
    SPI_GETLISTBOXSMOOTHSCROLLINGQ用于Windows 98和Windows NT 5.0及以后版本。表C是否允许有列表栏的qx滚动效果。pvParam参数必须指向BOOL变量Q如果允许,则该gؓTRUEQ否则ؓFALSE?br />
    SPI_GETLDWPOWERACTIVEQ确定是否允许屏q保护的低电压状态。如果允许,那么指向BOOL变量的pvParam参数会接收到TRUE|否则为FALSE。对于Windows 98,该标志对16位和32位应用程序都支持?br />
    对于Windows 95Q该标志只支?6位应用程序。对于Windows NTQ在Windows NT 5.0及以后版本中支持32位应用程序,?6位应用程序则不支持?br />
    SPI_GETLOWPOWERTIMEOUTQ检索用于屏q保护的低电压状态超时倹{pvParam参数必须指向一个整型变量,以接收该倹{对于Windows 98该标志支?6位和32位应用程序。对于Windows95Q该标志只支?6位应用程序。对于Windows NT,该标志支持Windows NT 5.0及以后版本上?2位应用程序。不支持16位应用程序?br />
    SPI_GETMENUDROPALIGNMENT。确定弹出式菜单相对于相应的菜单条项是左寚wQ还是右寚w、参数pvParam必须指向一个BOOLcd变量Q如果是左对齐。那么该变量gؓTRUEQ否则ؓFALSE。SPI_GETMINIMIZEDMETRICSQ检索最化H口有关的度量数据信息。参数pvParam必须指向MINIMIZEDMETRCSl构Q以接收信息。该l构中的cbSize和ulParam参数的值应设ؓsizeofQMINIMIZEDMETRICSQ?br />
    SPI_GETMOUSEQ检索鼠标的2个阈值和加速特性。pvParam参数必须指向一个长度ؓ3的整型数l,分别存储此倹{?br />
    SPI_GETMOUSEHOVERHEGHTQ用于Windows NT 4.0及以后版本或Windows 98。获得在TrackMouseEvent事g中,Z生WM_MOUSEOVER消息而鼠标指针必d留的矩Ş框的高度,以像素ؓ单位。参数pvParam必须指向一个UINT变量以接收这个高度倹{?br />
    SPI_GETMOUSEHOVERTIMEQ用于Windows NT 4.0及以后版本、Windows 98Q获得在TrackMouseEvent事g中,Z生WM_MOUSEOVER消息而鼠标指针必d留在矩Ş框内的时_单位为毫U。参数pvParam必须指向一个UINT变量以接收该旉倹{?br />
    SPI_GETMOUSEHOVERWIDTHQ用于Windows NT 4.0及以后版本、Windows 98。获得在TrackMouseEvent事g中,Z生WM_MOUSEOVER消息而鼠标指针必d留的矩Ş框的宽度,以像素ؓ单位。参数pvParam必须指向一个UINT变量以接收这个宽度倹{?br />
    SPI_GETMOUSEKEYSQ检索与MOUSEKEYS易用特征有关的信息,pvParam参数必须指向某个MOUSEKEYSl构Q以获取信息。应结构的cbSize成员和ulParam参数讄为sizeofQMOUSEKEYSQ?br />
    SPI_GETMOUSESPEEDQ用于Windows NT 5.0及以后版本、Windows 98。检索当前鼠标速度。鼠标速度军_了鼠标移动多距,鼠标的指针将Ud多远。参数pvParam指向一个整型变量,该变量接?Q最慢)?0Q最快)之间的数倹{缺省gؓ?0。这个值可以由最l用户用鼠标控刉板应用程序或使用调用了SPI_SETMOUSESPEED的应用程序来讄?br />
    SPI_GETMOUSETRAILSQ用于WpvParam必须指向一个BOOLcd变量Q如果是左对齐。那么该变量gؓTRUEQ否则ؓFALSE?br />
    SPI_GETMINIMIZEDMETRICSQ检索最化H口有关的度量数据信息。参数pvParam必须指向MINIMIZEDMETRCSl构Q以接收信息。该l构中的cbSize和ulParam参数的值应设ؓsizeofQMINIMIZEDMETRICSQ?br />
    SPI_GETMOUSEQ检索鼠标的2个阈值和加速特性。pvParam参数必须指向一个长度ؓ3的整型数l,分别存储此倹{?br />
    SPI_GETMOUSEHOVERHEGHTQ用于Windows NT 4.0及以后版本或Windows 98。获得在TrackMouseEvent事g中,Z生WM_MOUSEOVER消息而鼠标指针必d留的矩Ş框的高度,以像素ؓ单位。参数pvParam必须指向一个UINT变量以接收这个高度倹{?br />
    SPI_GETMOUSEHOVERTIMEQ用于Windows NT 4.0及以后版本、Windows 98Q获得在TrackMouseEvent事g中,Z生WM_MOUSEOVER消息而鼠标指针必d留在矩Ş框内的时_单位为毫U。参数pvParam必须指向一个UINT变量以接收该旉倹{?br />
    SPI_GETMOUSEHOVERWIDTHQ用于Windows NT 4.0及以后版本、Windows 98。获得在TrackMouseEvent事g中,Z生WM_MOUSEOVER消息而鼠标指针必d留的矩Ş框的宽度,以像素ؓ单位。参数pvParam必须指向一个UINT变量以接收这个宽度倹{?br />
    SPI_GETMOUSEKEYSQ检索与MOUSEKEYS易用特征有关的信息,pvParam参数必须指向某个MOUSEKEYSl构Q以获取信息。应结构的cbSize成员和ulParam参数讄为sizeofQMOUSEKEYSQ。SPI_GETMOUSESPEEDQ用于Windows NT 5.0及以后版本、Windows 98。检索当前鼠标速度。鼠标速度军_了鼠标移动多距,鼠标的指针将Ud多远。参数pvParam指向一个整型变量,该变量接?Q最慢)?0Q最快)之间的数倹{缺省gؓ?0。这个值可以由最l用户用鼠标控刉板应用程序或使用调用了SPI_SETMOUSESPEED的应用程序来讄?br />
    SPI_GETMOUSETRAILSQ用于Windows 95及更高版本。它用来表示是否允许MouseTrailsQ鼠标轨q)。该特征通过单地昄鼠标轨迹q迅速擦除它们来改善鼠标的可见性。参数prParam必须指向一个整型变量来接收该倹{如果这个gؓ0?Q那么表C禁止该特征。如果该值大?Q则说明该特征被允许Qƈ且该DC在鼠标轨迹上画出的光标数目。参数ulParam不用?/div>
2004-09-10 11:47:54
回复? lixiaosan
SPI_GETNONCLIENTMETRICSQ检索与非最化H口的非客户区有关的度量信息。参数pvParam必须指向NONCLIENTMETRICSl构Q以便接收相应倹{该l构的。cbSize成员与ulParam参数值应设ؓsizeofQNONCLIENTMETRICSQ。对于Windows 98Q该标志支持16位和32位应用程序。对于Windows 95Q该标志只支?6位应用程序。对于Windows NT该标志在NT 5.0及以后版本中支持32位应用程序,不支?6位应用程序?br />
    SPI_GETPOWEROFFACTIVEQ确定是否允许屏q保护中关电。TRUE表示允许QFA参数pvParam必须指定SERIALKEYSl构来接收信息。该l构中的cbSize成员和ulParam参数的D设ؓsizeofQSERIALKEYSQ?br />
    SPI_GETSHOWSOUNDSQ确定ShowSounds易用Ҏ标志是开或是兟뀂如果是开Q那么用户需要一个应用程序来可视化地表达信息Q占则只能以听得见的方式来表达。参数pvParam必须指向一个BOOLcd变量。该变量在该特征处于开状态时q回TRUEQ否则ؓFALSE。用这个值等同于调用GetSystemMetricsQSM_SHOWSOUNDSQ。后者是推荐使用的调用方式?br />
    SPI_GETSNAPTODEFBUTTONQ用于Windows NT 4.0及以后版本、Windows 98Q确定 Snap-TO-Default-ButtonQ{至缺省按钮)特征是否允许。如果允许,那么鼠标自动U至~省按钮上,例如对话框的"Ok"?Apply"按钮。pvParam参数必须指向Boolcd变量Q如果该特征被允许,则该变量接收到TRUEQ否则ؓFALSE?br />
    SPI_GETSOUNDSENTRYQ检索与SOUNDSENTRY可访问特征有关的信息。参数pvParam必须指向SOUNDSENTRYl构以接收信息。该l构中的。cbSize或员和ulParam参数的D设ؓsizeofQSOUNDSENTRYQ?br />
    SPI_GETSTICKYKEYSQ检索与StickyKeys易用特征有关的信息。参敊WpvParam必须指向STICKYKEYSl构以获取信息。该l构中的cbSze成员及ulParam参数的值须设ؓsizeofQSTICKYKEYSQ?br />
    SPI_GETSWITCHTASKDISABLEQ用于Windows NT 5.0、Windows 95及以后版本,定是否允许AltQTab和AItQEscd切换。参数pvParam必须指向UINTcd变量Q如果禁止Q务切换,那么q回gؓ1Q否则ؓ0。在~省情况下,是允许进行Q务切换的?br />
    SPI_GETTOGGLEKEYSQ检索与ToggleKeys易用Ҏ有关的信息。参数pvParam必须指向TOGGLEKEYSl构以获取信息。该l构中的cbSize成员和ulParam参数D讄sizeofQTOGGLEKEYSQ?br />
    SPI_GETWHEELSCROLLLINESQ用于Windows NT 4.0及以后版本、Windows 98。当前轨q球转动Ӟ获取滚动的行数。参数pvParam必须指向UINTcd变量以接收行数。缺省值是3?br />
    SPI_GETWINDOWSEXTENSIONQ在Windows 95中指C系l中是否装了Windows Extension和Windows PlusQ?br />
    参数ulParam应设?。而参数pvParam则不用。如果安装了Windows ExtensonQ那么该函数q回TRUEQ否则ؓFALSE?br />
    SPI_GETWORKAREAQ检索主昄器的工作区大。工作区是指屏幕上不被系lQ务条或应用程序桌面工具遮盖的部分。参数pvParam必须指向RECTl构以接收工作区的坐标信息,坐标是用虚拟屏幕坐标来表C的。ؓ了获取非LC器的工作区信息Q请调用GetMonitorlnfo函数。参数ulParam指定宽度Q单位是像素?br />
    SPI_ICONVERTICALSPACINGQ设|图标单元的高度。参数ulParam指定高度Q单位是像素?br />
    SPI_LANGDRIVERQ未实现?br />
    SPI_SCREENSAVERRUNNINGQ改名ؓSPI_SETSCREENSAVERRUNNING?br />
    Spl_SETACCESSTIMEOUTQ设|与可访问特性有关的旉限度|参数 pvParam必须指向包含新参数的ACCESSTIMEOUTl构Q该l构的cbSize成员与ulParam参数的D设ؓsizeofQACCESSTMEOUTQ?br />
    SPI_SETACTIVEWINDOWTRACKINGQ用于Windows NT 5.0及以后版本、Windows 98。设|活动窗口追t的开或关Q如果把参数pvParam设ؓTRUEQ则表示开。pvParam参数为FALSE时表C关?br />
    SPI_SETACTIVEWNDTRKZORDERQ用于Windows NT 5.0及以后版本、Windows 98。表C是否把通过zdH口跟踪而激zȝH口推至层。参数pvParam设ؓTRUE表示推至层QFALSE则表CZ推至层?br />
    SPI_SETACTIVEWNDTRKTIMEOUTQ用于Wlindows NT 5.0及以后版本、Windows 98。设|活动窗口跟tgq?br />
    参数pvParam讄在用鼠标指针Ȁzȝ口前需延迟的时间量Q单位ؓ毫秒?br />
    SPI_SETBEEPQ将警蜂器打开或关闭。参数ulParam指定为TRUE时表C打开QؓFALSE时表C关闭?br />
    SPI_SETBORDERQ设|确定窗口羃放边界的边界攑֤因子。参数ulParam用来指定该倹{?br />
    SPI_SETCOMBOBOXANIMATIONQ用于Windows NT 5.0及以后版本和Windows 98。允许或止l合滑动打开效果。如果设|pvParam参数为TRUEQ则表示允许有倾斜效果Q如果设为FALSE则表C禁止?br />
    SPI_SETCURSORSQ重|系l光标。将ulParam参数设ؓ0q且pvParam参数设ؓNULL?br />
    SPI_SETDEFAULTINPUTLANGQؓpȝShellQ命令行解器Q和应用E序讄~省的输入语a。指定的语言必须是可使用当前pȝ字符集来昄的。pvParam参数必须指向DWORD变量Q该变量包含用于~省语言的键盘布局句柄?br />
    SpI_SETDESKpATTERNQ通过使Windowspȝ从WIN.INI文g中pattern=讄Ҏ讄当前桌面模式?br />
    SPI_SETDESKWALLPAPERQ设|桌面壁。pvParam参数必须指向一个包含位图文件名Qƈ且以NULLQ空Q结束的字符丌Ӏ?br />
    SPI_SETDOUBLECLICKTIMEQ设ulParam参数的gؓ目标双击旉。双L间是指双M的第1ơ和W?ơ点M间的最大时_单位为毫U。也可以使用SetDoubleClickTime函数来设|双L间。ؓ获取当前双击旉Q请调用GetDoubleClickTime函数?br />
    SPI_SETDOUBLECLKHEGHTQ将ulParam参数的D为双ȝ形区域的高度。双ȝ形区域是指双M的第2ơ点L鼠标指针必须落在的区域,q样才能记录为双凅R?br />
    SPI_SETDOUBLECLKWIDTHQ将ulParam参数的D为双ȝ形区域的宽度?br />
    SPI_SETDRAGFULLWINDOWSQ设|是否允许拖x大窗口。参数uIParam指定为TRUE时表CZؓ允许QؓFALSE则不可。对于Windows 95Q该标志只有在安装了Windows plusl才支持?br />
    SPI_SETDRAGHEIGHTQ设|用于检拖拉操作v点的矩Ş区域的高度,单位为像素。参考GETSYSTEMMETRICS函数的nlndex参数中的SM_CXDRAG和SM_CYDRAG?br />
    SPI_SETDRAGWIDTHQ设|用于检拖拉操作v点的矩Ş区域的宽度,单位为像素?br />
    SPI_SETFASTTASKSWITCHQ该标志׃再用。以前版本的pȝ使用此标志来允许或不许进行AltQTab快速Q务切换。对于Windows 95、Windows 98和Windows NT 4.0Q通常都允许进行快速Q务切换。参考SPI_SETSWITCHTASKDISABLE?br />
    SPI_SETFILTERKEYSQ设|FilterKeys易用Ҏ的参数。参数pvParam必须指向包含新参数的FILTERKEYSl构Q该l构中的cbSize成员和参数ulParam的值应设ؓsizeofQFILTERKEYSQ?br />
    SPI_SETFONTSMOOTHINGQ允许或止有字体^滑特性。该Ҏ用字体保真技术,通过在不同灰度上涂d素点来得字体曲U显得更加^滑,Z允许有该Ҏ,参数ulParam应设为TRUE|否则为FALSE。对于Windows 95Q只有在安装了Windows plusl才支持该标志?br />
    SPI_SETFOREGROUNDFLASHCOUNTQ用于Windows 98和Windows NT 5.0及以后版本。设|SetForegroundWindow在拒l前台切换申h闪烁d拦按钮的ơ数?/div>
2004-09-10 11:48:50
回复? lixiaosan
SPI_SETFOREGROUNDLOCKTIMEOUTQ用于Windows 98和Windows NT 5.0及以后版本。它用来讄在用戯入之后,pȝ止应用E序自p入前台期间的旉长度Q单位ؓ毫秒。参数pvParam讄q个新的旉限度倹{?br />
    SPI_SETGRADIENTCAPTIONSQ用于Windows 98和Windows NT 5.0及以后版本。允许或止H口标题栏有倾斜效果。如果允许则参数pvParam讄为TRUEQ否则设为FALSE。有兛_斜效果斚w更多信息Q请参考GetSysColor函数?br />

    SPI_SETGRIDGRANULARITYQ将桌面~放时网格的颗粒度D|ؓ参数ulParam中的倹{?br />
    SPI_SETHANDHELDQ内部用,应用E序不应使用该倹{?br />
    SPI_SETHIGHCONTRASTQ用于Windows 95及以后版本、Windows NT 5.0及以后版本。设|HighContrast可访问特性的参数。参数pvParam必须指向HIGHCONTRASTl构Q该l构包含新的参数。该l构中的cbSize成员及参数ulParam的D为sizeofQHIGHCONTRASTQ?br />
    SPI_SETICONMETRICSQ设|与图标有关的信息。参数pvParam必须指向包含新参数的ICONMETRICSl构Q另外还要将参数ulParam和该l构中的cbSize成员的D|ؓsizeofQICONMETRICSQ?br />
    SPI_SETICONSQ重新加载系l图标。参数ulParam的值应设ؓ0Q而pvParam参数应设为NULL?br />
    SPI_SETICONTITLELOGFONTQ设|用于图标标题的字体。参数ulParam指定为logfontl构的大,而参数pvParam必须指向一个LOGFONTl构?br />
    SPI_SETICONTITLEWRAPQ打开或关闭图标标题折行功能。若x开折行功能Q则把参数ulParam设ؓTRUEQ否则ؓFALSE?br />
    SPI_SETKEYBOARDDELAYQ设|键盘重复gq。参数ulParam必须指定?Q?Q??。其?表示讄为最短gq(大约 250msQ?Q表C最大gq(大约 1 U)。与每个值对应的实际的gq时间根据硬件情冉|可能有些变化?br />
    SPI_SETKEYBOARDPREFQ用于Windows 95及以后版本、Windows NT 5.0及以后版本,讄键盘优先序。如果用户依赖键盘而不是鼠标,那么可将参数ulParam指定为TRUEQ否则设为FALSEQƈ且要求应用程序显C不隐蔽键盘接口?br />
    SPI_SETKEYBOARDSPEEDQ设|键盘重击键速度。参数ulParam必须指定一个从0?1的|其中0表示讄成最快速度Q大U?0?U)Q?1表示讄为最低速度Q大U???U)Q实际的重速率与硬件有养I而且可能变动q度高达20Q。如果ulParam大于31Q那么该参数仍设|ؓ31?br />
    SPI_SETLANGTOGGLEQؓ输入语言间切换设|热键集。参数ulParam和pvParam不用。该值通过d注册表来讄键盘属性表单中的快捷键。在使用该标志之前必设|注册表Q注册表中的路径?1"=AltQshiftQ?2"=Ctrl+shiftQ?3"=noneQ无Q?br />
    SPI_SETLISTBOXSMOOTHSCROLLINGQ用于Windows 98和Windows NT 5.0及以后版本。允许或不许列表栏有qx滚动效果。参数pvParam讄为TRUE表示允许有^滑滚动效果,为FALSE则表C禁止?br />
    SPI_SETLOWPOWERACTIVEQ激zL关闭低电压屏q保护特性。参数ulParam设ؓ1表示Ȁz,0表示关闭。参数pvParam必须设ؓNULL。对于Windows 98,该标志支?6位和32位应用程序。对于Windows 95Q该标志只支?6位应用程序。对于Windows NTQ该标志只支持NT 5.0及以后版本的32位应用程序,不支?6位应用程序?br />
    SPI_SETLOWPOWERTIMEOUTQ用于设|低电压屏幕保护中的旉|也称时|卛_过某一旉D后自动q行屏幕保护Q,单位为秒。uIParam参数用来指定q个新倹{参数pvParam必须为NULL。对于Windows98Q该标志支持16位和32位应用程序。对于Windows 95Q该标志只支?6位应用程序。对于Windows NT该标志只支持NT 5.0及以后版本的32位应用程序,不支?6位应用程序?br />
    SPI_SETMENUDROPALIGNMENTQ设|弹出或菜单的对齐方式。参数ulParam指定为TRUE时表C是叛_齐,FALSE时ؓ左对齐?br />
    SPI_SETMINIMIZEDMETRICSQ设|与最化H口有关的数据信息,参数pvParam必须指向包含新参数的MINIMIZEDMETRICSl构。该l构中的cbSize成员与ulParam参数的值应设ؓsizeofQMINMIZEDMETRICSQ?br />
    SPI_SETMOUSEQ设|鼠标的两个阀值和加速率。参数pvParam必须指向一个长度ؓ3的数l,以指定这些倹{详l请参考mouse_event?br />
    SPI_SETMOUSEBUTTONSWAPQ调换或恢复鼠标左右按钮的含义,为FALSE时表C恢复原来的含义?br />
    SPI_SETMOUSEHOVERHEGHTQ用于Windows 98和Windows NT 4.0及以后版本。设|鼠标指针停留区域的高度Q以像素为单位。鼠标指针在此区域停留是Z让TrackMouseEvent产生一条WM_MUOSEHOVER消息Q参数ulParam用来讄此高度倹{?/div>
2004-09-10 11:49:17
回复? lixiaosan
SPI_SETMOUSEHOVERTIMEQ用于Windows 98和Windows NT 4.0及以后版本。设|鼠标指针ؓ了让TrackMouseEvent产生WM_MOUSEHOVER事g而在停留区域应停留的旉。该标志只有在将调用dwHoverTime参数中的HOVER_DEFAULTg送到TrackMouseEvent时才使用。参数ulParam讄q个新的旉倹{?br />
    SPI_SETMOUSEHOVERWIDTHQ用于Windows 98和Windows NT 4.0及以后版本。设|鼠标指针停留区域的宽度Q以像素为单位。参数ulParam讄该新倹{?br />
    SPI_SETMOUSEKEYSQ设|MouseKeys易用Ҏ的参数。参数pvParam必须指向包含新参数的MOUSEKEYSl构。结构中的cbSize成员与参数ulParam的值应设ؓsizeofQMOUSEKEYSQ?br />
    SPI_SETMOUSESPEEDQ用于Windows NT 5.0及以后的版本和Windows 98Q设|当前鼠标速度。参数pvParam必须指向一?Q最慢)?0Q最快)之间的整数。缺省值是10。一般可以用鼠标控刉板应用程序来讄该倹{?br />
    SPI_SETMOUSETRAILSQ用于Windows 95及以后版本:允许或禁止有MoouseTrailsQ鼠标轨q)Ҏ。该Ҏ通过短地昄鼠标光标轨迹Qƈq速地擦除它们来提高鼠标的可见度。禁止该Ҏ可参数ulParam设ؓ0?Q允许时,ulParam讄Z个大?的数|该DCq中d的光标个数?br />
    SPI_SETNONCLIENTMETRICSQ设|与非最化H口的非客区有关的数据信息,参数pvParam必须指向NONCLIENTMETRICSl构Q该l构包含新的参数。其成员cbSzie和参数ulParam的值应设ؓsizeofQNONCLIENTMETRICSQ?br />
    SPI_SETPENWINDOWSQ用于Windows 95及以后版本:指定是否加蝲W窗口,当加载时Q参数ulParam设ؓTRUEQ不加蝲时ؓFALSE。参数pvParam为NULL?br />
    SPI_SETPOWEROFFACTIVEQ激zL关闭屏幕保护Ҏ参数。ulParam设ؓ1表示Ȁz,0表示关闭。参数pvParam必须为NULL。对于Windows 98Q该标志支持16位和32位应用程序。对于Windows 95Q该标志只支?6位应用程序。对于Windows NTQ该标志支持Windows NT 5.0及以后版本的32位应用程序,不支?6位应用程序?br />
    SPI_SETPOWEROFFTIMEOUTQ设|用于关闭屏q保护所需的时间|也称时|。参数ulParam指定该倹{参数pvParam必须为NULL。对于Windows 98Q该标志支持16位和32位应用程序。对于Windows 95Q该标志只支?6位应用程序。对于Windows NT,该标志支持Windows NT 5.0及以后版本上?2位应用程序,不支?6位应用程序?br />
    SPI_SETSCREENREADERQ用于Windows 95及以后版本、Windows NT 5.0及以后版本,表示屏幕审阅E序是否q行。参数uiparm指定为TRUE表示q行该程序,FALSE则不q行?br />
    SPI_SETSCREENSAVERRUNNINGQ用于Windows 95及以后版本,内部使用。应用程序不应该使用此标志SPI_SETSETSCREENSAVETIMEOUTQ参数ulParamgؓ屏幕保护器时间限度倹{该值是一个时间量Q以Uؓ单位Q在屏幕保护器激zM前,pȝ应该一直是I闲的,过q个值就Ȁzdq保护器?br />
    SPI_SETSERIALKEYSQ用于Windows 95及以后版本:讄SerialKeys易用Ҏ的参数。参数pvParam必须指向包含新参数的SERIALKEYSl构Q其成员cbSize和参数ulParam应设为sizeofQSERIALKEYSQ?br />
    SPI_SETSHOWSOUNDSQ将ShowSounds易用Ҏ设|ؓ打开或关闭。参数ulParam指定为TRUE时表C打开QFALSE表示关闭?br />
    SPI_SETSNAPTODEFBUTTONQ用于Windows NT 4.0及以后版本、Windows 98。允许或止有snap-to-default-buttonQ蟩转至~省按钮Q特性。如果允许,那么鼠标光标会自动移至缺省按钮上Q例如对话柜中的OK?apply"按钮。参数ulParam设ؓTRUE表示允许该特性,FALSE表示止?br />
    SPI_SETSOUNDSENTRYQ设|SOUNDSENTRY易用Ҏ的参数。参数pvParam必须指向SOUNDSENTRYl构Q该l构包含新参敎ͼ其成员cbSize和参数ulParam的值应设ؓsizeofQSOUNDSENTRYQ?br />
    SPI_SETSTICKYKEYSQ设|stickykeys可访问特性的参数。参数pvParam必须指向包含新参数的stickykeysl构Q其成员cbSize和ulParam参数的D设ؓsizeofQSTICKYKEYSQ?br />
    SPI_SETSWITCHTASKDISABLEQ用于Windows NT 5.0及以后版本,允许或禁止有AltQTab和AltQEscd切换Ҏ。参数ulParam设ؓ1表示允许有该Ҏ,设ؓ0则表C禁止。缺省情况下是允许有d切换Ҏ的?br />
    SPI_SETTOGGLEKEYSQ设|togglekeys可访问特性的参数Q参数PvParam必须指向TOGGLEKEYSl构Q该l构中包含新的参数。其成员cbSize和参数ulParam的D设ؓsizeofQtogglekeysQ?br />
    SPI_SETWHEELSCROOLLLINESQ用于Windows 98和Windows NT 4.O及以后版本。设|当鼠标轨迹球{动时

    要滚动的行数Q滚动的行数是由参数ulParam讄的,该行数是在鼠标轨q球滚动Q井且没有用修攚w时的滚动行数。如果该数gؓ0Q那么不会发生滚动,如果滚动行数比可见到的行数要大,其如果是WHEEL_PAGESCROLLQ#defined sa UINT_MAXQ,那么滚动操作应该被解释成在滚动条的下一|上一区点击一ơ?br />
    SPI_SETWORKAREAQ设|工作区域大。工作区是指屏幕上没有被pȝd栏或桌面应用E序桌面工具遮盖的部分。参数pvParam是一个指针。指向RECTl构Q该l构规定新的矩Ş工作区域Q它是以虚拟屏幕坐标来表辄。在多显C器pȝ中,该函数用来设|包含特定矩形的昄器工作区域。如果PvParam为NULLQ那么该函数主昄器的工作区域设ؓ全屏?/div>
2004-09-10 11:49:38
回复? lixiaosan
ulParamQ与查询或设|的pȝ参数有关。关于系l参数的详情,请参考uiAction参数。否则在没有指明情况下,必须该参数指定为O?br />
    pvParamQ与查询或设|的pȝ参数有关。关于系l参数的详情,请参考uiAction参数。否则在没有指明情况下,必须该参数指定为NULL?br />
    fWinlniQ如果设|系l参敎ͼ则它用来指定是否更新用户配置文gQProfileQ。亦或是否要WM_SETTINGCHANGE消息q播l所有顶层窗口,以通知它们新的变化内容。该参数可以?或下列取g一Q?br />
    SPIF_UPDATEINIFILEQ把新的pȝ参数的设|内容写入用户配|文件?br />
    SPIF_SENDCHANGEDQ在更新用户配置文g之后q播WM_SETTINGCHANGE消息?br />
    SPI_SENDWININICHANGE与 SPIF_SENDCHANGE一栗?br />
    q回|如果函数调用成功Q返回值非Ӟ如果函数调用p|Q那么返回gؓ零。若惌取更多错误信息,误用GetLastError函数?br />
    备注Q该函数一般与应用E序Q例如控刉板一起用。它可以允许用户对WindowsLq行定制?br />
    盘布局名称是从对应于布局?6q制语言标识W引生而来的。例如,国pQU.S.EnglisthQ的语言标识Wؓ" 0×0409"Q则ȝ国英语键盘布局命名?00000409"其他的键盘布局如Dvotak{,命名?00010409"?00020409"{,关于此的列表参见MAKELANGID宏?br />
    Wiows CE操作pȝ只支持下列uiAction|

    SPI_GETBATTERYIDLETIMEOUTQ在WINDOWS CE没有因用h作而挂起之前,q电池电源能坚持l系l供늚旉量可以用该标志得到。以Uؓ单位Q如果pvParam?Q那么该标志被忽略?br />
    SPI_GETEXTERNALIDLETIMEOUTQ在 Windows CE没有因用h作而挂起之前,交流甉|能坚持给pȝ供电旉的时间量可以使用该标志得到。参数pvParam指向一个DWORDcd变量Q以q回旉|单位为秒。如果pvParam?Q那么该标志被忽略?br />
    SPI_GETMOUSEQ检索鼠标的两个阈值和速度?br />
    SPI_GETOEMINFOQ返回一个字W串Q该字符串包含型号和刉商名称。参数ulParam指定为pvParam参数中缓冲区的长度,在成功返回时Q参数pvParam中包含Unicode字符集中的字W串?br />
    SPI_GETPLATFORMTYPEQ返回一个指定Windows CE讑֤cd的字W串Q例?H/PC"。参数ulParam规定pvParam参数~冲区的长度Q后者在成功q回时包含一个Unicode字符集中的字W串。该字符串允许象 H/PC EXPLORER一L应用E序来确定设备类型?br />
    SPI_GETWAKEUPDLETIMEOUTQ在用户通知重新ȀzL个挂L讑֤之后Q可获取的Windows CE延缓响应的时间量。参数pvParam指向一个DWORDcd变量以返回时间|单位为秒。如果pvParamgؓ0那么该标志被忽略?br />
    SPI_GETWORKAREAQ检索工作区大小。工作区是指没有被Q务遮盖的屏幕部分?br />
    SPI_SETBATTERYidletimeoutQ在Windows CE没有因用h作而挂起之前,甉|甉|能坚持给pȝ供电的时间量可以使用该标志来讄。只要键盘或触摸屏处在活动状态(有输入)Q那么Windows CE操作pȝ及电池电源仍工作。参数ulParam指定要设|的旉Q单位ؓU。如果ulParam讄?Q那么该标志被忽略?br />
    SPI_SETEXTERNALIDLETIMEOUTQ在Windows CE没有因用h作而挂起之前,交流甉|能坚持给pȝ供电的时间量可以使用该标志来讄。只要键盘或触摸屏幕处在zd状态,那么Windows CE操作pȝ及AC甉|仍将工作。参数ulParam指定要设|的旉Q单位ؓU。如果ulParam设ؓ0Q那么该标志被忽略。SPL_SETMOUSEQ设|鼠标的两个阈值和速度?br />
    SPI_SETWAKEUPIDLETIMEOUTQ在用户通知重新ȀzL个挂L讑֤之后QWindows CE延缓响应的时间长度量可用该标志来设|。参数ulParam指定q个旉量,单位为秒Q如果ulParam讄?Q那么该标志被忽略?br />
    SPI_SETWORKAREA讄工作区大,工作区是指没有被d条遮盖的屏幕部分。如果用来获取^台类型或OEM信息串的pvParam~冲区太,那么该函C调用p|Qƈ出现错误值ERROR_INSUFFICENT_BUFFER。Windows CE只支持该函数的UNICODE版。Windows CE不支持参数fWinlni的取gؓSPIF_SENDWININICHANGE的情形?/div>


梦在天 2006-11-13 16:47 发表评论
]]>vc 使用ȝhttp://www.shnenglu.com/mzty/archive/2006/05/29/7794.html梦在天梦在天Mon, 29 May 2006 00:52:00 GMThttp://www.shnenglu.com/mzty/archive/2006/05/29/7794.htmlhttp://www.shnenglu.com/mzty/comments/7794.htmlhttp://www.shnenglu.com/mzty/archive/2006/05/29/7794.html#Feedback4http://www.shnenglu.com/mzty/comments/commentRss/7794.htmlhttp://www.shnenglu.com/mzty/services/trackbacks/7794.html 文字传送到剪脓?/strong>


 

让我们想像把一个ANSI字串传送到剪脓上Qƈ且我们已l有了指向这个字串的指标(pString)。现在希望传送这个字串的iLength字元Q这些字元可能以NULLl尾Q也可能不以NULLl尾?/font>

首先Q通过使用GlobalAlloc来配|一个以储存字串的记忆体块Q其中还包括一个终止字元NULLQ?/font>

hGlobal = GlobalAlloc (GHND | GMEM_SHARE, iLength + 1) ;

如果未能配置到记忆体块,hGlobal的值将为NULL 。如果配|成功,则锁定这块记忆体Qƈ得到指向它的一个指标:

pGlobal = GlobalLock (hGlobal) ;

字串复制到记忆体块中:

for (i = 0 ; i < wLength ; i++)
     *pGlobal++ = *pString++ ;

由於GlobalAlloc的GHND旗标已整个记忆体块在配|期间被清除为零Q所以不需要增加结NULL 。以下叙qCؓ记忆体块解锁Q?/font>

GlobalUnlock (hGlobal) ;

现在有了表CZNULLl尾的文字所在记忆体块的记忆体代受ؓ了把它送到剪脓中Q打开剪脓ƈ把它清空Q?/font>

OpenClipboard (hwnd) ;
EmptyClipboard () ;

利用CF_TEXT识别字把记忆体代号交l剪贴簿Q关闭剪贴簿Q?/font>

SetClipboardData (CF_TEXT, hGlobal) ;
CloseClipboard () ;

工作告一D落?/font>


GlobalAlloc 及其?/strong>
从用L角度来看QWIN32的内存管理是非常单和明了的。每一个应用程序都有自q立的4G地址I间Q这U内存模式叫做“^坦”型地址模式Q所有的D寄存器或描q符都指向同L起始地址Q所有的地址偏移都是32位的长度Q这样一个应用程序无d换选择W就可以存取自己的多?G的地址I间。这U内存管理模式是非常z而便于管理的Q而且我们再不用和那些令h讨厌的“near”和“far”指针打交道了。在W16下有两种主要cd的APIQ全局和局部。“全局”的API 分配在其他的D中Q这样从内存角度来看他们是一些“far”(q)函数或者叫q过E调用,“局部”API只要和进E的堆打交道Q所以把它们叫做“near”(q)函数或者近q程调用。而在WIN32中,q两U内存模式是相同的,无论您调用GlobalAllocq是LocalAllocQ结果都是一栗?

至于分配和用内存的q程都是一LQ?

    调用GlobalAlloc函数分配一块内存,该函Cq回分配的内存句柄?
    调用GlobalLock函数锁定内存块,该函数接受一个内存句柄作为参敎ͼ然后q回一个指向被锁定的内存块的指针?
    您可以用该指针来d内存?
    调用GlobalUnlock函数来解锁先前被锁定的内存,该函C得指向内存块的指针无效?
    调用GlobalFree函数来释攑ֆ存块。您必须传给该函C个内存句柄?
    在WIN32中您也可以用“Local”替代内存分配API函数带有“Global”字L函数中的“Global”,也即用LocalAlloc、LocalLock{?br />    在调用函数GlobalAlloc时用GMEM_FIXED标志位可以更q一步简化操作。用了该标志后QGlobal/LocalAllocq回的是指向已分配内存的指针而不是句柄,q样也就不用调用Global/LocalLock来锁定内存了Q释攑ֆ存时只要直接调用Global/LocalFree可以了?/p>


句柄vs指针
句柄是一U指向指针的指针。我们知道,所谓指针是一U内存地址。应用程序启动后Q组成这 
个程序的各对象是住留在内存的。如果简单地理解Q似乎我们只要获知这个内存的首地址Q那么就可以随时用这个地址 讉K对象。但是,如果您真的这栯为,那么您就大错牚w了。我们知道,Windows是一 个以虚拟内存为基的操作系l。在q种pȝ环境下,Windows内存理器经常在内存中来回移动对象,依此来满_U应用程序的内存需要。对象被Ud意味着它的地址变化 了。如果地址L如此变化Q我们该到哪里去找该对象?Z解决q个问题QWindows操作pȝ为各应用E序腑և一些内存储地址Q用来专门 登记各应用对象在内存中的地址变化Q而这个地址(存储单元的位|?本n是不变的。Windows内存理器在Ud对象在内存中的位|后Q把对象新的地址告知q个句柄地址来保存。这h们只需Cq个句柄地址可以间接地知道对象具体在内存中的哪个位|。这个地址是在对象装蝲(Load)时由pȝ分配l的Q当pȝ卸蝲?Unload)又释攄pȝ。句柄地址(E_)→记载着对象在内存中的地址→对象在内存中的地址(不稳?→实际对象。但是,必须注意的是E序每次从新启动Q系l不能保证分配给q个E序的句柄还是原来的那个句柄Q而且l大多数情况的确不一L。假如我们把q入电媄院看电媄看成 是一个应用程序的启动q行Q那么系l给应用E序分配的句柄L不一Pq和每次电 媄院售l我们的门票L不同的一个位是一L道理。?
Debug
某年Q某月,某日?br />为某一个大型程序,增加一个大型功能。编译,q行Q死机?

跟踪之,居然d了如下语句:
CString str;
而且q极不稳定,q次调试dn行,下次调试dm行。但都是和内存申h兟뀂(׃E序很大Q其中频J地甌和释攑ֆ存,多处使用new和CStringQ?/p>

猜测Q一定是内存不够啦,遂在某处调用函数得到当前剩余的物理内存数量ƈ使用MessageBox昄。报告曰Q自q理内存还?00多M。鼠标按下OK键,E序居然不死了。恩Q?Q?/p>

删除MessageBox()函数—死Q加上MessageBox()函数—不死!再删除–死Q再加上–不歅R晕倒!

捏呆呆郁闷不知道多少旉后,灵光闪烁……把多处的new/delete改写为GlobalAlloc()/GlobalFree()Q一切OK?/p>

事后原因分析Q用new和CStringQ频J申P释放内存Q一定生零内存块。当使用MessageBox的时候,pȝ接管E序的运行(因ؓ它在{待着你按OK按纽Q,它这时候开始回收合q这些零的内存块。这L序就没有问题了。而函数GlobalAlloc()/GlobalFree()本n有回收合ƈ零碎内存的功能?/p>

友情提示Q在频繁使用new,CString的场合,把某些(大)数据块的甌用GlobalAlloc替换?br />

c++异常处理
#include<fstream.h>
#include<iostream.h>
#include<stdlib.h>
void main()
{ ifstream source("c:\abc.txt");  //打开文g
 char line[128];
 try //定义异常 
 {if (source.fail())
  throw "txt";  //抛掷异常
 }
 catch(char * s) //定义异常处理
 { cout<<"error opening the file "<<s<<endl;
  exit(1);
 }
 while(!source.eof())
 { source.getline(line, sizeof(line));
  cout<<line<<endl;}
 source.close();
}
///////////////////////////////////////////////////////////
CQ+开发中常见问题

    1Q简qVC6下如何进行程序的调试?/p>

在主菜单"Build"中,有一个Start Build的子菜单Q它下面包含了Go菜单Q快捷键为F5),选择后,E序从当前语句q入调试q行Q直到遇到断ҎE序l束?/p>

鼠标移动到要调试的代码行,单击鼠标右键选择“Insert/Remove Breakpoint”,或者按下F9Q可以在该行上添加断点,此时断点代码行前面出C个棕色的圈,再次选择清除断炏V进入调试状态后QDebug菜单取代Build菜单出现在菜单栏中,它下面包含常用的调试操作Q如Step OverQ单步运行ƈ不跟t到调用的函数内部;其他q包括Step IntoQStep Out, Stop Debugging{调试方法?/p>

    2, q在VC6建立的工E中后缀?cpp,.h,.rc,.dsp,.dsw的文件的作用是什?

.cpp是源E序代码CQ+文g

.h是包含函数声明和变量定义的头文g

.rc是定义资源的资源脚本文g

.dsp是工E文Ӟ记录当前工程的有关信?/p>

.dsw是工作区文gQ一个工作区可能包含一个或多个工程

    3, 已知一个对话框上有一个编辑框控gQID为IDC_EDIT1,为其兌了CEditcd的变量m_edit1,使用两种ҎQ说明如何改变编辑框内部的文本ؓ"Hello"Q写出程序代码的片断?/p>

W一U方法:m_edit1.SetSel(0,-1);           

             m_edit1.ReplaceSel("Hello");    

W二U方法:SetWindowText("Hello");      

    4, qC用Windows API~写的一个基本的Windows应用E序框架的结构?/p>

Windows API~写的基本应用程序框架至应该包含程序入口函数WinMain和窗口函数WndProc。在d数WinMain里面包含H口cȝ定义和注册,H口的创建和昄以及消息循环?/p>

    5, 消息在Windows中的数据cd是什么,它有哪些成员变量Q各有什么含?/p>

消息的数据类型是MSG,它是一个结构体Q其成员变量主要包括hwnd,表示消息的窗口句柄;message代表消息的类型;wParam和lParam包含消息的附加信息,随不同的消息有所不同?/p>

    6, Windows的鼠标消息的长参数lParam与字参数wParam的含义是什?/p>

鼠标消息的长参数lParam的低字节包含了鼠标光标位|的x坐标|lParam的高字节包含了鼠标光标位|的y坐标|字参数wParam内包含了指示当前按下的各U虚键状态的倹{?/p>

    7, 说明使用一个非模态对话框的注意问题和用到的Windows API函数

使用一个非模态对话框应该注意一定要在样式中包含WS_VISIBLE才能正常昄Q创建对话框使用CreateDialog函数Q消息@环部分应该用IsDialogMessageqo消息Q关闭对话框使用函数DestroyWindow?/p>

    8, q在MFC应用E序中UpdateData函数的作用及其参数含义与使用场合?/p>

UpdateData只有一个BOOLcd的参敎ͼUpdateData(FALSE)一般用于对话框控gq接的变量值刷新屏q显C;UpdateData(TRUE)用于获取屏幕数据到对话框控gq接的变量中?/p>

    9, 列D列表框控件能够接受的三个消息cdQƈ说明其作?/p>

LB_ADDSTRING用于在列表框中加入一字W串QLB_DIR用于在列表框中列出指定文ӞLB_GETTEXT用于获取指定的文本?/p>

    10, 在一个对话框上添加了三个单选按钮,要它们之间自动实现互斥Q应该注意什么问题,在VC环境下如何操作?

要实Cl单选按钮的自动互斥Q应该让它们的控件IDDl,q设|第一个单选按钮的Group属性,其他的不设?/p>

    11, q由一个文档类z自己的文档类Qƈ实现文档的存取需要哪些步骤?/p>

首先为每一个文档类型从CDocumentz一个相应的文档c;然后文档cL加成员变量以保存数据Q最后重载Serialize成员函数以实现文档数据的串行化?/p>

    12, 列D视图c?CView)的三个子c,q简要说明其作用?/p>

CScrollViewcL供视囄滚动昄QCEditViewcL持在视图中的文本~辑操作QCHtmlViewcL持在视图中显C和操作html文g?/p>

    13, Visual CQ+ 6.0如何q入调试状态,在调试状态下能够昄哪些调试H口Q列举三个,其作用分别是什?

启动调试后,在View菜单的Debug Window子菜单下可以打开一些辅助调试的H口

Watch:昄察看当前语句和前面语句中变量值的H口

Call StackQ显C察看调用堆栈的H口

MemoryQ显C察看内存中内容的窗?/p>

    14, 说明位图资源的创建及昄q程的步骤,q给出相应的Windows API函数名?/p>

首先定义位图句柄HBITMAP hBitmap;W二步用LoadBitMap加蝲位图Q第三步Q调用CreateCompatibleDC向系l申请内存设备环境句柄,q调用函数SelectObject把位N入内存讑֤环境Q第四步Q调用BitBlt函数位图从内存讑֤环境输出到指定的H口讑֤环境中,从而实现显CZ图?/p>

    15, 如何获取字体句柄从而实现字体的输出Qƈl出相应的Windows API函数名?/p>

首先定义字体句柄变量HFONT hF;然后调用函数GetStockObject获取pȝ的字体句柄,或者调用CreateFont得到自定义的字体句柄Q最后调用SelectObject把字体句柄选入讑֤环境?/p>

    16, 列D三种按钮的类型,q说明其作用和创建方法之间的不同之处?/p>

常用的按钮有普通按钮、单选按钮、复选框Q和l框。普通按钮作用是帮助用户触发指定动作Q单选按钮一般各选项之间存在互斥性;复选框用来昄一l选项供用户选择Q各选项之间不存在互斥;l框主要用于把控件分成不同的lƈ加以说明.

    17, 要一个静态控件显CZ个位囑ƈ能接受用戯入,应该注意什么问题?/p>

要静态控件显CZ图,必须讑֮光格包含SS_BITMAPQƈ在创建静态控件窗口,卌用CreateWindow时指定ƈ加蝲位图Q要佉K态控件能够接收用戯入,必须讑֮光格包含SS_NOTIFY?br />

VC学习W记

VC学习W记1Q按钮的使能与禁?/strong>

用ClassWizard的Member Variables为按钮定义变量,如:m_Button1Q?br />?br />m_Button1.EnableWindow(true); 使按钮处于允许状?br />m_Button1.EnableWindow(false); 使按钮被止Qƈ变灰昄


VC学习W记2Q控件的隐藏与显C?/b>

用CWndcȝ函数BOOL ShowWindow(int nCmdShow)可以隐藏或显CZ个控件?br />
?Q?br />CWnd *pWnd;
pWnd = GetDlgItem( IDC_EDIT1 );    //获取控g指针QIDC_EDIT为控件ID?br />pWnd->ShowWindow( SW_HIDE );    //隐藏控g

?Q?br />CWnd *pWnd;
pWnd = GetDlgItem( IDC_EDIT1 );    //获取控g指针QIDC_EDIT为控件ID?br />pWnd->ShowWindow( SW_SHOW );    //昄控g

以上Ҏ常用于动态生成控Ӟ虽说用控件的Create函数可以动态生成控Ӟ但这U控件很不好控制Q所以用隐藏、显C方法不׃ؓ一U替代手Dc?br />

VC学习W记3Q改变控件的大小和位|?/b>

用CWndcȝ函数MoveWindow()或SetWindowPos()可以改变控g的大和位置?br />
void MoveWindow(int x,int y,int nWidth,int nHeight);
void MoveWindow(LPCRECT lpRect);
W一U用法需l出控g新的坐标和宽度、高度;
W二U用法给出存放位|的CRect对象Q?br />例:
CWnd *pWnd;
pWnd = GetDlgItem( IDC_EDIT1 );    //获取控g指针QIDC_EDIT1为控件ID?br />pWnd->MoveWindow( CRect(0,0,100,100) );    //在窗口左上角昄一个宽100、高100的编辑控?br />
SetWindowPos()函数使用更灵z,多用于只修改控g位置而大不变或只修改大而位|不变的情况Q?br />BOOL SetWindowPos(const CWnd* pWndInsertAfter,int x,int y,int cx,int cy,UINT nFlags);
W一个参数我不会用,一般设为NULL;
x、y控g位置Qcx、cy控g宽度和高度;
nFlags常用取|
SWP_NOZORDERQ忽略第一个参敎ͼ
SWP_NOMOVEQ忽略x、yQ维持位|不变;
SWP_NOSIZEQ忽略cx、cyQ维持大不变;
例:
CWnd *pWnd;
pWnd = GetDlgItem( IDC_BUTTON1 );    //获取控g指针QIDC_BUTTON1为控件ID?br />pWnd->SetWindowPos( NULL,50,80,0,0,SWP_NOZORDER | SWP_NOSIZE );    //把按钮移到窗口的(50,80)?br />pWnd = GetDlgItem( IDC_EDIT1 );
pWnd->SetWindowPos( NULL,0,0,100,80,SWP_NOZORDER | SWP_NOMOVE );    //把编辑控件的大小设ؓ(100,80)Q位|不?br />pWnd = GetDlgItem( IDC_EDIT1 );
pWnd->SetWindowPos( NULL,0,0,100,80,SWP_NOZORDER );    //~辑控g的大和位置都改?br />以上Ҏ也适用于各U窗口?br />

VC学习W记4Q什么时候设定视中控件的初始寸Q?/b>

我在CFormView的视中加入了一个编辑控Ӟ在运行时使它充满客户区,当窗口改变大时它也跟着改变?br />改变控g寸可以攑֜OnDraw()函数中,也可攑֜CalcWindowRect()函数中,当窗口尺寸发生变化时Q它们都被执行Q且CalcWindowRect()函数先于OnDraw()函数Q下例是在CalcWindowRect()函数中修Ҏ件尺寸?br />重蝲VIEWcȝCalcWindowRect函数Q把讑֮控g的尺寸的语句加入q个函数中?br />例:
void CMyEditView::CalcWindowRect(LPRECT lpClientRect, UINT nAdjustType)
{
    // TODO: Add your specialized code here and/or call the base class

    CFrameWnd *pFrameWnd=GetParentFrame(); //获取框架H口指针

    CRect rect;
    pFrameWnd->GetClientRect(&rect); //获取客户区尺?br />
    CWnd *pEditWnd=GetDlgItem(IDC_MYEDIT); //获取~辑控g指针QIDC_MYEDIT为控件ID?br />    pEditWnd->SetWindowPos(NULL,0,0,rect.right,rect.bottom-50,SWP_NOMOVE | SWP_NOZORDER); //讑֮控g寸Qbottom-50是ؓ了让出状态条位置?br />
    CFormView::CalcWindowRect(lpClientRect, nAdjustType);
}


VC学习W记5Q单选按钮控ӞRidio ButtonQ的使用

一、对单选按钮进行分l:
每组的第一个单选按钮设|属性:GroupQTabstopQAuto;其余按钮讄属性TabstopQAuto?br />
如:
Ridio1、Ridio2、Ridio3Zl,Ridio4、Ridio5Zl?br />
讑֮Ridio1属性:GroupQTabstopQAuto
讑֮Ridio2属性:TabstopQAuto
讑֮Ridio3属性:TabstopQAuto

讑֮Ridio4属性:GroupQTabstopQAuto
讑֮Ridio5属性:TabstopQAuto

二、用ClassWizard为单选控件定义变量,每组只能定义一个。如Qm_Ridio1、m_Ridio4?br />
三、用ClassWizard生成各单选按钮的单击消息函数Qƈ加入内容Q?br />
void CWEditView::OnRadio1()
{
    m_Ridio1 = 0;    //W一个单选按钮被选中
}

void CWEditView::OnRadio2()
{
    m_Ridio1 = 1;    //W二个单选按钮被选中
}

void CWEditView::OnRadio3()
{
    m_Ridio1 = 2;    //W三个单选按钮被选中
}

void CWEditView::OnRadio4()
{
    m_Ridio4 = 0;    //W四个单选按钮被选中
}

void CWEditView::OnRadio5()
{
    m_Ridio4 = 1;    //W五个单选按钮被选中
}

四、设|默认按钮:
在定义控件变量时QClassWizard在构造函C会把变量初D?1Q只需把它改ؓ其它值即可?br />如:
//{{AFX_DATA_INIT(CWEditView)
m_Ridio1 = 0;    //初始时第一个单选按钮被选中
m_Ridio4 = 0;    //初始时第四个单选按钮被选中
//}}AFX_DATA_INIT


VC学习W记6Q旋转控ӞSpinQ的使用

当单L转控件上的按钮时Q相应的~辑控gg增大或减。其讄的一般步骤ؓQ?br />一、在对话框中攑օ一个Spin控g和一个编辑控件作为Spin控g的伙伴窗口,
讄Spin控g属性:Auto buddy、Set buddy integer、Arrow keys
讄文本控g属性:Number

二、用ClassWizard为Spin控g定义变量m_SpinQؓ~辑控g定义变量m_EditQ定义时注意要把m_Edit讄为int型?br />
三、在对话框的OnInitDialog()函数中加入语句:
BOOL CMyDlg::OnInitDialog()
{
    CDialog::OnInitDialog();
    
    m_Spin.SetBuddy( GetDlgItem( IDC_EDIT1 ) );    //讄~辑控g为Spin控g的伙伴窗?br />    m_Spin.SetRange( 0, 10 );    //讄数据范围?-10
    return TRUE;
}

四、用ClassWizard为编辑控件添加EN_CHANGE消息处理函数Q再加入语句Q?br />void CMyDlg::OnChangeEdit1()
{
    m_Edit = m_Spin.GetPos();    //获取Spin控g当前?br />}

OK!


VC学习W记7Q程序结束时保存文g问题

在文?视图l构中,用串行化自动保存文g在各UVC书上都有介绍。现在的问题是我不用串行化Q而是自己动手保存Q当点击H口的关闭按钮时Q如何提Cƈ保存文档?br />
用ClassWizard在文档类QCxxDocQ中d函数CanCloseFrame()Q再在其中加入保存文件的语句可以了?br />注:要保存的数据应放在文档类QCxxDocQ或应用E序c(CxxAppQ中Q不要放在视囄中?br />
例:
//退出程?br />BOOL CEditDoc::CanCloseFrame(CFrameWnd* pFrame)
{
    CFile file;
    if(b_Flag)    //b_Flag为文档修Ҏ志,在修Ҏ档时其|ؓTrue
    {
        int t;
        t=::MessageBox(NULL,"文字已经改变Q要存盘吗?","警告",
                MB_YESNOCANCEL | MB_ICONWARNING);    //弹出提示对话?br />        if(t==0 || t==IDCANCEL)
            return false;
        if(t==IDYES)
        {
            CString sFilter="Text File(*.txt)|*.txt||";
            CFileDialog m_Dlg(FALSE,"txt",NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,(LPCTSTR)sFilter,NULL);    //定制文g对话?br />
            int k=m_Dlg.DoModal();    //弹出文g对话?br />            if(k==IDCANCEL || k==0)
                return false;
            m_PathName=m_Dlg.GetPathName();    //获取选择的文件\径名
            
            file.Open(m_PathName,CFile::modeCreate | CFile::modeWrite);
            file.Write(m_Text,m_TextLen);    //数据写入文g
            file.Close();
        }
    }
    return CDocument::CanCloseFrame(pFrame);
}


VC学习W记8QUpdateData()

对于可以接收数据的控Ӟ如编辑控件来_UpdateData()函数臛_重要。当控g内容发生变化Ӟ对应的控件变量的值ƈ没有跟着变化Q同P当控件变量值变化时Q控件内容也不会跟着变?br />UpdateData()函数是解决q个问题的?br />
UpdateData(true);把控件内容装入控件变?br />UpdateData(false);用控件变量的值更新控?br />
如:有编辑控件IDC_EDIT1Q对应的变量为字W串m_Edit1Q?br />1、修改变量值ƈ昄在控件中Q?br />m_Edit1 = _T("l果?0");
UpdateData(false);
2、读取控件的值到变量中:
用ClassWizard为IDC_EDIT1dEN_CHANGE消息处理函数Q?br />void CEditView::OnChangeEdit1()
{
    UpdateData(true);
}
VC实现BMP位图文gl构及^滑羃?/strong>

用普通方法显CBMP位图Q占内存大,速度慢,在图形羃时Q失真严?在低颜色位数的设备上昄高颜色位数的囑Ş囑Ş时失真大。本文采用视频函数显CBMP位图Q可以消除以上的~点?

一、BMP文gl构

1. BMP文gl成

BMP文g由文件头、位图信息头、颜色信息和囑Ş数据四部分组成?

2. BMP文g?

BMP文g头数据结构含有BMP文g的类型、文件大和位图起始位置{信息?

其结构定义如?

typedef struct tagBITMAPFILEHEADER

{

WORDbfType; // 位图文g的类型,必须为BM

DWORD bfSize; // 位图文g的大,以字节ؓ单位

WORDbfReserved1; // 位图文g保留字,必须?

WORDbfReserved2; // 位图文g保留字,必须?

DWORD bfOffBits; // 位图数据的v始位|,以相对于位图

// 文g头的偏移量表C,以字节ؓ单位

} BITMAPFILEHEADER;

3. 位图信息?br />
BMP位图信息头数据用于说明位囄寸{信息?/p>
typedef struct tagBITMAPINFOHEADER{

DWORD biSize; // 本结构所占用字节?br />
LONGbiWidth; // 位图的宽度,以像素ؓ单位

LONGbiHeight; // 位图的高度,以像素ؓ单位

WORD biPlanes; // 目标讑֤的别,必须?

WORD biBitCount// 每个像素所需的位敎ͼ必须?(双色),

// 4(16?Q?(256??4(真彩?之一

DWORD biCompression; // 位图压羃cdQ必L 0(不压~?,

// 1(BI_RLE8压羃cd)?(BI_RLE4压羃cd)之一

DWORD biSizeImage; // 位图的大,以字节ؓ单位

LONGbiXPelsPerMeter; // 位图水^分L率,每米像素?br />
LONGbiYPelsPerMeter; // 位图垂直分L率,每米像素?br />
DWORD biClrUsed;// 位图实际使用的颜色表中的颜色?br />
DWORD biClrImportant;// 位图昄q程中重要的颜色?br />
} BITMAPINFOHEADER;

4. 颜色?/p>

颜色表用于说明位图中的颜Ԍ它有若干个表,每一个表Ҏ一个RGBQUADcd的结构,定义一U颜艌ӀRGBQUADl构的定义如?

typedef struct tagRGBQUAD {

BYTErgbBlue;// 蓝色的亮?D围ؓ0-255)

BYTErgbGreen; // l色的亮?D围ؓ0-255)

BYTErgbRed; // U色的亮?D围ؓ0-255)

BYTErgbReserved;// 保留Q必Mؓ0

} RGBQUAD;

颜色表中RGBQUADl构数据的个数有biBitCount来确?

当biBitCount=1,4,8Ӟ分别?,16,256个表?

当biBitCount=24Ӟ没有颜色表项?br />
位图信息头和颜色表组成位图信息,BITMAPINFOl构定义如下:

typedef struct tagBITMAPINFO {

BITMAPINFOHEADER bmiHeader; // 位图信息?br />
RGBQUAD bmiColors[1]; // 颜色?br />
} BITMAPINFO;

5. 位图数据

位图数据记录了位囄每一个像素|记录序是在扫描行内是从左到?扫描行之间是从下C。位囄一个像素值所占的字节?

当biBitCount=1Ӟ8个像素占1个字?

当biBitCount=4Ӟ2个像素占1个字?

当biBitCount=8Ӟ1个像素占1个字?

当biBitCount=24?1个像素占3个字?

Windows规定一个扫描行所占的字节数必L4的倍数(即以long为单?,不的以0填充Q一个扫描行所占的字节数计方?

DataSizePerLine= (biWidth* biBitCount+31)/8;

// 一个扫描行所占的字节?br />
DataSizePerLine= DataSizePerLine/4*4; // 字节数必L4的倍数

位图数据的大?不压~情况下):

DataSize= DataSizePerLine* biHeight;

二、BMP位图一般显C方?/strong>

1. 甌内存I间用于存放位图文g GlobalAlloc(GHNDQFileLength);

2. 位图文gd所甌内存I间?LoadFileToMemory( mpBitsSrcQmFileName);

3. 在OnPaint{函C用创建显C用位图

用CreateDIBitmap()创徏昄用位图,用CreateCompatibleDC()创徏兼容DC, 用SelectBitmap()选择昄位图?

4. 用BitBlt或StretchBlt{函数显CZ?

5. 用DeleteObject()删除所创徏的位?

以上Ҏ的缺Ҏ: 1)昄速度? 2) 内存占用? 3) 位图在羃显C时囑Şq?(可通过安装字体qx软g来解?; 4) 在低颜色位数的设备上(?56昄模式)昄高颜色位数的囑Ş(如真彩色)囑Şq严重?

三、BMP位图~放昄

用DrawDib视频函数来显CZ图,内存占用,速度快,而且q可以对囑Şq行淡化(Dithering)处理。E化处理是一U图形算法,可以用来在一个支持比囑փ所用颜色要的讑֤上显C彩色图像。BMP位图昄Ҏ如下:

1. 打开视频函数DrawDibOpen()Q一般放在在构造函C

2. 甌内存I间用于存放位图文g

GlobalAlloc(GHNDQFileLength);

3. 位图文gd所甌内存I间?/p>
LoadFileToMemory( mpBitsSrcQmFileName);

4. 在OnPaint{函C用DrawDibRealize()QDrawDibDraw()昄位图

5. 关闭视频函数DrawDibClose(),一般放在在析构函数?/p>

以上Ҏ的优Ҏ: 1)昄速度? 2) 内存占用? 3) ~放昄时图形失真小,4) 在低颜色位数的设备上昄高颜色位数的囑Ş囑Ş时失真小; 5) 通过直接处理位图数据Q可以制作简单动甅R?
四、CViewBimapcȝE要?/strong>

1. 在CViewBimapcMd视频函数{成?

HDRAWDIB m_hDrawDib; // 视频函数

HANDLEmhBitsSrc; // 位图文g句柄(内存)

LPSTR mpBitsSrc; // 位图文g地址(内存)

BITMAPINFOHEADER *mpBitmapInfo; // 位图信息?/td>

2. 在CViewBimapcL造函Cd打开视频函数

m_hDrawDib= DrawDibOpen();

3. 在CViewBimapcL构函Cd关闭视频函数

if( m_hDrawDib != NULL)

{

DrawDibClose( m_hDrawDib);

m_hDrawDib = NULL;

}

4. 在CViewBimapcd形显C函数OnPaint中添加GraphicDraw()

voidCViewBitmap::OnPaint()

{

CPaintDC dc(this); // device context for painting

GraphicDraw( );

}

voidCViewBitmap::GraphicDraw( void )

{

CClientDC dc(this); // device context for painting

BITMAPFILEHEADER *pBitmapFileHeader;

ULONG bfoffBits= 0;

CPoint Wid;

// 囑Ş文g名有?(=0 BMP)

if( mBitmapFileType < ID_BITMAP_BMP ) return;

// 囑Ş文g名有?(=0 BMP)

// 准备昄真彩位图

pBitmapFileHeader= (BITMAPFILEHEADER *) mpBitsSrc;

bfoffBits= pBitmapFileHeader->bfOffBits;

// 使用普通函数显CZ?br />
if( m_hDrawDib == NULL || mDispMethod == 0)

{

HBITMAP hBitmap=::CreateDIBitmap(dc.m_hDC,

mpBitmapInfo, CBM_INIT, mpBitsSrc+bfoffBits,

(LPBITMAPINFO) mpBitmapInfo,DIB_RGB_COLORS);

// 建立位图

HDC hMemDC=::CreateCompatibleDC(dc.m_hDC);// 建立内存

HBITMAP hBitmapOld= SelectBitmap(hMemDC, hBitmap); // 选择对象

// 成员CRect mDispR用于指示囑Ş昄区域的大?

// 成员CPoint mPos用于指示囑Ş昄起始位置坐标.

if( mPos.x > (mpBitmapInfo- >biWidth - mDispR.Width() ))

mPos.x= mpBitmapInfo->biWidth - mDispR.Width() ;

if( mPos.y > (mpBitmapInfo- >biHeight- mDispR.Height()))

mPos.y= mpBitmapInfo- >biHeight- mDispR.Height();

if( mPos.x < 0 ) mPos.x= 0;

if( mPos.y < 0 ) mPos.y= 0;

if( mFullViewTog == 0)

{

// 昄真彩位图

::BitBlt(dc.m_hDC,0,0, mDispR.Width(), mDispR.Height(),

hMemDC,mPos.x,mPos.y, SRCCOPY);

} else {

::StretchBlt(dc.m_hDC,0,0, mDispR.Width(), mDispR.Height(),

hMemDC,0,0, mpBitmapInfo- >biWidth, mpBitmapInfo-

>biHeight, SRCCOPY);

}

// l束昄真彩位图

::DeleteObject(SelectObject(hMemDC,hBitmapOld));

// ????br />
} else {

// 使用视频函数昄位图

if( mPos.x > (mpBitmapInfo- >biWidth - mDispR.Width() ))

mPos.x= mpBitmapInfo- >biWidth - mDispR.Width() ;

if( mPos.y > (mpBitmapInfo- >biHeight- mDispR.Height()))

mPos.y= mpBitmapInfo- >biHeight- mDispR.Height();

if( mPos.x < 0 ) mPos.x= 0;

if( mPos.y < 0 ) mPos.y= 0;

// 昄真彩位图

DrawDibRealize( m_hDrawDib, dc.GetSafeHdc(), TRUE);

if( mFullViewTog == 0)

{

Wid.x= mDispR.Width();

Wid.y= mDispR.Height();

// 1:1 昄? 不能大于囑Ş大小

if( Wid.x > mpBitmapInfo- >biWidth )

Wid.x = mpBitmapInfo- >biWidth;

if( Wid.y > mpBitmapInfo- >biHeight)

Wid.y = mpBitmapInfo- >biHeight;

DrawDibDraw( m_hDrawDib, dc.GetSafeHdc()

, 0, 0, Wid.x, Wid.y,

mpBitmapInfo, (LPVOID) (mpBitsSrc+bfoffBits),

mPos.x, mPos.y, Wid.x, Wid.y, DDF_BACKGROUNDPAL);

} else {

DrawDibDraw( m_hDrawDib, dc.GetSafeHdc(),

0, 0, mDispR.Width(), mDispR.Height(),

mpBitmapInfo, (LPVOID) (mpBitsSrc+bfoffBits),

0, 0, mpBitmapInfo- >biWidth, mpBitmapInfo- >biHeight,

DDF_BACKGROUNDPAL);

}

}

return;

}

五、用CViewBimapcLCBMP位图

1. 在Visual C++5.0中新Z个名UCؓmymap工程文gQ类型ؓMFC AppWizard[exe]。在~译q行通过后,在WorkSpace(如被关闭,用Alt_0打开)点击ResourceViewQ点击Menu左侧?W号展开Menu条目,双击IDR_MAINFRAME条目,q入菜单资源~辑Q在'“查?V)”下拉式菜单(英文版ؓView下拉式菜?的尾部添加“ViewBitmap”条目,其ID为ID_VIEW_BITMAP?

2. 在Visual C++5.0中点M拉式菜单Project- >Add To project- >Files...Q将Bitmap0.h和Bitmap0.cppd到工E文件中?

3. 在Visual C++5.0中按Ctrl_Wq入MFC ClassWizardQ选择cdUCؓCMainFrame,ObjectIDs: ID_VIEW_BITMAPQMessages选择CommandQ然后点击Add Fucction按钮,然后输入函数名ؓOnViewBimap。在dOnViewBimap后,在Member functions: 中点击OnViewBimap条目,点击Edit Code按钮~辑E序代码。代码如?

void CMainFrame::OnViewBitmap()

{

// TODO: Add your command handler code here

CViewBitmap *pViewBitmap= NULL;

pViewBitmap= new CViewBitmap( "BITMAP.BMP", this);

pViewBitmap- >ShowWindow( TRUE);

}

q在该程序的头部d#include "bitmap0.h"Q然后编译运行?

4. 找一个大一点的真彩色的BMP位图Q将它拷贝到BITMAP.BMP中?br />
5. q行Ӟ点击下拉式菜单“查?V)- >ViewBitmap?英文版ؓView- > ViewBitmapQ即可显CBITMAP.BMP位图?br />
六、CViewBimapcd能说?/strong>

1. 在客户区中带有水q_垂直滚动条。在位图大小大于昄客户区时Q可以用滚动条;在位囑֤小于显C客户区或全屏显C时Q滚动条无效?br />
2. 在客户区中底部带有状态条。状态条中的W一gؓ位图信息Q第二格Z图显C方?可以是用普通函数或使用视频函数。在W二格区域内点击鼠标Q可在两者之间接换。第三格Z图显C比例,可以?;1昄或全屏显C。在W三格区域内点击鼠标,可在两者之间接换。在全屏昄Ӟ如果位图比客户区,则对位图攑֤; 如果位图比客户区大,则对位图~小?br />
3. 支持文g拖放功能。可以从资源理器中拖动一个位图文件到客户区,可以显C位图?

E序调试通过后,可以找一个较大的真彩色位图或调整客户区比位图,在全屏显C方式下Q比较用普通函C使用视频函数的差别。可以看出,位图攑֤时两者差别不大,但在位图~小Ӟ两者差别明? 使用视频函数时位囑֤真小Q显C速度快?

q可以从控制面板中将屏幕昄方式从真彩色昄模式切换?56色显C模?再比较用普通函C使用视频函数昄同一个真彩色位图的差别。现在可以体会到使用视频函数的优性了吧?

在全屏显C时Q位囄xy方向比例不相同,如要保持相同比例Q可在显C程序中加以适当调整卛_Q读者可自行完成.

v

梦在天 2006-05-29 08:52 发表评论
]]>
MFC与设计模?/title><link>http://www.shnenglu.com/mzty/archive/2006/05/25/7640.html</link><dc:creator>梦在天</dc:creator><author>梦在天</author><pubDate>Thu, 25 May 2006 05:39:00 GMT</pubDate><guid>http://www.shnenglu.com/mzty/archive/2006/05/25/7640.html</guid><wfw:comment>http://www.shnenglu.com/mzty/comments/7640.html</wfw:comment><comments>http://www.shnenglu.com/mzty/archive/2006/05/25/7640.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/mzty/comments/commentRss/7640.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/mzty/services/trackbacks/7640.html</trackback:ping><description><![CDATA[ <p>This main topic of this article is to show how patterns are used in MFC. We will be seeing the usage of three patterns in MFC library.</p> <h3>Creational : Singleton Pattern</h3> <p>First step in any MFC application is the creation of application object (object of class derived from <code>CWinApp</code>). There should be only one application object in an instance of MFC application. <code>CWinApp</code> is designed to make sure that only application object is present in a given instance. <code>CWinApp</code> and its descendants are called Singleton Classes. <i>A class (<code>CWinApp</code> or its descendant) that assures a maximum of ONE object of its type at a given time and provides a global access point (<code>AfxGetApp()</code> method) to this object is a Singleton class.</i></p> <p>As this principle is applied over and over again to solve recurring object "creational" problems, this becomes a pattern. Singleton Pattern ensures that a class only has one instance and provides a global access point it. The article <a >Creating Singleton Objects using Visual C++</a> talks about different approaches for implementing Singletons.</p> <h3>Structural : Bridge Pattern</h3> <p>Bridge Pattern is all about decoupling an abstraction (interface) from its implementation so that the two can vary independently. In MFC, the process of storing/retrieving an object to/from a persistence mechanism (like a file) is called Serialization. MFC uses the Bridge Pattern to implement Serialization. <code>CArchive</code> and <code>CFile</code> classes implement object Serialization. CArchive class provides the interface for writing/reading an object to/from a persistence mechanism whereas the <code>CFile</code> and its sub classes provides implementation for different persistence mechanisms such as memory, disk file, sockets etc.</p> <p>A <code>CArchive</code> object is configured with an object of class <code>CFile</code> (or a derived class) during its construction, from which it obtains the necessary information for serialization, including the filename and type of the requested operation (a read or write). Client performing the Serialization operation can use CArchive object without regarding the persistence mechanism implemented by <code>CFile</code> classes.</p> <p>The article <a >Bridge Pattern - Bridging the gap between Interface and Implementation</a> talks about Bridge pattern in detail.</p> <h3>Behavioral : Observer Pattern</h3> <p>The Observer Pattern is intended to <i>"Define a one-to-many dependency between objects so that when one object changes state, all its dependents are notified and updated automatically"</i>. An object that is subjected to change is called a <b>Subject</b> and an object that depends on the Subject's state is called an <b>Observer</b>.</p> <p>MFC uses a Document/View variant of the Observer Pattern. MFC's famous Document/View architecture uses this variant. A document contains the data object and acts as a Subject. A view is a window object through which the user updates the document and it acts as an Observer. A document can have multiple views. Whenever the data in the document is changed by one of the views, it updates the document by calling <code>UpdateAllViews</code> method, with optional hint about the modification. To inform about the change to other views, the document object calls <code>OnUpdate</code> method for each view attached to it (except the view that called <code>UpdateAllViews</code>). Derived view classes can override the OnUpdate method and update themselves by querying the data from the document.</p> <p>The article <a >Applying Observer Pattern in C++ Applications</a> talks about Observer pattern in detail.</p> <h2>Summary</h2> <p>Design Pattern provides a common language for designers and helps them to decompose systems into a set of cooperating classes and objects. They provide proven design solution to recurring problems. In this article, I have introduced the design pattern and how MFC is using some of the patterns in its design. We can easily find more and more patterns when we dig into MFC and its classes.</p> <!-- Article Ends --> <img src ="http://www.shnenglu.com/mzty/aggbug/7640.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/mzty/" target="_blank">梦在天</a> 2006-05-25 13:39 <a href="http://www.shnenglu.com/mzty/archive/2006/05/25/7640.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>CBitmap 和CDiBhttp://www.shnenglu.com/mzty/archive/2006/02/20/3348.html梦在天梦在天Mon, 20 Feb 2006 05:41:00 GMThttp://www.shnenglu.com/mzty/archive/2006/02/20/3348.htmlhttp://www.shnenglu.com/mzty/comments/3348.htmlhttp://www.shnenglu.com/mzty/archive/2006/02/20/3348.html#Feedback0http://www.shnenglu.com/mzty/comments/commentRss/3348.htmlhttp://www.shnenglu.com/mzty/services/trackbacks/3348.html阅读全文

梦在天 2006-02-20 13:41 发表评论
]]>
GDI Bitmaps and Device-Independent Bitmaps 操作http://www.shnenglu.com/mzty/archive/2006/02/20/3347.html梦在天梦在天Mon, 20 Feb 2006 05:15:00 GMThttp://www.shnenglu.com/mzty/archive/2006/02/20/3347.htmlhttp://www.shnenglu.com/mzty/comments/3347.htmlhttp://www.shnenglu.com/mzty/archive/2006/02/20/3347.html#Feedback0http://www.shnenglu.com/mzty/comments/commentRss/3347.htmlhttp://www.shnenglu.com/mzty/services/trackbacks/3347.html阅读全文

梦在天 2006-02-20 13:15 发表评论
]]>
MESSAGE MAP相关即ondrowQ)消息调用序http://www.shnenglu.com/mzty/archive/2006/02/20/3346.html梦在天梦在天Mon, 20 Feb 2006 04:50:00 GMThttp://www.shnenglu.com/mzty/archive/2006/02/20/3346.htmlhttp://www.shnenglu.com/mzty/comments/3346.htmlhttp://www.shnenglu.com/mzty/archive/2006/02/20/3346.html#Feedback0http://www.shnenglu.com/mzty/comments/commentRss/3346.htmlhttp://www.shnenglu.com/mzty/services/trackbacks/3346.html阅读全文

梦在天 2006-02-20 12:50 发表评论
]]>
CBitmapButton的?/title><link>http://www.shnenglu.com/mzty/archive/2006/02/17/3307.html</link><dc:creator>梦在天</dc:creator><author>梦在天</author><pubDate>Fri, 17 Feb 2006 06:04:00 GMT</pubDate><guid>http://www.shnenglu.com/mzty/archive/2006/02/17/3307.html</guid><wfw:comment>http://www.shnenglu.com/mzty/comments/3307.html</wfw:comment><comments>http://www.shnenglu.com/mzty/archive/2006/02/17/3307.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.shnenglu.com/mzty/comments/commentRss/3307.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/mzty/services/trackbacks/3307.html</trackback:ping><description><![CDATA[<FONT size=2>CBitmapButton的?BR>       CBitmapButton作ؓMFC的控件类Qƈ不ؓ很多人所使用Q因为现在网上遍布着从CButtonz的各U各L按钮c,其中最名的是CButtonSTcM。但是最q在CSDN上看到几个问题都是用CBitmapButtonc,但是׃使用错误、不当而造成E序崩溃或者错误的。所以ȝ一下CBitmapButtoncȝ使用Q希望能帮助一些初学者?BR>       可以参考MSDN自带的例子“CTRLTEST”学习CBitmapButton的用法。个人ȝ如下Q?nbsp; <BR>1、在资源~辑的时候选中按钮的Owner  draw卛_Q不需要选择Bitmap属性!  <BR>2、在E序中定义一个CBitmapButton成员变量。不能用ClassWizard为按钮映一个CButton变量Q然后改为CBitmapButtonQ这么做q不能将按钮直接映射为CBitmapButtoncȝ对象Q反而会出现初始化错误?nbsp; <BR>3-1、用CBitmapButton::LoadBitmaps装蝲各种状态的囄,使用SubclassDlgItem兌到想要的按钮Q用CBitmapButton::SizeToContent函数使按钮适合囄大小。。注意Loadbitmaps一定要在关联到按钮之前q行Q?nbsp; <BR>3-2、或者是使用CBitmapButton::AutoLoad函数兌到想要的按钮。需要注意:<BR>A、之前不能用CBitmapButton::LoadBitmaps装蝲各种状态的囄Q否则会出错?BR>B、AutoLoad函数完成的关联和改变按钮大小的CBitmapButton::SizeToContent函数的功能?BR>C、CBitmapButton::AutoLoad使用的位图是默认资源ID的,卛_会自动装载相兌源位图。位囄资源ID格式为:"按钮Caption+U"?按钮Caption+D"?按钮Caption+F"?按钮Caption+X"Q分别代表Up、Down、Focus、Disable状态。如资源~辑Ӟ希望兌的按钮的Caption为TestQ那么其默认装蝲的位图资源的ID为:"TestU"/"TestD"/"TestF"/"TestX"Q注意分?"也是其ID的一部分?/FONT><img src ="http://www.shnenglu.com/mzty/aggbug/3307.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/mzty/" target="_blank">梦在天</a> 2006-02-17 14:04 <a href="http://www.shnenglu.com/mzty/archive/2006/02/17/3307.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>CString详细讲解http://www.shnenglu.com/mzty/archive/2006/02/07/3105.html梦在天梦在天Tue, 07 Feb 2006 10:47:00 GMThttp://www.shnenglu.com/mzty/archive/2006/02/07/3105.htmlhttp://www.shnenglu.com/mzty/comments/3105.htmlhttp://www.shnenglu.com/mzty/archive/2006/02/07/3105.html#Feedback5http://www.shnenglu.com/mzty/comments/commentRss/3105.htmlhttp://www.shnenglu.com/mzty/services/trackbacks/3105.html阅读全文

梦在天 2006-02-07 18:47 发表评论
]]>
Porting Visual C++ Code to Visual Studio 2005http://www.shnenglu.com/mzty/archive/2006/01/25/3024.html梦在天梦在天Wed, 25 Jan 2006 08:58:00 GMThttp://www.shnenglu.com/mzty/archive/2006/01/25/3024.htmlhttp://www.shnenglu.com/mzty/comments/3024.htmlhttp://www.shnenglu.com/mzty/archive/2006/01/25/3024.html#Feedback0http://www.shnenglu.com/mzty/comments/commentRss/3024.htmlhttp://www.shnenglu.com/mzty/services/trackbacks/3024.html阅读全文

梦在天 2006-01-25 16:58 发表评论
]]>
Windows API 技巧集http://www.shnenglu.com/mzty/archive/2006/01/25/3023.html梦在天梦在天Wed, 25 Jan 2006 08:19:00 GMThttp://www.shnenglu.com/mzty/archive/2006/01/25/3023.htmlhttp://www.shnenglu.com/mzty/comments/3023.htmlhttp://www.shnenglu.com/mzty/archive/2006/01/25/3023.html#Feedback0http://www.shnenglu.com/mzty/comments/commentRss/3023.htmlhttp://www.shnenglu.com/mzty/services/trackbacks/3023.html阅读全文

梦在天 2006-01-25 16:19 发表评论
]]>
单好用的dini文g的类http://www.shnenglu.com/mzty/archive/2006/01/17/2829.html梦在天梦在天Tue, 17 Jan 2006 06:09:00 GMThttp://www.shnenglu.com/mzty/archive/2006/01/17/2829.htmlhttp://www.shnenglu.com/mzty/comments/2829.htmlhttp://www.shnenglu.com/mzty/archive/2006/01/17/2829.html#Feedback7http://www.shnenglu.com/mzty/comments/commentRss/2829.htmlhttp://www.shnenglu.com/mzty/services/trackbacks/2829.html阅读全文

梦在天 2006-01-17 14:09 发表评论
]]>
x对话?/title><link>http://www.shnenglu.com/mzty/archive/2006/01/14/2725.html</link><dc:creator>梦在天</dc:creator><author>梦在天</author><pubDate>Sat, 14 Jan 2006 02:03:00 GMT</pubDate><guid>http://www.shnenglu.com/mzty/archive/2006/01/14/2725.html</guid><wfw:comment>http://www.shnenglu.com/mzty/comments/2725.html</wfw:comment><comments>http://www.shnenglu.com/mzty/archive/2006/01/14/2725.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/mzty/comments/commentRss/2725.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/mzty/services/trackbacks/2725.html</trackback:ping><description><![CDATA[  有一个未公开的API来实现这个功能,是在Shell32.dll中,但没有名字,索引号ؓ60。下面是调用ҎQ?nbsp;<BR>   <DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><IMG src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #000000">  typedef </SPAN><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000"> (CALLBACK </SPAN><SPAN style="COLOR: #000000">*</SPAN><SPAN style="COLOR: #000000">SHUTDOWNDLG) (</SPAN><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000">); <BR><IMG src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align=top>     <BR><IMG src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align=top>    </SPAN><SPAN style="COLOR: #0000ff">void</SPAN><SPAN style="COLOR: #000000"> CDlgDlg::OnOK() <BR><IMG id=Codehighlighter1_82_367_Open_Image onclick="this.style.display='none'; Codehighlighter1_82_367_Open_Text.style.display='none'; Codehighlighter1_82_367_Closed_Image.style.display='inline'; Codehighlighter1_82_367_Closed_Text.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_82_367_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_82_367_Closed_Text.style.display='none'; Codehighlighter1_82_367_Open_Image.style.display='inline'; Codehighlighter1_82_367_Open_Text.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ContractedBlock.gif" align=top>    </SPAN><SPAN id=Codehighlighter1_82_367_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.shnenglu.com/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_82_367_Open_Text><SPAN style="COLOR: #000000">{ <BR><IMG src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align=top>     CString s; <BR><IMG src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align=top>     <BR><IMG src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align=top>     HINSTANCE hInst </SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000"> LoadLibrary(</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">shell32</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">); <BR><IMG src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align=top>     SHUTDOWNDLG SHShutDownDialog; <BR><IMG src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align=top>     <BR><IMG src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align=top>     </SPAN><SPAN style="COLOR: #0000ff">if</SPAN><SPAN style="COLOR: #000000">(hInst </SPAN><SPAN style="COLOR: #000000">!=</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #000000">0</SPAN><SPAN style="COLOR: #000000">) <BR><IMG id=Codehighlighter1_224_360_Open_Image onclick="this.style.display='none'; Codehighlighter1_224_360_Open_Text.style.display='none'; Codehighlighter1_224_360_Closed_Image.style.display='inline'; Codehighlighter1_224_360_Closed_Text.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_224_360_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_224_360_Closed_Text.style.display='none'; Codehighlighter1_224_360_Open_Image.style.display='inline'; Codehighlighter1_224_360_Open_Text.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ContractedSubBlock.gif" align=top>     </SPAN><SPAN id=Codehighlighter1_224_360_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.shnenglu.com/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_224_360_Open_Text><SPAN style="COLOR: #000000">{ <BR><IMG src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align=top>     SHShutDownDialog </SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000"> (SHUTDOWNDLG)GetProcAddress(hInst, (LPSTR)</SPAN><SPAN style="COLOR: #000000">60</SPAN><SPAN style="COLOR: #000000">); <BR><IMG src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align=top>     (</SPAN><SPAN style="COLOR: #000000">*</SPAN><SPAN style="COLOR: #000000">SHShutDownDialog)(</SPAN><SPAN style="COLOR: #000000">0</SPAN><SPAN style="COLOR: #000000">); <BR><IMG src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align=top>     FreeLibrary(hInst); <BR><IMG src="http://www.shnenglu.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>     }</SPAN></SPAN><SPAN style="COLOR: #000000"> <BR><IMG src="http://www.shnenglu.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>    }</SPAN></SPAN><SPAN style="COLOR: #000000"> <BR><IMG src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align=top></SPAN></DIV><img src ="http://www.shnenglu.com/mzty/aggbug/2725.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/mzty/" target="_blank">梦在天</a> 2006-01-14 10:03 <a href="http://www.shnenglu.com/mzty/archive/2006/01/14/2725.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>c++ file and directory 删除Q移动,目录览对话框,找某目录下的所有文Ӟ包括子目录)http://www.shnenglu.com/mzty/archive/2006/01/12/2683.html梦在天梦在天Thu, 12 Jan 2006 06:52:00 GMThttp://www.shnenglu.com/mzty/archive/2006/01/12/2683.htmlhttp://www.shnenglu.com/mzty/comments/2683.htmlhttp://www.shnenglu.com/mzty/archive/2006/01/12/2683.html#Feedback4http://www.shnenglu.com/mzty/comments/commentRss/2683.htmlhttp://www.shnenglu.com/mzty/services/trackbacks/2683.html阅读全文

梦在天 2006-01-12 14:52 发表评论
]]>
vc技?http://www.shnenglu.com/mzty/archive/2006/01/12/2674.html梦在天梦在天Thu, 12 Jan 2006 05:56:00 GMThttp://www.shnenglu.com/mzty/archive/2006/01/12/2674.htmlhttp://www.shnenglu.com/mzty/comments/2674.htmlhttp://www.shnenglu.com/mzty/archive/2006/01/12/2674.html#Feedback0http://www.shnenglu.com/mzty/comments/commentRss/2674.htmlhttp://www.shnenglu.com/mzty/services/trackbacks/2674.html阅读全文

梦在天 2006-01-12 13:56 发表评论
]]>
vc中常用的Ҏhttp://www.shnenglu.com/mzty/archive/2005/12/29/2250.html梦在天梦在天Thu, 29 Dec 2005 09:12:00 GMThttp://www.shnenglu.com/mzty/archive/2005/12/29/2250.htmlhttp://www.shnenglu.com/mzty/comments/2250.htmlhttp://www.shnenglu.com/mzty/archive/2005/12/29/2250.html#Feedback0http://www.shnenglu.com/mzty/comments/commentRss/2250.htmlhttp://www.shnenglu.com/mzty/services/trackbacks/2250.html阅读全文

梦在天 2005-12-29 17:12 发表评论
]]>
vc中读写注册表http://www.shnenglu.com/mzty/archive/2005/12/24/2046.html梦在天梦在天Sat, 24 Dec 2005 06:40:00 GMThttp://www.shnenglu.com/mzty/archive/2005/12/24/2046.htmlhttp://www.shnenglu.com/mzty/comments/2046.htmlhttp://www.shnenglu.com/mzty/archive/2005/12/24/2046.html#Feedback1http://www.shnenglu.com/mzty/comments/commentRss/2046.htmlhttp://www.shnenglu.com/mzty/services/trackbacks/2046.html阅读全文

梦在天 2005-12-24 14:40 发表评论
]]>
vc中打开exe文ghttp://www.shnenglu.com/mzty/archive/2005/12/24/2045.html梦在天梦在天Sat, 24 Dec 2005 06:38:00 GMThttp://www.shnenglu.com/mzty/archive/2005/12/24/2045.htmlhttp://www.shnenglu.com/mzty/comments/2045.htmlhttp://www.shnenglu.com/mzty/archive/2005/12/24/2045.html#Feedback0http://www.shnenglu.com/mzty/comments/commentRss/2045.htmlhttp://www.shnenglu.com/mzty/services/trackbacks/2045.html阅读全文

梦在天 2005-12-24 14:38 发表评论
]]>
Visual C++.NET?字符串{换方?/title><link>http://www.shnenglu.com/mzty/archive/2005/12/23/2000.html</link><dc:creator>梦在天</dc:creator><author>梦在天</author><pubDate>Fri, 23 Dec 2005 04:52:00 GMT</pubDate><guid>http://www.shnenglu.com/mzty/archive/2005/12/23/2000.html</guid><wfw:comment>http://www.shnenglu.com/mzty/comments/2000.html</wfw:comment><comments>http://www.shnenglu.com/mzty/archive/2005/12/23/2000.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/mzty/comments/commentRss/2000.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/mzty/services/trackbacks/2000.html</trackback:ping><description><![CDATA[     摘要:   <a href='http://www.shnenglu.com/mzty/archive/2005/12/23/2000.html'>阅读全文</a><img src ="http://www.shnenglu.com/mzty/aggbug/2000.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/mzty/" target="_blank">梦在天</a> 2005-12-23 12:52 <a href="http://www.shnenglu.com/mzty/archive/2005/12/23/2000.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>VC ?MFC 的一些常见问?msdn)http://www.shnenglu.com/mzty/archive/2005/12/15/1767.html梦在天梦在天Thu, 15 Dec 2005 01:30:00 GMThttp://www.shnenglu.com/mzty/archive/2005/12/15/1767.htmlhttp://www.shnenglu.com/mzty/comments/1767.htmlhttp://www.shnenglu.com/mzty/archive/2005/12/15/1767.html#Feedback0http://www.shnenglu.com/mzty/comments/commentRss/1767.htmlhttp://www.shnenglu.com/mzty/services/trackbacks/1767.html阅读全文

梦在天 2005-12-15 09:30 发表评论
]]>
The future of WTLhttp://www.shnenglu.com/mzty/archive/2005/11/16/1162.html梦在天梦在天Wed, 16 Nov 2005 08:00:00 GMThttp://www.shnenglu.com/mzty/archive/2005/11/16/1162.htmlhttp://www.shnenglu.com/mzty/comments/1162.htmlhttp://www.shnenglu.com/mzty/archive/2005/11/16/1162.html#Feedback0http://www.shnenglu.com/mzty/comments/commentRss/1162.htmlhttp://www.shnenglu.com/mzty/services/trackbacks/1162.html

The future of WTL

Interestingly, Pranish Kumar posted to the WTL discussion group on yahoo trying to gain opinions on how MS could best support the WTL developer community. You can find his message there, and I've copied my reply to him below:


> and the addition of knowledgeable support personnel to the Microsoft 
> official support channels.

 

I think it would be a great start for Microsoft to provide some form of officially sanctioned discussion forum. Yahoo groups is advertising supported, incredibly irritating to use (IMHO) and extremely unprofessional. I think microsoft could at least fund the provision of a mailing list / news group combination (with web archives) that would give people a little more confidence in believing that microsoft aren't ignoring WTL.

> There would also likely be significant
> changes to the library itself as we moved it forward to the latest
> version of ATL and the compiler. 

Hopefully this will happen - I'm sure nobody here wants to be unable to use WTL with the new ATL. If Nenad has managed before, surely it doesn't cost you _that much_ to do this.

> Related to this the team is investigating various ways that we can
> improve the experience for WTL users without incurring the
> prohibitive overhead. Some of the possibilities we are investigating
> include modifying the licensing for WTL so that the WTL community
> could support itself with a shared-source project.

Shared-source: please define.

Ignoring the precise definition of this term, some form of open development (a product able to live without Nenad - god forbid) could be important so that WTL can live on beyond the interest-span of one developer. However, a complete Open Source project could turn into a nightmare unless it is properly managed. Many open source projects suffer from the old "too many chefs spoil the broth" problem. A project like WTL could be especially succeptible to this because it is highly technical underneath the polished cover.

What would be ideal (it seems to me) would be some form of public project sponsored by microsoft - a web site explaining it, proper discussion groups and somewhere that community members can post examples etc. Contributions of source would be welcome from community members, but would have to be approved by a few key developers (preferably members of the MS ATL/MFC team). This retains some level of quality control, but doesn't suffer from the speed and cost problems of product-izing WTL.

Somebody else mentioned code documentation - I would like to add my voice to that plea. Some form of standardised code commenting mechanism that could be parsed with either Doxygen or NDoc or equivalent would be particularly helpful in providing better WTL documentation.

Just my two english pence,


Simon.

Posted by Simon at April 14, 2003 02:21 PM


梦在天 2005-11-16 16:00 发表评论
]]> 㽶aaþëƬ| þùѾƷ| þҹҹ³³ƬӰ| ۺϾþþƷ| ˮϵþþƷ| ݺݾþۺ˲| Ʒþþþþ| 99Ʒþþþþþ| ձþþվ| þù׾Ʒǿ| þþþ߽ۺϳ| ۺϳ˾þôƬ91| ۲˾þþƷٸAV| þAٸ۲ӰԺ| ƷþĻ| ŷ˾þô߽ۺ| þþþ99ƷƬţţӰ| þþƷĻ̾| ŷaƬѿþ| þþƷ91þ鶹 | ҹƷƬþ| þAV߳AVAV| һþöۺ| ۺϾþþþþ| 鶹˾þþƷ| Ļþһ| ھƷþþþþþӰ鶹| þþþŮ˾ƷëƬ| avԾþþþa| ƷþþþaӰԺ| þþþþƵ| ɫ99þþþø߳ۺӰԺ| þþþƷþþþþ| Ʒ99þò| ۺϾþþþþ| ھƷ99þ| 18պҹþó| ھƷþþþӰԺ| ձƷþþĻ| 91þó| þþƷƷް |