Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2707669
  • 博文数量: 416
  • 博客积分: 10220
  • 博客等级: 上将
  • 技术积分: 4193
  • 用 户 组: 普通用户
  • 注册时间: 2006-12-15 09:47
文章分类

全部博文(416)

文章存档

2022年(1)

2021年(1)

2020年(1)

2019年(5)

2018年(7)

2017年(6)

2016年(7)

2015年(11)

2014年(1)

2012年(5)

2011年(7)

2010年(35)

2009年(64)

2008年(48)

2007年(177)

2006年(40)

我的朋友

分类: C/C++

2007-10-30 21:25:05

-). 下面是常见的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));

阅读(1741) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~