您现在的位置是: 软件 > 开发者网络 > 程序方舟 > 开发专栏 > 正文
·速成电脑精英(包分配)白领高薪一族从这里开始


-英语学习工具精彩大串烧
-Visual Basic编程疑难问题解(二)
-软件频道新春贺词
-选贺卡,赢大奖!

Visual C++编程疑难问题解(一)
2003-02-11· · ··yesky

1 2 3  下一页

  [前言:]编程中遇到的问题很多,再优秀的程序员也不会没有问题,但很多解决方法被淹没在论坛浩瀚的“水”中了,为了便于同道查询同时保存这些精华,我将在实际编程中常见的问题以及论坛中优秀的回贴收集起来以专题的形式发表。本文中的所有问题及回答均来自论坛。

  问题一:如何实现指定盘符的光驱弹出弹入

  钥匙在这里:

void ctrl_cdrom_door(
LPCTSTR drivename ,//驱动器的名字如f:等.
bool fOpen file://弹出时用true,弹入时用false
)
{
 TCHAR devstr[128],ctrlstr[128];
 wsprintf(devstr,_T("open %s type cdaudio alias mycd wait"),drivename);
 wsprintf(ctrlstr,_T("set mycd door %s wait"),fOpen?_T("open"):_T("closed"));
 mciSendString(devstr,NULL,0,NULL);
 mciSendString(ctrlstr,NULL,0,NULL);
 mciSendString(_T("close mycd wait"),NULL,0,NULL);
}
file://测试的例子代码.
void CMainFrame::OnTestOpen()
{
 // TODO: Add your command handler code here
 ctrl_cdrom_door("F:",true);
}

void CMainFrame::OnTestClose()
{
 // TODO: Add your command handler code here
 ctrl_cdrom_door("F:",false);
}

  问题二:如何实现繁简体互换?

  钥匙在这里:

// j2f.cpp : 简体(gb)==>繁体==>big5的过程
// 反向转换是类似的.
// 注意直接从简体-->big5不能做到一一对应.会有很多?出现,
// 故此需要先转成繁体.再转成big5.
// 我感觉这种方法应当和winnt或office里提供的繁简或字符集互转是一致的.

#include "stdafx.h"
#include
#include
#include
#include
#include
using namespace std;

void j2f(const string &s)
{
 int n=s.length ();
 int r=LCMapString(
   MAKELCID(MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED),SORT_CHINESE_PRC),
   LCMAP_TRADITIONAL_CHINESE,
   s.c_str (),s.length (),NULL,0);
 if (!r) cout <<"error :"<  char *ft=new char[r+1];
 r=LCMapString(
   MAKELCID(MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED),SORT_CHINESE_PRC),
   LCMAP_TRADITIONAL_CHINESE,
   s.c_str (),s.length (),ft,r+1);//这个api搞掂简体转繁体,下面会打印繁体出来
 if (r) {
  ft[r]=0;
  cout<   wchar_t *pws=new wchar_t[r+1];
  int r1=MultiByteToWideChar(936,0,ft,r,pws,r+1);
 BOOL f=FALSE;
 r1=WideCharToMultiByte(950,0,pws,r1,ft,r+1,"?",&f);//代码页切换搞掂gb->big5
 ft[r1]=0;
 cout<   for (int i=0;i    cout<<"";
   printf("0x%02x ",(BYTE)ft[i]);
  }
 cout<<")"<  delete [] pws;
 }

 delete []ft;
}

//从标准输入简体国标-->big5繁体标准输出,输入两个空行退出
int main(int argc, char* argv[])
{

 for(;;){
  char line[1024];
  cin.getline (line,sizeof(line));
 string s(line);
 if (!cin ||s.length ()==0) break;
 j2f(s);
}
_getch();
return 0;
}

  问题三:多线程中如何得到视图指针?

  钥匙在这里:有两种方法可以实现你的要求:

  1)第一种方法:

  要是多线程不是在App.cpp里出现,那么要在多线程的.cpp中加上extern CYourApp theApp;

//获得文档模板:
POSITION curTemplatePos = theApp.GetFirstDocTemplatePosition();
CDocTemplate *m_doc=theApp.GetNextDocTemplate(curTemplatePos);

file://获得文档:
curTemplatePos=m_doc->GetFirstDocPosition();
CYourDoc *m_pdoc=(CA8Doc*)m_doc->GetNextDoc(curTemplatePos);

file://获得视图:
curTemplatePos=m_pdoc->GetFirstViewPosition();
CYourView *m_pview=(CYourView*)m_pdoc->GetNextView(curTemplatePos);

file://调用视图函数:
m_pview->Put();

  2)第二种方法:

//获得窗体指针:
CMainFrame *pFrame = (CMainFrame*)AfxGetApp()->m_pMainWnd;

file://获得与该窗体符合的视图:
CYourView *m_pView = (CYourView *) pFrame->GetActiveView();

file://调用视图函数:
m_pView->Put();

1 2 3  下一页

【责任编辑:方舟】
【发表评论】【关闭窗口】
■ 相关内容
 用VC++实现图像检索技术
 VC++中使用内存映射文件处理大文件
 VC++实现GPS全球定位系统定位数据的提取
 VC++实现对退化图像的恢复
 VC++ SMTP协议电子邮件传送剖析
 VC的另类数据库编程
 VC打造自己特色的屏幕保护
 在VC++下对文件属性的获取与更改
感谢 访问天极网,如果您觉得该文章涉及版权问题,请看这里!