C.Young @ XiCabin

Saturday, August 12, 2006

Programming tips

1。MFC中的__argc, char *__argv[]

2。关于函数参数:
ULONGULONG a;
int b;
...
printf( "%d%d", a, b );
结果会出错。
入栈的时候a的大小是sizeof(ULONGULONG) = 64bytes,
printf处理时遇到%d时读sizeof(int) = 32bytes,
So...

3。CFileFind遍历文件:
CFileFind f;
CString strMsg;
// 指定扩展名为.style
strMsg.Format( _T("%s\\*.style"), m_strPath );
if ( f.FindFile( strMsg ) )
{
// CFileFind是这么用的吗?
while ( f.FindNextFile() )
{
// f.GetFileTitle()获得文件名,没有扩展名
m_comboStyle.AddString( f.GetFileTitle() );
}
m_comboStyle.AddString( f.GetFileTitle() );
}
看起来很奇怪,不知道是不是这么用。

4。显示右键菜单:
POINT pos;
CMenu menu;
menu.LoadMenu( IDR_MENU1 );
GetCursorPos( &pos );
menu.GetSubMenu( 0 )->TrackPopupMenu( TPM_LEFTALIGN | TPM_LEFTBUTTON,
pos.x, pos.y, this );

5。让程序不让在任务栏出现:
VS2003中对话框的Application window属性指定是否在任务栏出现,和tool window一起使用

6。改变菜单属性:
注意CMenu的作用域。

7。处理OnSize时的问题:
RECT rect;
GetClientRect( &rect );
if ( IsWindow( m_listMain.GetSafeHwnd() ) )
{
m_listMain.MoveWindow( &rect );
}

8。多线程和定时器可以互换?

9。CAFEdit 控件的问题
AFEdit.cpp,167行,122
if( isspace( sBuffer.GetAt(x-1)) )
==>
if( (unsigned)sBuffer.GetAt(x-1) <= 255 && isspace( sBuffer.GetAt(x-1)) )
否则输入汉字的时候有问题

10。MFC注册热键问题
似乎没有相应的宏,用:
ON_MESSAGE(WM_HOTKEY, OnHotkeyNotification)
...
afx_msg LRESULT CGUICmdDlg::OnHotkeyNotification(WPARAM wp, LPARAM lp)
{
AfxMessageBox( _T("!!!") );
return LRESULT(0);
}

11。SDI中用ListView的问题
BOOL CHelloListViewView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: 在此处通过修改 CREATESTRUCT cs 来修改窗口类或
// 样式
cs.style |= LVS_REPORT;

return CListView::PreCreateWindow(cs);
}

void CHelloListViewView::OnInitialUpdate()
{
CListView::OnInitialUpdate();

// TODO: 调用 GetListCtrl() 直接访问 ListView 的列表控件,
// 从而可以用项填充 ListView。
CListCtrl &list = GetListCtrl();
list.InsertColumn( 0, _T("Hello") );
}

12。初始化对话框时指定焦点
可以在设计对话框时用Ctrl+D,指定,而不用在OnInitDialog中用SetFocus

13。CreateProcess时输入输出管道可以使文件句柄,管道句柄,SOCKET句柄!

14。画对话框时有多个GROUP,每个GROUP中都有Radio button。
将GROUP的group选项设成TRUE!?
然后Ctrl+D,将GROUP和Radio-button的值设成连续。

15。CListCtrl删除所有列和项。
似乎没有删除所有列的函数
list.DeleteAllItems();
LVCOLUMN col;
col.mask = LVCF_WIDTH;
while( list.GetColumn( 0, &col ) )
{
list.DeleteColumn( 0 );
}

16。有了phpMyAdmin,生活好轻松

17。php函数的参数,不要传递不同类型的变量给同一个参数,否则会出现很恶心的问题。

18。释放内存
HBITMAP hBitmap = CaptureDesktop();
m_ctrlPic.SetBitmap( hBitmap );
::DeleteObject( hBitmap );// 重要啊

20。WM_COPYDATA
用IDE实现映射会导致无法编译?
重载virtual int OnCopyData(CWnd *pWnd, COPYDATASTRUCT *pCopyDataStruct);
再添加ON_WM_COPYDATA
用SendMessage
测试的时候不要用SendMessage(hwnd, WM_COPYDATA, 0L, 0L);不会成功的

21. CListCtrl
选择整行: CListCtrl::SetExtendedStyle( LVS_EX_FULLROWSELECT );
显示网格: LVS_EX_GRIDLINES
CheckBox: LVS_EX_CHECKBOXES

0 Comments:

Post a Comment

<< Home