
编程
非与非
壁立千仞无欲则刚
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
VC:fork
函数定义pid_t fork( void ); (pid_t 是一个宏定义,其实质是int 被定义在#include中)返回值: 若成功调用一次则返回两个值,子进程返回0,父进程返回子进程ID;否则,出错返回-1 函数说明: 一个现有进程可以调用fork函数创建一个新进程。由fork创建的新进程被称为子进程(child process)。fork函数被调用一次但返回两次。两次返原创 2011-06-01 16:00:00 · 845 阅读 · 0 评论 -
VC:进程间通信
进程间通信方式的种类 (1)管道(Pipe)及有名管道(named pipe):管道可用于具有亲缘关系进程间的通信,有名管道,除具有管道所具有的功能外,它还允许无亲缘关系进程间的通信。(2)信号(Signal):信号是在软件层次上对中断机制的一种模拟,它是比较复杂的通信方式,用于通知进程有某事件发生,一个进程收到一个信号与处理器收到一个中断请求效果上可以说是一样的。原创 2011-06-01 15:51:00 · 614 阅读 · 0 评论 -
VC:保护区域的设定
CString str; CSize sz=pDC->GetTextExtent(str); pDC->BeginPath(); pDC->Rectangle(50,50,50+sz.cx,50+sz.cy); pDC->EndPath(); pDC->SelectClipPath(RGN_DIFF);原创 2012-01-27 20:36:56 · 322 阅读 · 0 评论 -
VC:窗口收缩和扩展的方法
采用一个高度为1矩形,暂作为窗口的分割线。 CString str; if(GetDlgItemText(IDC_BUTTON2,str),str=="收缩 { SetDlgItemText(IDC_BUTTON2,"扩展>>"); } else { SetDlgItemText(IDC_BUTTON2,"收缩 } static CRect rec原创 2012-01-27 21:00:30 · 1123 阅读 · 0 评论 -
VC:增加新的工具栏
STEP1:定义 CToolBar m_newToolBar;STEP2:增加如下部分int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct){ if (!m_newToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_RIGHT | CBRS_原创 2012-01-31 22:48:22 · 397 阅读 · 0 评论 -
VC:改变控件的背景颜色及字体
CFont m_font;CBrush m_brush;m_brush.CreateSolidBrush(RGB(0,0,255));m_font.CreatePointFont(200,"华文行楷"); HBRUSH CSettingDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) { HBRUSH hbr =原创 2012-02-01 01:14:33 · 613 阅读 · 0 评论 -
VC:在单视图窗口中,增减scroll bar
STEP1:class CTuxingView : public CScrollView //将CView修改为 CScrollViewSTEP2:在XXXVIEW.CPP中,将CView基类,修改为 CScrollViewSTEP3:在view中,重新实现 OnInitialUpdate 虚函数void CTuxingView::OnInitialUpdate() { CSc原创 2012-02-01 11:26:01 · 670 阅读 · 0 评论 -
VC:读写文件 及 注册表
void CFileView::OnFileWrite() { // TODO: Add your command handler code here CFileDialog fileDlg(FALSE); fileDlg.m_ofn.lpstrTitle="我的文件保存对话框"; fileDlg.m_ofn.lpstrFilter="Text Files(*.txt)\0*.原创 2012-02-01 11:58:50 · 497 阅读 · 0 评论 -
VC:程序、进程和线程
程序是计算机指令的集合,它以文件的形式存储在磁盘上。进程:通常被定义为一个正在运行的程序的实例,是一个程序在其自身的地址空间中的一次执行活动。进程是资源申请、调度和独立运行的单位,因此,它使用系统中的运行资源;而程序不能申请系统资源,不能被系统调度,也不能作为独立运行的单位,因此,它不占用系统的运行资源。进程由两个部分组成: 1、操作系统用来管理进程的内核对象。内核原创 2012-02-01 16:17:35 · 457 阅读 · 0 评论 -
VC:线程同步与通信
线程同步与通信线程同步与异步套接字编程事件对象也属于内核对象,包含一个使用计数,一个用于指明该事件是一个自动重置的事件还是一个人工重置的事件的布尔值,另一个用于指明该事件处于已通知状态还是未通知状态的布尔值。有两种不同类型的事件对象。一种是人工重置的事件,另一种是自动重置的事件。当人工重置的事件得到通知时,等待该事件的所有线程均变为可调度线程。当一个自动重置的事件得到通知时,等待该事件原创 2012-02-02 10:03:35 · 487 阅读 · 0 评论 -
VC:油槽参考程序
油槽参考程序(油槽是单向的)发送程序:void CMailslotCltView::OnMailslotSend() { // TODO: Add your command handler code here HANDLE hMailslot; hMailslot=CreateFile("\\\\.\\mailslot\\MyMailslot",GENERIC_WRITE,原创 2012-02-02 10:31:25 · 744 阅读 · 0 评论 -
VC:va_list用法---隐含参数的使用方法
va_list用法---隐含参数的使用方法及IO使用说明目的:掌握VA_LIST用法熟悉输入/出的实质,要建立起IO的概念,避免输入出停留在终端阶段设计到IO设备,便一点设计到 阻塞、非阻塞、多路转换 信号驱动 异步控制等 · 阻塞I/O模型:在这种模型下,若所调用的I/O函数没有完成相关的功能,则会使进程挂起,直到相关数据到达才会返回。如常见对管道设备、终端设备和原创 2011-05-31 10:59:00 · 2278 阅读 · 0 评论 -
C语言:可变参数的函数(VA使用说明)
可变参数的函数(VA使用说明)type va_arg( va_list arg_ptr, type );void va_end( va_list arg_ptr );void va_start( va_list arg_ptr, prev_param ); (ANSI version)例子://include header file#include #include原创 2012-02-13 18:53:41 · 693 阅读 · 0 评论 -
C语言:enum 类型利用
#include typedef enum dvdState{ STATE_NULL=0, STATE_STOP, STATE_PLAY,};int main() { dvdState tmpState; tmpState = STATE_PLAY; printf("%d",tmpState); return 0;} 说明两点:一点是,原创 2012-03-20 10:32:59 · 562 阅读 · 0 评论 -
VC:字体创建和输出
CFont font; font.CreatePointFont(100,"华文行楷",NULL); CFont *pOldFont=dc.SelectObject(&font); TEXTMETRIC tm; dc.GetTextMetrics(&tm); if(0x0d==nChar) { m_strLine.Empty(); m_ptOrigin.y+=t原创 2012-01-27 20:35:31 · 513 阅读 · 0 评论 -
VC:如何创建属性对话框
属性表单的创建:1)创建属性表单的窗口2)对各个窗口,生成基于CPropertyPage的新的类3)创建CPropertySheet类的新的类4)将各个属性页面加入到,PropertySheet中5)在各个属性窗口中需要注意如下函数的实现:OnInitDialog : 可做一些初始化动作OnSetActive : ((CPropertySheet *)GetParent原创 2012-01-28 16:05:43 · 667 阅读 · 0 评论 -
VC:框架图标变化
extern CStyleApp theApp;HICON m_hIcons[3];int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct){//通过三种方法获取ICON资源 m_hIcons[0]=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDI_ICON1));原创 2012-01-31 22:37:33 · 332 阅读 · 0 评论 -
VC:状态栏增加时间显示信息
STEP1:在resource 的 string table中,增加IDS_TIMERSTEP2:在indicators[]数组中,增加 IDS_TIMER 项STEP3:修改如下函数static UINT indicators[] ={ ID_SEPARATOR, // status line indicator IDS_TIMER, ID_IND原创 2012-01-31 22:44:27 · 700 阅读 · 0 评论 -
VC:字体对话框 及 颜色对话框
void CGraphicView::OnColor() { // TODO: Add your command handler code here CColorDialog dlg; dlg.m_cc.Flags|=CC_RGBINIT | CC_FULLOPEN; dlg.m_cc.rgbResult=m_clr; if(IDOK==dlg.DoModal()) {原创 2012-02-01 01:18:46 · 438 阅读 · 0 评论 -
VC:使新的类支持串行化
STEP1:修改该类,从CObject 继承class CGraph:public CObjectSTEP2:实现void CGraph::Serialize(CArchive& ar)函数STEP3:类中实现一个空的构造函数STEP4:在类开始处增加支持串行化的宏 DECLARE_SERIAL(CGraph)STEP5:定义类的版本号 IMPLEMENT_SERIAL(CGr原创 2012-02-01 15:14:41 · 963 阅读 · 0 评论 -
VC:简单聊天室程序2 --- 基于消息的异步套接字
简单聊天室程序2 --- 基于消息的异步套接字#define UM_SOCK WM_USER+1ON_MESSAGE(UM_SOCK,OnSock)BOOL CChatDlg::InitSocket(){ m_socket=WSASocket(AF_INET,SOCK_DGRAM,0,NULL,0,0); if(INVALID_SOCKET==m_socket) {原创 2012-02-02 10:17:32 · 800 阅读 · 0 评论 -
VC:剪切板参考程序
剪切板参考程序void CClipboardDlg::OnBtnSend() { // TODO: Add your control notification handler code here if(OpenClipboard()) { CString str; HANDLE hClip; char *pBuf; EmptyClipboard();原创 2012-02-02 10:27:46 · 520 阅读 · 0 评论 -
C语言:嵌入式系统的消息机制
消息响应:消息有多种:IR/KEY/系统及异常 消息处理消息的最佳机制:队列消息处理得好,直接关系到系统的耦合性及健壮性。下面给出一个消息机制的框架: 数据结构:typedef struct{ BYTE encode_command_out; BYTE encode_command_cnt; UINT16 encode原创 2011-05-04 10:32:00 · 3082 阅读 · 0 评论 -
C语言:size_t说明
size_t是什么类型的?为了增强程序的可移植性,便有了size_t,它是为了方便系统之间的移植而定义的,不同的系统上,定义size_t可能不一样。 在32位系统上 定义为 unsigned int 也就是说在32位系统上是32位无符号整形。在64位系统上定义为 unsigned long 也就是说在64位系统上是64位无符号整形。size_t一般用来表示一种计数,比如有多少东西被原创 2012-03-19 11:28:11 · 5969 阅读 · 0 评论 -
C语言:消息实现
//根据不同的路径和关键字产生标准的KEYkey = ftok(".",'a' == -1){error("fork");exit(1);}//创建消息队列qid = msgget(key,IRC_CREAT|0666) //获取消息fgets(msg.msg_txt,BUFFER_SIZE,stdin)//添加到消息队列msgsnd(qid,&ms原创 2011-11-05 10:37:15 · 499 阅读 · 0 评论 -
C语言:宏中"#"和"##"的用法
http://download.youkuaiyun.com/download/zglgoon/1928736如上是介绍ECOS一片不错的文章,想了解ECOS的可以看看。 宏中"#"和"##"的用法一、一般用法我们使用#把宏参数变为一个字符串,用##把两个宏参数贴合在一起.用法:#include#includeusing namespace std;#define ST原创 2012-01-31 18:29:34 · 346 阅读 · 0 评论 -
VC:卡拉OK字体的变色方法
void CTextView::OnTimer(UINT nIDEvent) { // TODO: Add your message handler code here and/or call default m_nWidth+=5; CClientDC dc(this); TEXTMETRIC tm; dc.GetTextMetrics(&tm); CRect rec原创 2012-01-27 20:36:06 · 619 阅读 · 0 评论 -
VC:画刷和画笔
创建画笔: CPen pen(PS_SOLID,1,RGB(255,0,0)); CPen *pOldPen=dc.SelectObject(&pen); dc.SelectObject(pOldPen); 创建普通画刷 CClientDC dc(this); CBrush brush(RGB(255,0,0)); dc.FillRect(CRect(m_ptOri原创 2012-01-27 20:38:11 · 546 阅读 · 0 评论 -
VC:对话框控件访问七种方式
GetDlgItem()->Get(Set)WindowText()GetDlgItemText()/SetDlgItemText()GetDlgItemInt()/SetDlgItemInt()将控件和整型变量相关联将控件和控件变量相关联SendMessage()SendDlgItemMessage()例: CString str; if(GetDlgIt原创 2012-01-27 20:42:08 · 442 阅读 · 0 评论 -
VC:Z轴和窗口
Z轴: 窗口的Z次序表明了重叠窗口堆中窗口的位置,这个窗口堆是按一个假想的轴定位的,这个轴就是从屏幕向外伸展的Z轴。Z次序最上面的窗口覆盖所有其它的窗口,Z次序最底层的窗口被所有其它的窗口覆盖。应用程序设置窗口在Z次序中的位置是通过把它放在一个给定窗口的后面,或是放在窗口堆的顶部或底部。 Windows系统管理三个独立的Z次序——一个用于顶层窗口、一个用于兄弟窗口,还有一个原创 2012-01-27 20:44:14 · 3435 阅读 · 0 评论 -
VC:如何获得当前程序的视图,文档指针
如何获得当前程序的视图,文档指针1)首先需要在CyourView.h中,包含CMainFrm.h2)在需要获得指针的文件中,包含CyouView.h3)获取当前框架的指针CMainFrame* pFrame = (CMainFrame*)AfxGetMainWnd();4)之后可以获取当前文档和视图的指针获取视图指针方法:((CMyView *)(pFrame-原创 2012-01-28 15:56:55 · 3252 阅读 · 0 评论 -
VC:使用VC自带的splash screen控件
STEP1:导入控件,并生成对应的类,及头文件 STEP2:导入后,VC会帮我们加入如下代码int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct){ CSplashWnd::ShowSplashScreen(this); }STEP3:根据自己的要求,修改参数或方法。如修改显示Splash Screen原创 2012-01-31 23:06:21 · 1034 阅读 · 0 评论 -
VC:增加自定义消息
STEP1:定义消息#define UM_TEST WM_USER+1STEP2:填写消息的映射关系class CMainFrame : public CFrameWnd{protected: //{{AFX_MSG(CMainFrame) afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct); afx_msg vo原创 2012-01-31 23:57:07 · 400 阅读 · 0 评论 -
VC:二进制文件和文本文件
文件在计算机内存中以二进制表示的数据在外部存储介质上的另一种存放形式。 文件通常分为二进制文件和文本文件。 二进制文件是包含在 ASCII 及扩展 ASCII 字符中编写的数据或程序指令的文件。一般是可执行程序、图形、图象、声音等等文件。 文本文件(也称为ASCII文件):它的每一个字节存放的是可表示为一个字符的ASCII代码的文件。它是以 “行”为基本结构的一种信息组织和原创 2012-02-01 11:51:27 · 832 阅读 · 0 评论 -
VC:简单聊天室程序1 --- 多线程编写网络聊天室程序
简单聊天室程序1 --- 多线程编写网络聊天室程序#define WM_RECVDATA WM_USER+1ON_MESSAGE(WM_RECVDATA,OnRecvData)struct RECVPARAM{ SOCKET sock; HWND hwnd;};BOOL CChatDlg::InitSocket(){ m_socket=socket(AF_原创 2012-02-02 10:17:08 · 1613 阅读 · 0 评论 -
C语言:指向常量的指针 和 指针常量
指向常量的指针 char ch[5]=“lisi”; const char * pStr=ch; 表示指向的对象是常量 *pStr=‘w’; //error pStr=“wangwu”; //ok 指针常量char ch[5]=“lisi”; char * const pStr=ch;原创 2012-02-01 11:48:12 · 466 阅读 · 0 评论 -
VC:日志文件用法
日志文件用法 #include int main(int argc, char **argv) { openlog("MyMsgMARK", LOG_CONS | LOG_PID, 0); syslog(LOG_DEBUG, "This is a syslog test message generated by program '%s'/n", argv[0]);close原创 2011-06-01 15:12:00 · 542 阅读 · 0 评论 -
VC: 如何获得当前程序的视图,文档指针
如何获得当前程序的视图,文档指针1)首先需要在CyourView.h中,包含CMainFrm.h2)获取当前框架的指针CMainFrame* pFrame = (CMainFrame*)AfxGetMainWnd();3)之后可以获取当前文档和视图的指针获取视图指针方法:((CMyView *)(pFrame->GetActiveView()))获取文档指针的方法:原创 2013-04-16 18:56:16 · 777 阅读 · 0 评论 -
c语言 小知识
1)/r /n说明/r是回车符,/n是换行符计算机还没有出现之前,有一种叫做电传打字机(Teletype Model 33)的玩意,每秒钟可以打10个字符。但是它有一个问题,就是打完一行换行的时候,要用去0.2秒,正好可以打两个字符。要是在这0.2秒里面,又有新的字符传过来,那么这个字符将丢失。 于是,研制人员想了个办法解决这个问题,就是在每行后面加两个表示结束的字符。一个叫做“回原创 2011-03-15 00:26:00 · 390 阅读 · 0 评论 -
C语言:offsetof-利用不变的偏移量来求得链表数据项的变量地址
#undef offsetof #ifdef __compiler_offsetof #define offsetof(TYPE,MEMBER) __compiler_offsetof(TYPE,MEMBER) #else #define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER) #endif 一共4步原创 2012-03-19 11:20:36 · 862 阅读 · 0 评论