博文

sprintf用法解析(2009-10-19 22:23:00)

摘要:    版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明http://fogblog.blogbus.com/logs/1437347.html sprintf用法解析 作者 :晨星 1: sprintf 最常见的应用之一莫过于把整数打印到字符串中,所以,spritnf 在大多数场合可以替代itoa。 这样,一个整数的16 进制字符串就很容易得到,但我们在打印16 进制内容 时,通常想要一种左边补0 的等宽格式,那该怎么做呢?很简单,在表示宽 度的数字前面加个0 就可以了。 sprintf(s, "%08X", 4567); //产生:"000011D7" 上面以”%d”进行的10 进制打印同样也可以使用这种左边补0 的方式。 这里要注意一个符号扩展的问题:比如,假如我们想打印短整数(short)-1 的内存16 进制表示形式,在Win32 平台上,一个short 型占2 个字节,所 以我们自然希望用4 个16 进制数字来打印它: short si = -1; sprintf(s, "%04X", si); 产生“FFFFFFFF”,怎么回事?因为spritnf 是个变参函数,除了前面两个 参数之外,后面的参数都不是类型安全的,函数更没有办法仅仅通过一个 “%X”就能得知当初函数调用前参数压栈时被压进来的到底是个4 字节的整 数还是个2 字节的短整数,所以采取了统一4 字节的处理方式,导致参数压 栈时做了符号扩展,扩展成了32 位的整数-1,打印时4 个位置不够了,就 把32 位整数-1 的8 位16 进制都打印出来了。如果你想看si 的本来面目, 那么就应该让编译器做0 扩展而不是符号扩展(扩展时二进制左边补0 而不 是补符号位): sprintf(s, "%04X", (unsigned short)si); 就可以了。或者: unsigned short si = -1; sprintf(s, "%04X", si); 2: 浮点数的打印和格式控制是sprintf 的又一大常用功能......

阅读全文(4637) | 评论:1

Visual C++中的图形特技(2009-10-19 22:09:00)

摘要:   Visual C++中的图形特技     Visual C++中的图形特技 随着计算机信息表示及实现的多媒体化,在许多学习软件、游戏软件,以及多媒体课件制作软件中,经常使用各种图形显示技巧,如图形的推拉、交错、雨滴状、百页窗、积木随机堆叠等显示模式。这样使画面变得更为生动活泼,更能吸引用户,也为更好地发挥软件的功能奠定了基础。本文就Visual C++ 6.0中实现图形的各种显示技巧的原理及具体方法做些探讨。   基本原理   在Visual C++6.0中,显示位图的方法及过程如下:   1. 显示程序资源中的位图(位图的所有数据均存在于可执行文件中)   (1)从资源中装入位图   ● 定义位图对象数据成员CBitmap m_Bitmap;   ● 调用CBitmap成员函数LoadBitmap(),如m_Bitmap.LoadBitmap(IDB_BITMAP1);   ● 传入LoadBitmap的参数是位图在图形编辑器中生成或从位图文件中引入时赋予的识别符。   (2)生成与位图相联系的内存设备情境对象   CDC MemDC;   MemDC.CreateCompatibleDC(NULL);   MemDC.SelectObject(&m_Bitmap);   (3)显示位图   CClientDC ClientDC(this);   BITMAP BM;   m_Bitmap.GetObject(sizeof(BM),&BM);   ClientDC.BitBlt   ( X,Y, //目标设备逻辑横、纵坐标   BM.bmWidth, BM.bmHeight, //显示位图的像素宽、高度   &MemDC,   //待显示位图数据的设备情境对象   0,0, //源数据中的横、纵坐标   SRCCOPY); //位操作方式   这种方法显示位图速度快,但不是很灵活,而且会使可执行文件增大。   2. 显示独立文件方式的位图(位图的所有数据独立于可执行文件)   HBITMAP *hBitmap; //定义位图对象句柄   BITMAP BM;   CDC MemDC;   CClientDC ClientDC(this);   MemDC.CreateCompatibleDC(&ClientDC);......

阅读全文(1377) | 评论:0

简单绘图(2009-10-19 21:55:00)

摘要:    ---------- 题目1:怎样新建? 创建--> 新建一工程-->MFC AppWizard[exe](注:取名必须遵照Mymfc.即必须为英文且第一个字母必须为大写) 选择Single document后按Finish<--完成 题目2:按下鼠标左键怎样弹出对话框? 在CMyFirstMfcProjectView类(注:仅仅此类才可以显示出弹出的对话框) -->右击选择Add Windows Message handler(可以选择其它不同的消息.如WM_CHAR,WM_PAINT等) MessageBox("您按下了左键VIEW!","窗口标题栏",MB_OK);(注:当达到消息成功后,就会弹出此窗口) 题目3:怎样画一条线? /*****************************************************/ 在CMyFirstMfcProjectView类中添加一个成员变量.变量类型:CPoint(注:点类型).变量名:任意取 定义之后初始化--->打开构造函数CMyFirstMfcProjectView(),添加初始化代码 把所用消息的值赋给它--->打开所要响应的消息机制.把里面的point值赋给它. 起点已找到.终点要新建--->新建一个WM_LButtonUp(注:当鼠标左弹起来时.响应终点) 开始作图(画线)---> (一)API的方法(用全局变量)    (1)首先获取HDC(注:所有作图都必须定义1个HDC):用::GetDc(m_hwnd(注:是CWnd的句柄,公开且默认));     注:必须为全局变量    (2)其次获取称动时线的坐标可用MoveTo与MoveToEx,究竟用哪个?用MoveToEx      关于2者区别:MoveTo是Win16 API,MoveToEx是Win32 API.后者是前者的升级.      另外MFC也有个CDC:MoveTo,那个仅是封装了MoveToEx而已    (3)......

阅读全文(2546) | 评论:0

如何在MFC窗口界面中插入图片?(2009-10-18 15:29:00)

摘要:               首先在资源里边插入位图(给它一个易记得命名),然后到你要插入图片的地方放入一个图片控件,点击它属性,选择刚刚你插入的位图(名字)即可。     哈哈     试试吧。......

阅读全文(6764) | 评论:0

MFC版本的XO小游戏(2009-10-12 22:20:00)

摘要://MFC_xoDLG.h   // MFC_xoDlg.h : 头文件// #pragma once // CMFC_xoDlg 对话框class CMFC_xoDlg : public CDialog{// 构造public: CMFC_xoDlg(CWnd* pParent = NULL); // 标准构造函数 // 对话框数据 enum { IDD = IDD_MFC_XO_DIALOG };  protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持 // 实现protected: HICON m_hIcon;  // 生成的消息映射函数 virtual BOOL OnInitDialog(); afx_msg void OnSysCommand(UINT nID, LPARAM lParam); afx_msg void OnPaint(); afx_msg HCURSOR OnQueryDragIcon(); DECLARE_MESSAGE_MAP()public: afx_msg void OnBnClickedButton1(); afx_msg void OnBnClickedButton2(); afx_msg void OnBnClickedButton3(); afx_msg void OnBnClickedButton4(); afx_msg void OnBnClickedButton5(); afx_msg void OnBnClickedButton6(); afx_msg void OnBnClickedButton7(); afx_msg void OnBnClickedButton8(); afx_msg void OnBnClickedButton9(); // 用来记录当前显示的是X还是O // X的值用0表示,O的值用1表示    // pl......

阅读全文(2440) | 评论:0

点击一个Button显示设定的信息的函数(2009-10-08 14:08:00)

摘要:    SetWindowText函数可以实现。 void CMFC_xoDlg::OnBnClickedButton9(){ // TODO: 在此添加控件通知处理程序代码 CWnd* pWnd = GetDlgItem(IDC_BUTTON9);    pWnd->SetWindowText(_T("X"));}......

阅读全文(1497) | 评论:0

CScrollView的使用(2009-09-09 21:33:00)

摘要:    下面贴两段CScrollView的使用!希望有帮助。后面的方法我会陆续试用的。 CScrollView这个类用于需要滚动条的场合。我们可以直接用向导生成,在选择视图类的基类时选择CScrollView即可。 如果我们的程序原来用的是CView类,此时想改成CScrollView类,需要稍微做一下修改。 CView-->CScrollView 利用ClassWizard,在CxxView類別中,建立OnInitialUpdate( ) member function void CxxView::OnInitialUpdate(){CScrollView::OnInitialUpdate(); SetScrollSizes(MM_TEXT, CSize( 800, 600 ) );} cpp中:IMPLEMENT_DYNCREATE(CxxView, CScrollView)BEGIN_MESSAGE_MAP(CxxView, CScrollView) 如何在对话框中使用CScrollview类( 转 ) CRect rectWindow; GetWindowRect(rectWindow); CRuntimeClass *pViewClass = RUNTIME_CLASS(CMyScrollView); CCreateContext * pContext; pContext = new CCreateContext; pContext->m_pCurrentDoc = NULL; pContext->m_pCurrentFrame = NULL; pContext->m_pLastView = NULL; pContext->m_pNewDocTemplate =NULL; pContext->m_pNewViewClass = pViewClass; CWnd * pWnd = NULL; pWnd = DYNAMIC_DOWNCAST(CWnd,pViewClass->CreateObject()); pWnd ->Create(NULL,NULL,AFX_WS_DEFAULT_VIEW,CRect(0,0,0,0),this,0,pContext); ......

阅读全文(3049) | 评论:0

文本和CFont类(2009-08-28 00:00:00)

摘要:  文本和CFont类1文本的显示显示文本要使用CDC类的成员函数TextOut,它的原型为:BOOL TextOut(int x, int y, const CString &str);2设置文本颜色可以体胀系数在的成员函数SetTextColor进行文本颜色的设置.virtual VOLORREF SetTextColor(COLORREF crColor);CDC还有一个可以获得当前文本颜色的函数:COLORREF GetTextColor() const;CDC类成员函数SetBkColor来设置文本的背景颜色:virtual COLORREF SetBkColor(COLORREF crColor); 函数返回原来背景颜色.CDC类还有一个获得当前背颜色的成员函数:COLORREF GetBkColor() const; void CMyView::OnDraw(CDC* pDC) {CMyDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);// TODO: add draw code for native data herepDC->TextOut(30,30,"文本颜色"); pDC->SetTextColor(RGB(255,0,0));pDC->TextOut(130,30,"文本颜色"); pDC->SetTextColor(RGB(255,255,255));pDC->SetBkColor(RGB(0,0,255));pDC->TextOut(230,30,"文本颜色");}     3设置文本字符的间距可以用CDC类的成员函数SetTextCharacterExtra(int nCharExtra);来改变文本字符之间的间隔.SetTextCharacterExtra(int nCharExtra);返回值是原间距.CDC类还有一个获取当前字符间距的函数int GetTextCharacterExtra() const; void CMyView::OnDraw(CDC* pDC){CMyDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);// TODO: add draw co......

阅读全文(3156) | 评论:0

关于如何使用CFont类改变字体(2009-08-27 23:59:00)

摘要:  谁能告诉我怎样用CFont类创建对象来改变文本框或对话框的字体,具体应该用那些函数并且应该如何使用? 问题点数:20、回复次数:3Top 1 楼liuliguo940()回复于 2002-03-22 16:08:18 得分 0 CFont   m_font;     m_font.creat(......)         CDC   pDc=GetDC();     pDC->SelectObject(&m_font);     pDc->SetText("aaaa");Top2 楼caozuodong(cao)回复于 2002-03-22 16:27:17 得分 0 可是cdc类并没有settext()函数?我应该怎么做?Top3 楼lishush(☆↑苯鸟先飞↑☆)回复于 2002-03-22 16:47:46 得分 20 CEdit*   pEdt=(CEdit*)GetDlgItem(IDS_EDT);       pEdt->SetWindowText("lishush");     CFont   newFont;     newFont.CreatePointFont(180,"宋体");       pEdt->SetFont(&newFont);         但你要注意,CFont应该是一个全局变量或者成员变量,否则没有效果.   http://topic.csdn.net/t/20020322/15/593445.html......

阅读全文(3881) | 评论:0

笔记:函数rewind()(2009-08-26 13:28:00)

摘要:rewind 语法: #include <stdio.h> void rewind( FILE *stream ); 函数rewind()把文件指针移到由stream(流)指定的开始处, 同时清除和流相关的错误和EOF标记.   ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 用于学生管理系统,文件操作中: void CStuDataBase::Initialize(char* pszDataBaseName){ if (NULL == pszDataBaseName)                      throw "Connection to database fail,[Invalid FileName]";  m_pfReadFile = fopen(pszDataBaseName,"a+b"); if (NULL == m_pfReadFile)  throw "Connection to database fail!";  //开始读取数据 rewind(m_pfReadFile);          //跳到文件开头 int iCount = 0; while (fread(&m_stuObject[iCount],sizeof(m_stuObject[iCount]),1,m_pfReadFile) == 1) {  iCount++;   } fclose......

阅读全文(2133) | 评论:3