Saturday, August 12, 2006

Programming tips

1. 向文档视图结构中的DialogBar中的Button添加ICON
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
static_cast<CButton *>( m_wndDlgBar.
GetDlgItem( IDC_BUTTON_LEND ) )->
SetIcon( AfxGetApp()->LoadIcon( IDR_MAINFRAME ) );
}
似乎要添加了时间处理函数后才看得到?
另:不要为DialogBar创建Dialog类,处理Button的消息可在其他类中处理

2. DECLARE_MESSAGE_MAP后面是protected!

3. javascript刷新父窗口
<body onUnload="javascript: window.opener.location.reload();"
>

4. STL: 用sstream的ostringstream实现format

5. Font:
m_font.CreateFont(
nHeight, // nHeight
0, // nWidth
0, // nEscapement
0, // nOrientation
FW_NORMAL, // nWeight
FALSE, // bItalic
FALSE, // bUnderline
0, // cStrikeOut
ANSI_CHARSET, // nCharSet
OUT_DEFAULT_PRECIS, // nOutPrecision
CLIP_DEFAULT_PRECIS, // nClipPrecision
DEFAULT_QUALITY, // nQuality
DEFAULT_PITCH FF_SWISS, // nPitchAndFamily
"Arial");

6. 获得CListCtrl列的个数
GetHeaderCtrl()->GetItemCount();

7. 运行时类型判断
if ( pMapStr->IsKindOf( RUNTIME_CLASS(CStringArray)) )
{
AfxMessageBox( _T("!") );
}

8. 向资源里添加GIF,
IDR_MYPIC GIF DISCARDABLE "res\\face.gif"
9. ScreenToClient & ClientToScreen
RECT rectLeft;
m_pWndLeft->GetWindowRect( &rectLeft );
ScreenToClient( &rectLeft );
rectLeft.top++;
ClientToScreen( &rectLeft );
m_pWndLeft->MoveWindow( &rectLeft );
10.CFileFind, 不理解
CFileFind finder;

// build a string with wildcards
CString strWildcard(pstr);
strWildcard += _T("\\*.*");

// start working for files
BOOL bWorking = finder.FindFile(strWildcard);

while (bWorking)
{
bWorking = finder.FindNextFile();

// skip . and .. files; otherwise, we'd
// recur infinitely!

if (finder.IsDots())
continue;

// if it's a directory, recursively search it

if (finder.IsDirectory())
{
CString str = finder.GetFilePath();
cout << (LPCTSTR) str << endl;
Recurse(str);
}
}

finder.Close();
11. <input name="submit" type="submit" value="OK"
onClick="javascript: return confirm('hello');">

12. CListBox 选中列
SetCurSel();// 单选择
SetSel();// 多选择时有效

13. CRichEditView 只粘贴文本
HRESULT CMySQLEditorView::QueryAcceptData(
LPDATAOBJECT lpdataobj,
CLIPFORMAT* lpcfFormat,
DWORD dwReco,
BOOL bReally,
HGLOBAL hMetaFile)
{// paste text only
if (bReally && *lpcfFormat == 0 && (m_nPasteType == 0))
{
COleDataObject dataobj;
dataobj.Attach(lpdataobj, FALSE);
if (dataobj.IsDataAvailable(CF_TEXT))

{// richedit do as it wants
return S_OK;
}
}
return S_FALSE;
}

14. 调整Combo Box高度
把鼠标放在下拉按钮上,当鼠标变成上下箭头的时候点一下

15. CTreeCtrl : 设置粗体
tree.SetItemState( hRoot, TVIS_BOLD, TVIS_BOLD );// set bold
tree.SetItemState( hRoot, ~TVIS_BOLD, TVIS_BOLD );// reset bold

16. CTreeCtrl : 右键菜单,设置选择项
void CLeftView::OnNMRclick(NMHDR *pNMHDR, LRESULT *pResult)
{
*pResult = 0;
UINT uFlags;
CPoint pt;
CTreeCtrl & tree = GetTreeCtrl();
GetCursorPos( &pt );// get mouse position
tree.ScreenToClient( &pt );// convert to client position
HTREEITEM hItem = tree.HitTest( pt, &uFlags );
// hit test, if an item is selected
if( (hItem != NULL) && (TVHT_ONITEM & uFlags) )
tree.SelectItem( hItem );// if true, select item
tree.ClientToScreen( &pt );// convert to windows position
m_menu.GetSubMenu( 1 )->TrackPopupMenu( TPM_LEFTALIGN
 TPM_LEFTBUTTON, pt.x, pt.y,
 this );// display menu
}

17. TPM_NONOFIFY TPM_RETURNCMD
UINT nSelected = menu.TrackPopupMenu( TPM_LEFTALIGN
 TPM_LEFTBUTTON  TPM_NONOTIFY  
TPM_RETURNCMD, pt.x, pt.y, this );
返回选择项

18. CView::OnDraw是纯虚函数!

19. CTreeCtrl 删除所有子节点
tree.Expand( hRoot, TVE_COLLAPSE TVE_COLLAPSERESET );

No comments: