vc经验总结

-). 下面是常见的Afx全局函数:
AfxFormatString1:类似printf一般地将字符串格式化
AfxFormatString2:类似printf一般地将字符串格式化
AfxMessageBox:类似Windows API 函数 MessageBox
AfxOuputDebugString:将字符串输往除错装置
AfxGetApp:获得application object (CwinApp派生对象)的指针
AfxGetMainWnd:获得程序主窗口的指针
AfxGetInstance:获得程序的instance handle
(二). CString 与char []之间的转换.
在VC中,恐怕这两个是经常要进行转换的吧
char str[10] = ”str”;
CString sstr = “sstr”;
sstr.Format(“%s”,str);
strcpy(str,(LPCTSTR)sstr);
(三). 关闭程序:
PostQuitMessage(WM_CLOSE);  或者PostQuitMessage(WM_DESTROY);
更绝的是关闭所有的程序:::ExitWindows ();
(四). 在关闭窗口时,当要对文件进行保存时,可在这里添加函数:
1.)在CMainFrame里的OnClose()里,用MessageBox("内容","标题",组合形式);组合形式可以查看MSDN的MESSAGEBOX( ) Function
2.)在CXXXDoc::SaveModified() 里,只能用AfxMessageBox("");
不能用MessageBox()函数
(五). 如何修改窗体的标题:
1.)修改主窗口的标题:m_pMainWnd->SetWindowText("你的标题");
2.)如果在你的document.中进行改,则直接调用SetTitle("..."),如果在你的view类中改,则Getdocument.)->SetTitle("...")
3.)如果想使窗口的标题全部替换,则用:AfxGetMainWnd()->SetWindowText("你的标题");
(六). 得到窗体的标题:
1.)AfxGetMainWnd()->GetWindowText(); 
2.)先FindWindow()找到窗口的HWND,在GetWindowText();
(七). 在多文档/视图中:
1.)子窗口的最大化:
      void CChildFrame::ActivateFrame(int nCmdShow)
      {
        // TODO: Add your specialized code here and/or call the base class
        nCmdShow=SW_MAXIMIZE;
        CMDIChildWnd::ActivateFrame(nCmdShow);
      }
2.)屏蔽子对话框:在APP类里把这两句话屏蔽掉
      if (!ProcessShellCommand(cmdInfo))
        return FALSE;
3.)关闭子窗口:
::SendMessage(::AfxGetMainWnd()->m_hWnd, WM_COMMAND,ID_FILE_CLOSE,0);
(八). 在装进自定义的光标后,在移动的过程中,鼠标的形状总是在自定义和默认的光标之间晃动,可以这样解决,在视中的PreCreateWindow()中加入如下几句:
BOOL CXXXXView::PreCreateWindow(CREATESTRUCT& cs)
{
       // TODO: Modify the Window class or styles here by modifying
       // the CREATESTRUCT cs
      cs.lpszClass =AfxRegisterWndClass(CS_HREDRAW|CS_VREDRAW,0,
                   (HBRUSH)::GetStockObject (WHITE_BRUSH),0);
       return CView::PreCreateWindow(cs);
}
(九). 怎样禁止改变窗口的大小和不能移动的窗口:
         再 CMainFrame的OnCreate函数中加入:
         CMenu *pTopMenu=GetSystemMenu(false);
         pTopMenu->RemoveMenu(4,MF_BYPOSITION);//最大化窗口不可用
       pTopMenu->RemoveMenu(2,MF_BYPOSITION);//size
       pTopMenu->RemoveMenu(1,MF_BYPOSITION);//使不可移动
(十).使窗口始终在最前方:
只要在App类中的InitInstance()函数中加入以下代码就可以了:
BOOL CwindowOnTopApp:: InitInstance()
{
   //此处略去了VC自动生成的代码
   m_pMainWnd->showWindow(SW_SHOW);
   m_pMainWnd->UpdateWindow();
   m_pMainWnd->SetWindowPos(&CWnd::WndTopMost,0,0,0,0,
SWP_NOMOVE|SWP_NOSIZE|SWP_NOACTIVATE);
      Return true;
}

作者::王子軼
版權所有爱盟工作室2003.4.1

我的宗旨:实用万岁!

問:如何實現動態鼠標?
答: HCURSOR m_aniCursor;
。。。
if(m_aniCursor==NULL)
m_aniCursor=LoadCursorFromFile("动画鼠标文件名");
注:动画鼠标是。ANI 的文件; DEVSTUDIO 提供了制作动画鼠标的工具
。。。
BOOL CEx3Dlg::OnSetCursor(CWnd*pWnd , UINT nHitTest,UINT message)
{
if(m_aniCursor)
{
SetCursor(m_aniCursor);
return TRUE;
}
return CDialog::OnSetCursor(pWnd , nHitTest,message);
}
问:为什么彩用 DAO 方式访问 MDB 数据库时,到别人机子上就不能使用(无法访访问数据库)
答:彩用 DAO 访问 MDB 数据库必须安装 DAO 引擎。在安装 VC 时会自动安装相关引擎。因此,如果他人机器没有安装 DAO 引擎,就无法彩用 DAO 访问数据库。

问:如何设置鼠标?
答: HCURSOR m_hCursor;
。。。
m_hCursor=LoadCursor(IBC_CURSOR1);//IDC_CURSOR1 为自己的鼠标资源
。。。
BOOL CEx3Dlg::OnSetCursor(CWnd*pWnd , UINT nHitTest,UINT message)
{
if(m_hCursor)
{
SetCursor(m_hCursor);
return TRUE;
}
return CDialog::OnSetCursor(pWnd , nHitTest,message);
}

问:如何加载应用程序?
答:。。。
STARTUPINFO StartupInfo;
::memset(&StartupInfo,0,sizeof(STARTUPINFO));
StartupInfo.cb=sizeof(STARTUPINFO);
PROCESS_INFORMATION ProcessInfo;
if(!::CreateProcess(fileName,NULL,NULL,和NULL,FALSE,0,NULL , NULL,&StartupInfo,&ProcessInfo))
{
AfxMessageBox("message");
}
注:根据自己需要,更变函数内的参数

问:如何动态创建开放数据库连接数据源?
答:# include "odbcinst.h"
。。。
CFileStatus state;
CFile::GetStatus("bus.mdb",state);
CString str1;
char str[255];
int pathLen;
strcpy(str,status.m_szFullName);
pathLen=strlen(str);
str[pathLen-8]='/0';
char szdsn[255];
sprintf(szdsn,"DSN=bus1?DESCRIPTION=bus data? DBQ=bus.mdb? FIL=MicrosoftAccess? DEFAULTDIR=%s?? ",str);

pathLen=strlen(szdsn);
for(int i=0;i
{
if(szdsn[i]=='?')
szdsn[i]='/0';
}

//str1.Format("DSN=bus1//0 描述 =公共汽车数据//0 DBQ=bus.mdb//0 FIL=MicrosoftAccess//0 DEFAULTDIR=%s//0",str);
//AfxMessageBox(str1);
if(!SQLConfigDataSource(NULL,ODBC_ADD_DSN," 微软存取驾驶者 (*.mdb)/0",(LPCSTR)szdsn))
AfxMessageBox("Can’t Create DSN");

問:窗口及各種資源式樣?
答:
1,窗口樣式:
WS_POPUP 彈出
WS_CHILD 子窗口
WS_MINIMIZE 最小化
WS_VISIBLE 可見
WS_DISABLED 不可見
WS_CLIPSIBLINGS
WS_CLIPCHILDREN
WS_MAXIMIZE 最大化
WS_BORDER 邊框
WS_DLGFRAME 框架
WS_VSCROLL 垂直滾動條
WS_HSCROLL 水平滾動條
WS_SYSMENU 系統菜單
WS_THICKFRAME
WS_GROUP
WS_TABSTOP 定位键鍵
WS_POPUPWINDOW 帶邊框,系統菜單的彈出窗口
WS_OVERLAPPEDWINDOW帶邊框,標題欄,系統菜單及最大,最小化按鈕
WS_CAPTION 帶標題欄
WS_CHILDWINDOW
WS_MAXIMIZEBOX 帶最大化按鈕
WS_MINIMIZEBOX 最小化按鈕
WS_OVERLAPPED) 邊框的標題欄

2,窗口擴展樣式
WS_EX_DLGMODALFRAME
WS_EX_NOPARENTNOTIFY
WS_EX_TOPMOST
WS_EX_ACCEPTFILES
WS_EX_TRANSPARENT
WS_EX_MDICHILD
WS_EX_TOOLWINDOW
WS_EX_WINDOWEDGE
WS_EX_CLIENTEDGE
WS_EX_CONTEXTHELP
WS_EX_RIGHT
WS_EX_LEFT
WS_EX_RTLREADING
WS_EX_LTRREADING
WS_EX_LEFTSCROLLBAR
WS_EX_RIGHTSCROLLBAR
WS_EX_CONTROLPARENT
WS_EX_STATICEDGE
WS_EX_APPWINDOW
WS_EX_OVERLAPPEDWINDOW
WS_EX_PALETTEWINDOW)

3,對話框樣式
WS_POPUP
WS_CHILD
WS_MINIMIZE
WS_VISIBLE
WS_DISABLED
WS_CLIPSIBLINGS
WS_CLIPCHILDREN
WS_MAXIMIZE
WS_BORDER
WS_DLGFRAME
WS_VSCROLL
WS_HSCROLL
WS_SYSMENU
WS_THICKFRAME
WS_GROUP
WS_POPUPWINDOW
WS_OVERLAPPEDWINDOW
WS_TABSTOP
WS_CAPTION
WS_CHILDWINDOW
WS_MAXIMIZEBOX
WS_MINIMIZEBOX
WS_OVERLAPPED
DS_ABSALIGN
DS_SYSMODAL
DS_LOCALEDIT
DS_SETFONT
DS_MODALFRAME
DS_NOIDLEMSG
DS_SETFOREGROUND
DS_3DLOOK
DS_FIXEDSYS
DS_NOFAILCREATE
DS_CONTROL
DS_CENTER
DS_CENTERMOUSE
DS_CONTEXTHELP

4,按鈕樣式
BS_PUSHBUTTON
BS_DEFPUSHBUTTON
BS_CHECKBOX
BS_AUTOCHECKBOX
BS_RADIOBUTTON
BS_3STATE
BS_AUTO3STATE
BS_GROUPBOX
BS_USERBUTTON
BS_AUTORADIOBUTTON
BS_OWNERDRAW
BS_LEFTTEXT
BS_TEXT
BS_ICON
BS_BITMAP
BS_LEFT
BS_RIGHT
BS_CENTER
BS_TOP
BS_BOTTOM
BS_VCENTER
BS_PUSHLIKE
BS_MULTILINE
BS_NOTIFY
BS_FLAT
BS_RIGHTBUTTON

5,組合框樣式
CBS_SIMPLE
CBS_DROPDOWN
CBS_DROPDOWNLIST
CBS_OWNERDRAWFIXED
CBS_OWNERDRAWVARIABLE
CBS_AUTOHSCROLL
CBS_OEMCONVERT
CBS_SORT
CBS_HASSTRINGS
CBS_NOINTEGRALHEIGHT
CBS_DISABLENOSCROLL
CBS_UPPERCASE
CBS_LOWERCASE,

6,編輯框樣式
ES_LEFT 左對齊
ES_CENTER 居中
ES_RIGHT 居右
ES_MULTILINE 多行
ES_UPPERCASE 全部大寫
ES_LOWERCASE 全部小寫
ES_PASSWORD 爲密碼框
ES_AUTOVSCROLL 自動擴展垂直滾動條
ES_AUTOHSCROLL 自動擱展水平滾動條
ES_NOHIDESEL
ES_OEMCONVERT
ES_READONLY 只讀
ES_WANTRETURN 可以輸入回車
ES_NUMBER 數字

7,列表框樣式
LBS_NOTIFY 接收消息
LBS_SORT 排序
LBS_NOREDRAW
LBS_MULTIPLESEL
LBS_OWNERDRAWFIXED
LBS_OWNERDRAWVARIABLE
LBS_HASSTRINGS
LBS_USETABSTOPS
LBS_NOINTEGRALHEIGHT
LBS_MULTICOLUMN
LBS_WANTKEYBOARDINPUT
LBS_EXTENDEDSEL
LBS_DISABLENOSCROLL
LBS_NODATA
LBS_NOSEL
LBS_STANDARD

8,滾動條樣式
SBS_HORZ 水平
SBS_VERT 垂直
SBS_TOPALIGN
SBS_LEFTALIGN
SBS_BOTTOMALIGN
SBS_RIGHTALIGN
SBS_SIZEBOXTOPLEFTALIGN
SBS_SIZEBOXBOTTOMRIGHTALIGN
SBS_SIZEBOX
SBS_SIZEGRIP

9靜態控件樣式
SS_LEFT
SS_CENTER
SS_RIGHT
SS_ICON
SS_BLACKRECT
SS_GRAYRECT
SS_WHITERECT
SS_BLACKFRAME
SS_GRAYFRAME
SS_WHITEFRAME
SS_USERITEM
SS_SIMPLE
SS_LEFTNOWORDWRAP
SS_OWNERDRAW
SS_BITMAP
SS_ENHMETAFILE
SS_ETCHEDHORZ
SS_ETCHEDVERT
SS_ETCHEDFRAME
SS_TYPEMASK
SS_NOPREFIX
SS_NOTIFY
SS_CENTERIMAGE
SS_RIGHTJUST
SS_REALSIZEIMAGE
SS_SUNKEN
SS_ENDELLIPSIS
SS_PATHELLIPSIS
SS_WORDELLIPSIS
SS_ELLIPSISMASK

问:在重写进步类时,如何得到进步当前位置的象素值?
答:。。。
int nLower=…
int nUpper=…
。。。
Crect rect;//保存滚动条的大小
GetClientRect(&rect);
。。。
rect.right=(((float)rect.Width()*(float)(GetPos()-nLower))/(nUpper-nLower));

.引言   WORD电子签名插件,支持手写、本地电子图章、以及网络图章功能。软件使用VC6,以ATL方式编写,软件小巧精致。   这是我学习ATL的成果,学习过程及程序的编写,前前后后共用了一个多月的时间,花了不少的心血。其间遇到了不少困难,终于都一一解决了。这要感谢www.csdn.net上的热心朋友,从他们的BLOG文章中,我获得了不少灵感。现在这个软件基本完成了,全部实现了我自己定的设计需求,自己觉得这个软件还有一定的用处,就把它的测试版发布一下,希望使用者多提宝贵意见。 注:测试版没有任何的功能限制,只是“关于”对话框中显示测试版字样。 2.功能 可以完成手写签名及插入签章的功能。插入签名或签章后,可以监控WORD文档是否被修改。软件的使用界面很简单,只是在WORD里插入了一个工具栏,上面有三个按钮。其它的功能在插入的签名或签章上按右键根据弹出菜单选择执行。 印章支持多种格式图片,如BMP,JPG,GIF(静止的)等,使用时用印章管理工具把这些导入到印章库即可。 印章库管理密码:12345   几个内置的印章使用密码:111111 3.软件的使用:   使用windows系统带的控件注册工具regsvr32.exe,注册一下XXHSignature.dll即可;或者直接运行当前目录下的Register.exe,也可完成注册。这样打开word就可以看到签名工具栏。 软件包含以下几个文件: steal.mdb 印章库。 xxhsignature.ini 配制文件,如果没有会自动生成。 XXHSignature.dll WORD2003的COM加载项。程序的主体。 Register.exe 注册/卸载XXHSignature.dll用,可以不使用,直接使用regsvr32。 register.bat 注册的快捷方式,调用register.exe。纯属辅助,方便使用。 unregister.bat 卸载的快捷方式,带命令行参数调用register.exe。纯属辅助,方便使用。 StealManager.exe 印章管理工具。 说明文档.txt 说明文档。 软件使用VC6、ATL开发,没有使用MFC,所以每个软件都很小巧。 我在开发时使用的环境为XP、WORD2003,对软件在其它环境下没有进行过测试,不知道存不存在兼容问题。期待大家的反馈,可以给我发EMAIL,或者到我的博客留言。 如果程序运行有问题,可以使用Unregister.bat或regsvr32 /u将其卸载即可。也可以使用WORD的加载项管理菜单(该菜单默认时不显示,可以点击工具->自定义中找到使之显示),禁止插插件启动时运行。 另外:软件编译为UNICODE,对WIN98肯定是不支持。 欢迎转载,转载时请不要删除这些信息。谢谢。 2008-10-17 作者:wallimn email:wallimn@sohu.com QQ:54871876 博客:http://blog.csdn.net/wallimn
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值