转:VC按住窗口任意位置可拖动窗口实现 十月 19th, 2010
如题
在做一个实时由电子零件图像来获取其尺寸的小工具时,要用到点击窗口任意位置拖动窗体,在 VCbase网上找到了这样的例子,但是我把代码复制到程序中后,并不能实现这个功能,可能也有朋友遇到相同的问题,这里我详尽的说一下步骤。平时我只习 惯做基于对话框的程序,所以这里只讲基于对话框的。
代码很简单:
UINT CGetGrayLevelDlg::OnNcHitTest(CPoint pt)
{
CRect rc;
GetClientRect(&rc);
ClientToScreen(&rc);
return rc.PtInRect(pt) ? HTCAPTION : CDialog::OnNcHitTest(pt);
}
这里有三步:
1、利用VC向导添加一个protected函数
afx_msg UINT OnNcHitTest(CPoint pt);//也可以直接添加在头文件中
2、在CPP文件中编写你的实现部分
UINT CGetGrayLevelDlg::OnNcHitTest(CPoint pt)
{
CRect rc;
GetClientRect(&rc);
ClientToScreen(&rc);
return rc.PtInRect(pt) ? HTCAPTION : CDialog::OnNcHitTest(pt);
}
3、做到这,我开始以为完了,但是怎么也实现不了,还有一歩:
在CPP文件中添上: ON_WM_NCHITTEST()
BEGIN_MESSAGE_MAP(CGetGrayLevelDlg, CDialog)
//{{AFX_MSG_MAP(CGetGrayLevelDlg)
...
ON_WM_NCHITTEST()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
好了,OK了。
转:view和control的区别(如何在对话框上使用cview类) 十月 19th, 2010
CFile 文件访问和共享模式 九月 7th, 2010
转:CToolTipCtrl使用详细解说 九月 2nd, 2010
CToolTipCtrl使用详细解说
摘要:CToolTipCtrl的一般用法和动态改变ToolTip的显示内容的方法及步骤。 文章来源:VCHelp。
链接:VCHelp: http://www.vchelp.net
CToolTipCtrl使用详细解说
by 闻怡洋
ToolTip是Win32中一个通用控件,MFC中为其生成了一个类CToolTipCtrl,总的说来其使用方法是较简单的,下面讲一下它的一般用法和高级用法。
一般用法步骤:
1.添加CToolTipCtrl成员变量 m_tt。
2.在父窗口中调用EnableToolTips(TRUE);
3.在窗口的OnCreate(或者其他适当的位置)中向ToolTip中添加需要显示Tip的子窗口,并同时指定相应的显示字串CToolTipCtrl::AddTool(pWnd,"string to display")。
4.重载父窗口的 BOOL PreTranslateMessage(MSG* pMsg) ,在函数中调用 m_tt.RelayEvent(pMsg)。
下面假设在窗口CWndYour中使用CToolTipCtrl
在类定义中添加变量说明:
class CWndYour:xxx
{
CToolTipCtrl m_tt;
}
在OnCreate中添加需要显示Tip的子窗口
CWndYour::OnCreate(....)
{
EnableToolTips(TRUE);
m_tt.Create(this);
m_tt.Activate(TRUE);
CWnd* pW=GetDlgItem(IDC_CHECK1);//得到窗口指针
m_tooltip.AddTool(pW,"Check1");//添加
........
}
在BOOL PreTranslateMessage(MSG* pMsg)中添加代码
BOOL CWndYour::PreTranslateMessage(MSG* pMsg)
{
{
m_tt.RelayEvent(pMsg);
}
return CParentClass::PreTranslateMessage(pMsg);
}
这样当鼠标移动到相应的子窗口上时会显示出相应的ToolTip。
动态改变ToolTip的显示内容的方法及步骤:
1.上面所讲的1、2、4步骤。
2.在增加ToolTip时不指定显示的字串,而是使用LPSTR_TEXTCALLBACK。
3.在窗口中增加消息映射 ON_NOTIFY_EX( TTN_NEEDTEXT, 0, SetTipText )。
4.在窗口中增加一个函数用于动态提供显示内容,其原型为 BOOL SetTipText( UINT id, NMHDR * pTTTStruct, LRESULT * pResult ),下面的代码可以根据传入的参数判定应该显示的内容。
BOOL CWndYour::SetTipText( UINT id, NMHDR * pTTTStruct, LRESULT * pResult )
{
TOOLTIPTEXT *pTTT = (TOOLTIPTEXT *)pTTTStruct;
UINT nID =pTTTStruct->idFrom; //得到相应窗口ID,有可能是HWND
if (pTTT->uFlags & TTF_IDISHWND) //表明nID是否为HWND
{
nID = ::GetDlgCtrlID((HWND)nID);//从HWND得到ID值,当然你也可以通过HWND值来判断
switch(nID)
case(IDC_YOUR_CONTROL1)
strcpy(pTTT->lpszText,your_string1);//设置
return TRUE;
break;
case(IDC_YOUR_CONTROL2)
//设置相应的显示字串
return TRUE;
break;
}
return(FALSE);
}
vc6 CString GetBuffer 八月 24th, 2010
经验教训,备忘在此。 (..更多内容)
转:stlport5.14 vc6 八月 18th, 2010
VC6 STLport-5.1.4 编译,安装
先将Microsoft Visual Studio\VC98\Bin的目录添加到PATH环境变量中
1. 开启命令行窗口,建立VC环境, 执行 %MSVCDir%\VC98\Bin\VCVARS32.BAT
2. 切换到 %STLport-5.1.4%\build\lib,执行 configure msvc6 --with-static-rtl , 进行编译配置。其中:
msvc6是VC6平台,--with-static-rtl,静态链接[重要]。
-clean 完成后清除 build configuration files
更多选项参数使用命令 configure --help 查看
3. 执行 nmake /fmsvc.mak 或者 nmake /fmsvc.mak install,后者在编译完成后拷贝生成的library至%STLport-5.1.4%\lib目录下。建议使用 install 参数。
4. 打开VC6,在Tools->Options->Directories中,添加include files路径:%STLport-5.1.4%\stlport,添加library files路径:%STLport-5.1.4%\lib,调整这两个添加的路径至第一路径位置。
5. 修改工程选项:Project->Settings...->C/C++中,Category选择Code Generation,然后在use run-time library中选择Debug Multithreaded。(如果是release版本,选择Multithreaded;如果想用动态链接,则要先编译动态链接版本的 STLport,再在这儿选择相应的DLL)
**********************************************************************************************
VC6 STLport-4.6.2 编译,安装【%STLport-4.6.2% 表示 其路径,比如 C:\STLPORT 等】
1. /*****
a.修改....\VC98\Bin中的VCVARS32.BAT文件,找到
set INCLUDE=%MSVCDir%\ATL\INCLUDE;%MSVCDir%\INCLUDE;%MSVCDir%\MFC\INCLUDE;%INCLUDE%
set LIB=%MSVCDir%\LIB;%MSVCDir%\MFC\LIB;%LIB%
这两句,加上STLPort的路径,修改成如下:
set INCLUDE=%STLport-4.6.2%\stlport;%MSVCDir%\ATL\INCLUDE;%MSVCDir%\INCLUDE;%MSVCDir%\MFC\INCLUDE;%INCLUDE%
set LIB=%STLport-4.6.2%\lib;%MSVCDir%\LIB;%MSVCDir%\MFC\LIB;%LIB%
(C:\STLport\lib目前还不存在,但不用着急,编译完stlport就有了)
****/
2. 开启命令行窗口,建立VC环境, 执行 %Microsoft Visual Studio%\VC98\Bin\VCVARS32.BAT
3. nmake -f vc6.mak clean all (vc6还可以选择支持unicode的vc6-unicode.mak文件)
4. 配置VC:
点击vc的tools-options-Directories,
选择Include files,加入%STLport-4.6.2%\STLPORT,并调到最前面
选择Library files,加入%STLport-4.6.2%\LIB,并调到最前面
安装并设置完成后,测试编译以下代码,若没报错则表示安装成功
#include <deque>
using namespace std;
int main()
{
const int arraysize = 7;
int ia[arraysize] = {0, 1, 2, 3, 4, 5, 6};
vector<int> v(ia, ia+arraysize);
//v.push_back(0);
deque<int> d(ia, ia+arraysize);
return 0;
}
使用STLPORTs时一些需要注意的地方:
********************************************
如果和PlatformSDK 一起使用的话
要记的在STLport目录中 \stlport\stl_user_config.h 文件中
把这一句打开
# define _STLP_NEW_PLATFORM_SDK 1
否则在编译时会有如下错误
second C linkage of overloaded function ‘InterlockedIncrement’ not allowed
********************************************
如果想静态链接 STLPort 请在VC6的 C/C++ \ General \ Preprocessor definitions
中添加宏 _STLP_USE_STATIC_LIB
********************************************
对於使用IOSTREAM的, 如果有问题
在STLport目录中 \stlport\stl_user_config.h 文件中
把这一句打开吧
# define _STLP_NO_IOSTREAMS 1
********************************************
- When you erase an element from a hash_map only iterators to the erased element are invalidated
so you can write something like:
if (condition)
myHashMap.erase(it++); //这里为何这样不出错 而把it++放外面就不行呢
//在外面是对删除后的无效指针加, 而里面是对有效指针加
else
++it;
}
To finish STLport has a special debug mode to check such bad construction. Check the
stl_user_config.h file in the stlport folder for that, the macro is _STLP_DEBUG.
转自:http://www.cnblogs.com/lichkingct/archive/2009/04/29/1446158.html
stlport 八月 18th, 2010
S:\sdk\3rd\STLport5vc>configure msvc6
STLport Configuration Tool for Windows
Setting compiler: Microsoft Visual C++ 6.0
Setting platform: Windows XP
Done configuring STLport.
Go to build/lib folder and type "nmake clean install" to build and
install STLport to the "lib" and "bin" folders.
Go to build/test/unit folder and type nmake clean install to
build unit tests and install them in bin folder.
按照提示cd build\lib ,执行 nmake clean install
xttoolkit备注 八月 16th, 2010
另外值得注意的一点是,如果你选择static link,那么需要将XTP的资源导入你的工程之中。比如要使用中文资源,那么把下面的代码加入工程的rc2文件的最后
#define _XTP_RESOURCE_LANGUAGE zh_CN
#include <XTToolkitPro.rc>
同时,你还需要修改一下XTP附带的XTToolkitPro.rc中的内容
将最后的LANGUAGE_DEFAULT(TaskPanel)改成LANGUAGE_LOCALIZED(TaskPanel)
然后在TaskPanelres目录下将Resource.rc复制成Resource_zh_CN.rc,并将其中的编码改成中文
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS)
#ifdef _WIN32
LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED
#pragma code_page(936)
#endif //_WIN32
#endif