Visual C++ 技术文档03

Visual C++ 技术文档03

51.设置另存为..对话框

      CString str;

      CFileDialog* filedialog;//设置另存为..对话框

      filedialog=new CFileDialog(false,"txt",NULL,OFN_FILEMUSTEXIST|OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,"文本文件(*.txt)|*.txt");

      if(filedialog->DoModal()==IDOK)

      {        

           str=filedialog->GetPathName();//获取文件名及路径

           CFile m_rFile;

           if (!m_rFile.Open(str,CFile::modeCreate | CFile::modeReadWrite) )

           {

                 AfxMessageBox("创建文件失败");

                 return;

           }

           m_rFile.SeekToEnd();

           CString rxd;

           GetDlgItemText(IDC_RXD,rxd);

           m_rFile.Write((LPCTSTR)rxd,rxd.GetLength());

           m_rFile.Flush();

           m_rFile.Close();

      }

      delete(filedialog);

52.获取鼠标在屏幕上的坐标并转化为窗体坐标

      CPoint pt;

      GetCursorPos(&pt);//获取鼠标在屏幕上的坐标

      ScreenToClient(&pt);//将屏幕坐标转换为窗体坐标

53.控件大小随窗体改变

      响应WM_SIZE消息。

void CTempletDlg::OnSize(UINT nType, int cx, int cy)

{

      CDialog::OnSize(nType, cx, cy);

      GetDlgItem(IDC_RXD)->MoveWindow(10,10,cx-20,200);

      m_statusbar.MoveWindow(0,cy-20,cx-55,20); 

      GetDlgItem(IDC_PUSHPIN)->MoveWindow(cx-50,cy-20,50,20);

}

54. 最上层显示

void CTempletDlg::OnPushpin() //最上层显示

{

      m_bVisible=!m_bVisible;

      if(m_bVisible)

      {

           SetWindowPos(&wndTopMost,0,0, 0, 0, SWP_NOMOVE|SWP_NOSIZE);

      }

      else

      {

           SetWindowPos(&wndBottom,0,0,0,0, SWP_NOMOVE|SWP_NOSIZE|SWP_NOREDRAW);

           BringWindowToTop();

      }

}

55.创建状态栏窗口

1. 定义一个CStatusBar类型变量

CStatusBar m_statusbar;

2. OnInitDialog() 加入下面代码

      UINT array[3];

      for (int i = 0;i <3;i++)

      {

           array[i] = 100+i;

      }

      m_statusbar.Create(this); //创建状态栏窗口

      m_statusbar.SetIndicators(array,sizeof(array)/sizeof(UINT)); //添加面板

      for (int n = 0; n<3;n++)

      {

           m_statusbar.SetPaneInfo(n,array[n],0,95);//设置面板宽度

      }

      m_statusbar.SetPaneInfo(2,array[2],0,850);

      m_statusbar.SetPaneText(0,"DSME R&D Dept.YX");

      m_statusbar.SetPaneText(1,"Port Closed");

      m_statusbar.SetPaneText(2,"仅支持对16进制字符进行操作及处理");

      RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0);

56.向编辑框赋值,并显示

SetDlgItemText(IDC_ED_TEST, _T("Sample"));

57.改变文件保存路径

void CSCOMMDlg::OnButtonDirbrowser()

{

      static char displayname[MAX_PATH];

      static char path[MAX_PATH];

    LPITEMIDLIST pidlBrowse;    // PIDL selected by user

      BROWSEINFO bi;

      bi.hwndOwner = this->m_hWnd;

      bi.pidlRoot = NULL;

      bi.pszDisplayName = displayname;

      bi.lpszTitle = "请选择要保存接收数据的文件夹";

      bi.ulFlags = BIF_EDITBOX ;

      bi.lpfn = NULL;

      pidlBrowse=SHBrowseForFolder( &bi);

      if(pidlBrowse!=NULL)

      {

           SHGetPathFromIDList(pidlBrowse,path);

      }

      CString str=path;  //得到路径

      if(str.IsEmpty()) return;  //如果没有选择,就返回

      m_strCurPath=str; //接收路径编辑框对应变量

      UpdateData(FALSE);    

}

58.播放WAV文件

#include "mmsystem.h"

#pragma comment(lib,"winmm.lib")

1.通过文件名

如果一个声音文件为"C:/a.wav",播放它可以用下面的语句:

PlaySound("C:/a.wav",NULL,SND_ASYNC|SND_FILENAME);

2.通过可执行文件资源标识

导入一个.wav文件,其IDIDR_CAMERA,这样调用:

PlaySound(MAKEINTRESOURCE(IDR_CAMERA),AfxGetResourceHandle(), SND_SYNC|SND_RESOURCE);

3. 停止当前播放的声音

PlaySound(NULL,NULL,0);

59.点击任意位置均可拖动窗体

1.可以在LBUTTONDOWN里面发送一个点到标题的消息

PostMessage(WM_NCLBUTTONDOWN,HTCAPTION,MAKELPARAM(point.x,point.y));

2.对你的窗口添加WM_NCHITTEST消息处理函数

如果在类向导中看不到WM_NCHITTEST消息,可以将class info中的message filter改为windows就能看到了

UINT CTTTDlg::OnNcHitTest(CPoint point)

{

    // return CDialog::OnNcHitTest(point); 这是原来的默认CDialog处理函数

    return HTCAPTION;   // 改成直接返回HTCAPTION,系统就会以为你点击的位置是标题栏,也就允许拖动窗口了

}

 

60.滑杆的使用

1. 在头文件中添加变量

int m_nTrackbar2;//滑杆初始位置

static int dValue[];//存储滑杆的值

2. CPP中:

int CCurveView::dValue[10] = {480,420,360,300,240,180,120,60,30,20};//滑杆的值的范围

CCurveView::CCurveView()

      : CFormView(CCurveView::IDD)

{

      //{{AFX_DATA_INIT(CCurveView)

      //}}AFX_DATA_INIT

      // TODO: add construction code here

      m_nTrackbar2 = 9;//滑杆初始位置

}

void CCurveView::DoDataExchange(CDataExchange* pDX)

{

      CFormView::DoDataExchange(pDX);

      //{{AFX_DATA_MAP(CCurveView)

      DDX_Check(pDX, IDC_CHECK_ONTIME, m_ontime);

      DDX_CBIndex(pDX, IDC_COMBO_TIME, m_time);

      //}}AFX_DATA_MAP

      if (pDX->m_bSaveAndValidate)

      {

           CSliderCtrl* pSlide2 =(CSliderCtrl*) GetDlgItem(IDC_SLIDER);

           m_nTrackbar2 = pSlide2->GetPos();

      }

}

void CCurveView::OnInitialUpdate()

{

      CFormView::OnInitialUpdate();

      GetParentFrame()->RecalcLayout();

      ResizeParentToFit();

 

      CString strText2;//以下设置滑杆

      CSliderCtrl* pSlide2 =(CSliderCtrl*) GetDlgItem(IDC_SLIDER);

      pSlide2->SetRange(0, 9);//

      pSlide2->SetPos(m_nTrackbar2);//初始位置

      strText2.Format("%d", dValue[pSlide2->GetPos()]);

      strText2=strText2+"分钟";

      SetDlgItemText(IDC_STATIC1, strText2);

}

void CCurveView::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) //滑杆调节时显示当前位置的值

{

      CSliderCtrl* pSlide = (CSliderCtrl*) pScrollBar;

      CString strText;

      switch(pScrollBar->GetDlgCtrlID())

      {

      case IDC_SLIDER:

           strText.Format("%d", dValue[pSlide->GetPos()]);

           strText=strText+"分钟";

           SetDlgItemText(IDC_STATIC1, strText);

           break;

      default:break;

      }

      CFormView::OnHScroll(nSBCode, nPos, pScrollBar);

}

61.GetModuleFileName获取程序当前执行文件名

在开发过程中经常需要获得程序当前的运行目录,这时就可以使用GetModuleFileName函数

DWORD WINAPI GetModuleFileName(

  HMODULE hModule,

  LPTSTR lpFileName,

  DWORD nSize

);

 

hModule:要获取文件名的模块名柄,null表示当前模块

lpFileName:输出参数,存放取得的文件名

nSize:lpFileName参数的长度

GetModuleFileName的第一个参数是HINSTANCE,你可以利用AfxGetInstanceHandle()来获得这个参数的取值。

void FileName()

{

    TCHAR lpFileName[MAX_PATH];

    ::GetModuleFileName(null, lpFileName, MAX_PATH);

    SetDlgItemText(IDC_TEXTBOX, lpFileName);

}

62.GetModuleFileName获取应用程序当前路径,并分解

    char path_buffer[_MAX_PATH];

    char drive[_MAX_DRIVE];

    char dir[_MAX_DIR];

    GetModuleFileName(NULL, path_buffer, _MAX_PATH);

    _splitpath(path_buffer, drive, dir, 0, 0);

    CString strPathName;

    strPathName += drive;

    strPathName += dir;

63._makepath_splitpath的用法(MSDN

#include <stdlib.h>

#include <stdio.h>

 

void main( void )

{

   char path_buffer[_MAX_PATH];

   char drive[_MAX_DRIVE];

   char dir[_MAX_DIR];

   char fname[_MAX_FNAME];

   char ext[_MAX_EXT];

 

   _makepath( path_buffer, "c", "//sample//crt//", "makepath", "c" );

   printf( "Path created with _makepath: %s/n/n", path_buffer );

   _splitpath( path_buffer, drive, dir, fname, ext );

   printf( "Path extracted with _splitpath:/n" );

   printf( "  Drive: %s/n", drive );

   printf( "  Dir: %s/n", dir );

   printf( "  Filename: %s/n", fname );

   printf( "  Ext: %s/n", ext );

}

 

 

Output

 

Path created with _makepath: c:/sample/crt/makepath.c

 

Path extracted with _splitpath:

  Drive: c:

  Dir: /sample/crt/

  Filename: makepath

  Ext: .c

64.压缩ACCESS数据库需先确定数据库已关闭

void CHisenseView::CompressDB()//压缩

{

      try  

      {

           ::CoInitialize(NULL); 

           JRO::IJetEnginePtr jet(__uuidof(JRO::JetEngine)); 

           jet->CompactDatabase(  

                                       "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=data//data.mdb",    

                                       "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=data//datad1.mdb;"/

                                       "Jet OLEDB:Engine Type=5");  

      }  

      catch(_com_error &e)    

      {         

           AfxMessageBox((LPCTSTR)e.Description());

      }

}

65.限制编辑框内输入字符

1.新建基于CEdit的类,如CNumberEdit,为编辑框添加CNumberEdit类型控制变量

2.CNumberEdit中响应WM_CHAR消息

void CNumberEdit::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)

{

      CString str;

      GetWindowText(str);

      if (nChar == 8) //退格键

      {

           CEdit::OnChar(nChar, nRepCnt, nFlags);

           return;

      }

      if (nChar == 32) //空格键

      {

           CEdit::OnChar(nChar, nRepCnt, nFlags);

           return;

      }

//   if ((nChar==46)&&(!str.IsEmpty())&&(str.Find('.',0)!= -1)) //防止输入两个小数点

//         nChar = 0;

      if (((nChar<48)||((nChar>57)&&(nChar<65))||((nChar>70)&&(nChar<97))||(nChar>102))) //只允许输入16进制字符

      {

           nChar = 0;

           AfxMessageBox("请输入16进制字符");

      }

      else

           CEdit::OnChar(nChar, nRepCnt, nFlags);

}

66.保存位图时,背景颜色为黑色,如何更改背景颜色?

在绘图时为绘图区域填充背景颜色

void CCurveView::OnCurve(CDC *pDC)

{

      //填充背景颜色

      CRect rc(0,0,1100,700);

      CBrush newbrush,*oldbrush;

      newbrush.CreateSolidBrush(RGB(212,208,200));

      oldbrush=pDC->SelectObject(&newbrush);

      pDC->Rectangle(rc);

      newbrush.DeleteObject();

      pDC->SelectObject(oldbrush);

}

67.采用双缓冲方式重绘以消除闪烁

void CCurveView::OnDraw(CDC* pDC) //重绘,双缓冲实现无闪烁

{

      CDC MemDC;

      CBitmap MemBitmap;

      int   x,y;

      CSize   sizeTotal=GetTotalSize();

   

      x=sizeTotal.cx+20;

      y=sizeTotal.cy+15;

      MemDC.CreateCompatibleDC(pDC);

      MemBitmap.CreateCompatibleBitmap(pDC,x,y);

      CBitmap   *pOldBit=MemDC.SelectObject(&MemBitmap);

      MemDC.BitBlt(0,0,x,y,pDC,0,0,SRCCOPY);

      MemDC.FillSolidRect(0,0,x,y,RGB(212,208,200));

        

      OnCurve(&MemDC);

      pDC->BitBlt(0,0,x,y,&MemDC,0,0,SRCCOPY);

      MemBitmap.DeleteObject();

      MemDC.DeleteDC();

}

BOOL CCurveView::OnEraseBkgnd(CDC* pDC)

{

      // TODO: Add your message handler code here and/or call default

     

      return true;

}

68.Radio Button 的使用方法

CButton* radioindoor;

      radioindoor = (CButton*)GetDlgItem(IDC_RADIO1);

      radioindoor->SetCheck(1);

69.遍历数据库(ADO

void CMobileNewView::DisplayRecorder()//遍历记录

{

      UpdateData(true);

      m_list.DeleteAllItems();

      m_list.DeleteColumn(3);

      for(int i=2;i>=0;i--)

      {

           m_list.DeleteColumn(i);

      }

      m_list.InsertColumn(0,"时间",LVCFMT_CENTER,130);

      m_list.InsertColumn(1,"数据",LVCFMT_LEFT,400);

      m_list.InsertColumn(2,"内容",LVCFMT_LEFT,100);

      ::CoInitialize(NULL);

      m_Connection.CreateInstance(__uuidof(Connection));

      try

      {

           m_Connection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=data//Mobile.mdb","","",adModeUnknown);

           m_Recordset.CreateInstance(__uuidof(Recordset));

           _variant_t RecordsAffected;

      m_Recordset=m_Connection->Execute("SELECT * FROM receive ORDER BY 编号",&RecordsAffected,adCmdText);

           if(m_Recordset->BOF)

           {

                 AfxMessageBox("kong");

                 return;

           }

           m_Recordset->MoveFirst();

           CString str1;

           int nItem;

           while(!m_Recordset->adoEOF)

           {

                 _variant_t vCount=m_Recordset->GetCollect("时间");

                 str1.Format("%S",vCount.lVal);

                 nItem=m_list.InsertItem(0,str1);

                 vCount=m_Recordset->GetCollect("数据");

                 str1.Format("%S",vCount.lVal);

                 m_list.SetItemText(nItem,1,str1);

                 vCount=m_Recordset->GetCollect("内容");

                 str1=VariantToString(vCount);

                 m_list.SetItemText(nItem,2,LPCTSTR(str1));

                 m_Recordset->MoveNext();

           }

           m_Recordset->MoveFirst();

      }

      catch(_com_error &e)

      {

           GenerateError(e.Error(),e.Description());

      }

}

70.从数据库中读取类型为时间的字段,取出后类型为_variant_t   VT_DATE,如何转换为CString?

      _variant_t vCount=m_Recordset->GetCollect("时间");

      COleDateTime t(vCount);

      str1=t.Format("%Y-%m-%d %H:%M:%S");

 

 

 

 

 

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值