分类归档:c/c++

C++这个词在中国大陆的程序员圈子中通常被读做“C加加”,而西方的程序员通常读做“C plus plus”,“CPP”。 它是一种使用非常广泛的计算机编程语言。C++是一种静态数据类型检查的、支持多重编程范式的通用程序设计语言。它支持过程化程序设计、数据抽象、面向对象程序设计、制作图标等等泛型程序设计等多种程序设计风格。

WINCE 6.0 系统的时间设置

1、使用API函数SetLocalTime进行本地时间设置。 1)SetLocalTime函数的原型: BOOL SetLocalTime( const SYSTEMTIME *lpSystemTime ); 输入参数lpSystemTime是一个SYSTEMTIME类型的参数,如果设置成功,返回true,本地时间将会变成lpSystemTime所指定的时间,否则返回false。 看一下SYSTEMTIME的格式: typedef struct _SYSTEMTIME {
WORD wYear;
WORD wMonth;
WORD wDayOfWeek;
WORD wDay;
WORD wHour;
WORD wMinute;
WORD wSecond;
WORD wMilliseconds;
} SYSTEMTIME, *PSYSTEMTIME;
各成员的含义不用解释了吧。 2)我们来看一下如何利用SYSTEMTIME结构体和SetLocalTime函数进行本地时间的设置。

 SYSTEMTIME st;
st.wYear = 2007;
st.wMonth = 11;
st.wDay = 24;
st.wHour = 3;
st.wMinute = 14;
st.wSecond = 0;

 st.wMilliseconds = 0;

 SetSystemTime(&st);

对比一下SYSTEMTIME结构体,可以发现,除wDayOfWeek成员之外,其它各成员都进行赋值了,甚至连wMilliseconds。使用这种方式进行系统时间设置时,会忽略wDayOfWeek成员,可以不进行该成员的赋值(即使你赋值了也不会被考虑的),但其它所有成员都必须时行赋值,否则无法成功地进行时间设置。

3)如果只想对其中的几项进行设置的话,可以先使用GetLocalTime函数来获取当前本地时间,然后再对相应的项进行修改,如下:

SYSTEMTIME st;
GetLocalTime(&st);
st.wHour = 3;
SetLocalTime(&st);

read more

VC中MessageBox的常见用法

一、关于MessageBox
       消息框是个很常用的控件,属性比较多,本文列出了它的一些常用方法,及指出了它的一些应用场合。
      1.MessageBox(“这是一个最简单的消息框!”);
       2.MessageBox(“这是一个有标题的消息框!”,”标题”);
       3.MessageBox(“这是一个确定 取消的消息框!”,”标题”, MB_OKCANCEL );
      4.MessageBox(“这是一个警告的消息框!”,”标题”, MB_ICONEXCLAMATION );
      5.MessageBox(“这是一个两种属性的消息框!”,”标题”, MB_ICONEXCLAMATION|MB_OKCANCEL );

      6.if(MessageBox(“一种常用的应用”,”标题”,MB_ICONEXCLAMATION|MB_OKCANCEL)==IDCANCEL)
read more

MFC快捷菜单、工具条、对话框、标题栏

建立单文档应用程序

在窗格显示时间(Frame类里)
CTime time;
time = CTime::GetCurrentTime();
CString s=time.Format(“%H:%M:%S”);
m_wndStatusBar.SetPaneText(m_wndStatusBar.CommandToIndex(ID_INDICATOR_TIME),s);
CFrameWnd::OnTimer(nIDEvent);

点击弹出对话框(view类里)
CModalDialog *dlg = new CModalDialog;
dlg->Create(IDD_DIALOG,this);
dlg->ShowWindow(SW_SHOW);

右键菜单(快捷菜单)(view类里)
CMenu popup;
popup.LoadMenu(IDR_MENU_RIGHT);
CMenu *pop=popup.GetSubMenu(0);
ClientToScreen(&point);
pop->TrackPopupMenu(TPM_RIGHTBUTTON | TPM_LEFTALIGN,point.x,point.y,this);
CView::OnRButtonDown(nFlags, point);

修改标题栏图标(Frame类里)
HICON m_hIcon;
m_hIcon = AfxGetApp()->LoadIcon(IDI_ICON1);
SetIcon(m_hIcon, read more

MFC限制鼠标区域、画橡皮条线、任务栏显示图标、核对标记、文档背景色

限制鼠标活动区域
可以写在view类的OnMouseMove中添加如下代码
if (nFlags&&MK_LBUTTON)
{
CWnd *hwnd = GetActiveWindow();
CRect rect;
hwnd->GetWindowRect(&rect);
ClipCursor(&rect);
}
当要恢复鼠标使用范围时调用ClipCursor(NULL);即可。

还有SetCapture()和ReleaseCapture()的使用

画弹性橡皮线
在view类里响应左键单击,以及鼠标移动和左键弹起消息
鼠标移动
CClientDC dc(this);
dc.SetROP2(R2_NOT);
dc.MoveTo(oldPoint);
dc.LineTo(newPoint);

dc.MoveTo(oldPoint);
dc.LineTo(point);

newPoint = point;
左键按下只需记录坐标点,鼠标弹起只需画线。
当要画其它图形时要麻烦很多,因为在鼠标移动时要用到画刷

画矩形
if (GetCapture()==this&& nFlags && MK_LBUTTON)
read more

MFC对话框置顶 SetWindowPos()的用法

当你建立了一个基本对话框应用程序时,设置对话框置顶,可以在初始化对话框函数或者在消息响应函数里添加以下语句 设置置顶: SetWindowPos(&wndTopMost,0,0,0,0, SWP_NOMOVE | SWP_NOSIZE); 取消置顶: SetWindowPos(&wndNoTopMost,0,0,0,0, SWP_NOMOVE | SWP_NOSIZE); 不需做任何修改即可完成。 当建立的是单文档应用程序时,要在前面多一个窗口句柄函数。 下面是更详细的说明: 函数名:  SetWindowPos头文件:  winuser.h

函数原型:

BOOL SetWindowPos
(
HWND hWnd, //窗口句柄
HWND hWndInsertAfter, //排列顺序的句柄
int X, //水平坐标
int Y, //垂直坐标
int cx, //宽
int cy, //高
UINT uFlags //窗口定位标识
);

说明:

这个函数能改变窗口的大小、位置和设置子窗口、弹出窗口或顶层窗口的排列顺序。
返回值:

BOOL,如果返回值非零表示成功,返回零表示失败。错误信息请参看GetLastError函数。

参数表:

参数 类型及说明
hwnd HWND,欲定位的窗口句柄
hWndInsertAfter HWND,置于hwnd前面的窗口句柄。这个参数必须是窗口的句柄或是下面的值之一:    HWND_BOTTOM 将窗口置于其它所有窗口的底部
HWND_NOTOPMOST 将窗口置于其它所有窗口的顶部,并位于任何最顶部窗口的后面。如果这个窗口非顶部窗口,这个标记对该窗口并不产生影响
read more

c实现Socket通信

072435ab1srtrabhz5391h.gif.thumb_

程序分为服务端和客户端(服务端就相当于我们的网站服务器,客户端就相当于我们的浏览器)

在服务端,我们需要大致按照以下步骤:

1.初始化socket库。
2.绑定本机地址和端口。(服务端特有)
3.监听端口,等待客户端连接。
4.当有客户端连接,进行处理,但后继续监听或者结束程序。
5.退出程序,关闭socket,终止对socket库的使用。

在客户端,我们需要按照以下步骤:

1.初始化socket库。
2.设置远程主机的地址和端口信息,并连接。
3.等待服务端的响应
4.当服务端响应,进行处理。
5.退出程序,关闭socket,终止对socket库的使用。

下面引用一张来自网络的图片,直观的说明通信的过程。

下面是代码示例:

服务端:

#include 
#include 
int main(void)
{
        int len = 0;
        WSADATA wd;
        int ret = 0;
        SOCKET s,c;
        char sendBuf[1000]="", recvBuf[1000]="";
        SOCKADDR_IN saddr, caddr;
        ret = WSAStartup(MAKEWORD(2,2),&wd);  /*1.初始化操作(希望使用的WinSock DLL 的版本)*/
        
        if(ret != 0)
        {
                return 0;
        }
        if(HIBYTE(wd.wVersion)!=2 || LOBYTE(wd.wVersion)!=2)
        {
                printf("初始化失败");
                WSACleanup();
                return 1;
        }
        
        /*2.创建服务端socket*/
        s = socket(AF_INET, SOCK_STREAM, 0);
        
        /*3.设置服务端信息*/
        saddr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
read more

C语言中的格式占位符

C语言中的格式占位符:

%a,%A 读入一个浮点值(仅C99有效)
%c 读入一个字符
%d 读入十进制整数
%i 读入十进制,八进制,十六进制整数
%o 读入八进制整数
%x,%X 读入十六进制整数
%s 读入一个字符串,遇空格、制表符或换行符结束。
%f,%F,%e,%E,%g,%G 用来输入实数,可以用小数形式或指数形式输入。
%p 读入一个指针
%u 读入一个无符号十进制整数
%n 至此已读入值的等价字符数
%[] 扫描字符集合
%% 读%符号

MinGW (gcc) 给程序添加图标

一般步骤是:

step1:将.c源文件编译成.o目标文件
step2:将.rc资源源文件及其资源编译成.res资源文件
step3:将.o文件和.res文件连接成.exe文件

示例:

例如,有一个windows程序是prog.exe,这个程序的源文件是prog.c。现在打算把图标prog.ico添加到prog.exe程序中,这样做:

1、创建prog.rc文件,文件内容:

A ICON “prog.ico”

2、生成prog.res文件

windres -i prog.rc –input-format=rc -o prog.res -O coff

3、将prog.c编译成prog.o文件

gcc -c -o prog.o prog.c

4、连接成exe文件

gcc prog.o prog.res -o prog.exe