我的学习环境:
WinXP + Visual C++ 6.0本来应该昨天写这东西的,遇到个问题找了好长时间,今天才解决!感觉现在学习VC有点小眉目了,找了一些小的技巧,继续努力哦,还有好多东西没有完成!路漫漫,坚持!
=============================
怎么将CString类型转换为:LPTSTRCSDN上有一个这样的贴:
但我测试后只有这样好用:
CString str;
// ... Other Code for Get str Values
// Add a New Node0
TVINSERTSTRUCT tvInsert;
tvInsert.hParent = NULL;
tvInsert.hInsertAfter = NULL;
tvInsert.item.mask = TVIF_TEXT;
tvInsert.item.iImage = IDB_SNAPETCL_NODE0 - IDB_BASE;
tvInsert.item.iSelectedImage = tvInsert.item.iImage;
tvInsert.item.pszText =
str.GetBuffer(str.GetLength()); GetTreeCtrl().InsertItem(&tvInsert);
str.ReleaseBuffer();=============================
String Table中的内容怎么使用: 如果你使用SDK方式编程,可以使用LoadString()函数,其中的ID参数就是资源中的代码。
如果使用MFC方式编程,可以使用
CString::LoadString()函数,它的参数就是资源中的代码。
=============================
CTreeCtrl上添加图标:看到这么用的:
CTreeCtrl& cThisTree = GetTreeCtrl();
// load bitmaps for drive types & desktop - ten images
CBitmap bitmap;
m_pImageList = new CImageList(); // 16x16 pixels, 8 of them m_pImageList->Create(16, 16, TRUE, 8, 4);/*
#define IDB_REMOVE 200
#define IDB_FIXED 201
#define IDB_REMOTE 202
#define IDB_CD 203
#define IDB_DESKTOP 204
#define IDB_FOLDCLS 205
#define IDB_FOLDOPEN 206
#define IDB_DOC 207
*/
// the 8 images have conseq resource numbers
// see resource.h
for( int i = IDB_REMOVE; i <= IDB_DOC; i++) { bitmap.LoadBitmap( i ); m_pImageList->Add( &bitmap, (COLORREF)0xFFFFFF); bitmap.DeleteObject(); } cThisTree.SetImageList( m_pImageList, TVSIL_NORMAL ); TV_INSERTSTRUCT strInsert;
// must use a selectedimage even if same
strInsert.item.mask = TVIF_TEXT |
TVIF_IMAGE |
TVIF_SELECTEDIMAGE;
// a root item - so parent is NULL
strInsert.hParent = NULL;
// index of the image in the list
strInsert.item.iImage = IDB_DESKTOP - IDB_REMOVE; strInsert.item.iSelectedImage = strInsert.item.iImage; // force to "Desktop" - the real Explorer uses the
// registry-based items (like "Computer")
strInsert.item.pszText = (LPSTR)"Desktop";
HTREEITEM hDesktop = cThisTree.InsertItem(&strInsert);
奇怪的是到我这
strInsert.item.iImage = IDB_DESKTOP - IDB_REMOVE;
strInsert.item.iSelectedImage = strInsert.item.iImage;
怎么用
就是不起作用,没办法用SetItemImage()了。
理解了原来哪个CImageList::Create中16, 16是在资源管理中的一个个象素点;
16,16就是16x16个象素的小图标了。=========================
VC中的输入提示好就是好,用习惯了,突然不用还不知道怎么写代码了。目前发现有一点感觉不爽,如str.LoadString()的输入会自动提示:(UINT nID),但是吧,按照编码规范上来说象()这个符号一般最好是成对输入的所以就以下子输入(),但结果提示就没有了。
好可惜,不懂的时候还得改变自己习惯的编码规范。
=========================
VC Debug输出显示技巧:看来自己多半会选择单步Debug和TRACE输出(用在需要大量输出的时候比较合适)了,再就是MessageBox()了。
=========================
自定义消息的实现:
http://www.cppblog.com/xpzhou/archive/2007/04/18/22185.html自己实践了,但总出问题最后找到了,错误的把:
ON_MESSAGE()写成ON_COMMAND()了。
发送消息为:AfxGetApp()->m_pMainWnd->PostMessage(WM_SHOW_TABVIEW_MONITOR, 0, 0);
注意:
对某个窗口发送消息前一定要找到该窗口的句柄。同一个消息可以发送到不同的窗口,将会根据自己的设置做不同的处理。最好是子窗口可以给父窗口发送消息,父窗口可以给子窗口发送消息,但子窗口间最好不要来回发送消息。对所有窗口的句柄管理也得多注意,父窗口是可以知道所有子窗口的句柄的,但一个子窗口是比较难知道另外一个子窗口句柄的。消息多容易搞糊涂,注意自己一定要理清顺序。
阅读(2431) | 评论(0) | 转发(0) |