正文:

如题

在做一个实时由电子零件图像来获取其尺寸的小工具时,要用到点击窗口任意位置拖动窗体,在 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了。

Tags: OnNcHitTest

Posted in | Comments(0)»
view和control的区别(如何在对话框上使用cview类) (..更多内容)
Tags: mfc

Posted in | Comments(0)»
//OpenFlags定义了13种文件访问和共享模式: enum OpenFlags { //第一(从右,下同)至第二位,打开文件时访问模式,读/写/读写 modeRead = 0x0000, modeWrite = 0x0001, modeReadWrite = 0x0002, shareCompat = 0x0000, //32位MFC中没用 //第五到第七位,打开文件时的共享模式 shareExclusive = 0x0010,//独占方式,禁止其他进程读写 hareDenyWrite = 0x0020,//禁止其他进程写 shareDenyRead = 0x0030,//禁止其他进程读 shareDenyNone = 0x0040,//允许其他进程写 //第八位,打开文件时的文件继承方式 modeNoInherit = 0x0080,//不允许子进程继承 //第十三、十四位,是否创建新文件和创建方式 modeCreate = 0x1000,//创建新文件,文件长度0 modeNoTruncate = 0x2000,//创建新文件时如文件已存在则打开 //第十五、十六位,文件以二进制或者文本方式打开,在派生类CStdioFile中用 typeText = 0x4000, typeBinary = (int)0x8000 };

 

Tags: CFile

Posted in | Comments(0)»

CToolTipCtrl使用详细解说

摘要:CToolTipCtrl的一般用法和动态改变ToolTip的显示内容的方法及步骤。 
    链接: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); 
     
    
}

文章来源:VCHelp

Tags: ctooltipctrl

Posted in | Comments(0)»

vc6 CString GetBuffer 八月 24th, 2010

vc6的CString ,在unicode会有问题,如ReleaseBuffer(), GetBuffer()不安全,尽量不用。

经验教训,备忘在此。 (..更多内容)
Tags: getbuffer

Posted in | Comments(0)»

转:stlport5.14 vc6 八月 18th, 2010

VC6 STLport编译,安装及注意事项

Posted on 2009-04-29 13:33 月光林地 阅读(642) 评论(0) 编辑 收藏 所属分类: C++学习笔记

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 <vector>
 #include 
<deque>
 
 
using namespace std;
 
int main()
 {
  
const int arraysize = 7;
  
int ia[arraysize] = {0123456};
  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:

 

while (it != myHashMap.end()) {
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

Tags: stlport

Posted in | Comments(0)»

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

Tags: stlport

Posted in | Comments(0)»

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

Tags: xttoolkitpro

Posted in | Comments(0)»

虚函数的作用 七月 28th, 2010

如上,子类重写父类的同名函数,在强制类型转换后调用的是父类的同名函数;但如果是虚函数,强制类型转化后仍然调用的是子类的同名函数。 (..更多内容)
Tags: cpp

Posted in | Comments(0)»

VC6 UNICODE 定义 七月 15th, 2010

//VC6 UNICODE 定义 #pragma comment(linker,"/ENTRY:wWinMainCRTStartup") #ifndef _UNICODE #define _UNICODE #endif #ifndef UNICODE #define UNICODE #endif (..更多内容)
Tags: vc

Posted in | Comments(0)»