
VC++深入学习笔记
文章平均质量分 59
mfmfmmf1
这个作者很懒,什么都没留下…
展开
-
利用ADO从数据库的表中提取数据
本文的代码没有按照教材上的来在initDlg()中将listctrl风格改为整行选取m_list.SetExtendedStyle(m_list.GetExtendedStyle()|LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES );按键提取数据连接对象 记录集对象void CMy0714BDlg::OnBnClickedButton1(){原创 2015-07-15 07:01:43 · 1431 阅读 · 0 评论 -
鼠标钩子 键盘钩子
stdafx.hextern HHOOK g_hMouse; //全局变量应该在CPP中定义 在头文件中声明LRESULT CALLBACK MouseProc(int nCode,WPARAM wParam,LPARAM lParam); //定义鼠标钩子过程extern HHOOK g_hKeyboard; LRESULT CALLBACK KeyboardProc(int原创 2015-07-11 20:45:14 · 607 阅读 · 0 评论 -
显示调用基类构造函数,迟绑定,VC++编译链接过程
在派生类构造函数中显示调用基类构造函数public:fish():animal(400,300){}虚函数的多态性是用 "迟绑定"技术 实现的 late bindingVC++编译链接过程每个cpp分别单独预处理 编译 生成各自的obj文件这些obj文件再加上 标准库lib一起链接 生成exe原创 2015-06-15 21:01:47 · 452 阅读 · 1 评论 -
用钩子截去ALT+F4 用钩子关闭窗口
用钩子截去ALT+F4 ===========================================================================以下在stdafx.cpp 中定义的全局变量和函数 应该在.h中声明HHOOK g_hKeyboard = NULL; //钩子型全局变量 LRESULT CALLBACK KeyboardProc(in原创 2015-07-12 18:22:13 · 527 阅读 · 0 评论 -
初次ActiveX控件 (VS2010)
第一部分 制造测试ActiveX控件的容器程序第一步: 打开F:\Program Files\Microsoft Visual Studio 10.0\Samples\2052,可以看到一个VC2010Samples.zip的压缩包,解压之,里面有个C++的文件夹,继续打开其下的MFC\ole\TstCon,在里面有个TstCon.sln,打开之,里面有2个工程TCP原创 2015-07-04 17:15:28 · 562 阅读 · 0 评论 -
再次显式加载DLL
显示加载DLL过程比较简单 DLL文件复制到DEBUG文件下就可以了DLL工程.h#ifndef __JISUAN_0710A__ #define __JISUAN_0710A__ _declspec(dllimport) #endif #ifndef __JISUAN_0710A_EXTERN_C__ #define __JISUAN_0710A_E原创 2015-07-11 18:54:37 · 352 阅读 · 0 评论 -
匿名管道 父子进程间通信
第一:匿名管道只能实现本地进程之间的通信,不能实现跨网络之间的进程间的通信。第二:匿名管道只能实现父进程和子进程之间的通信,而不能实现任意两个本地进程之间的通信。父子进程 又是一个双工程 DEBUG文件夹中将产生两个exe运行的方式是运行 父.exe 然后父会在运行过程中调用子进程在父工程view中 添加两个成员和三个菜单顶private: HANDLE hWrite;原创 2015-07-01 17:38:55 · 1465 阅读 · 0 评论 -
动态链接库 隐式链接 首次接触分歧定义(同样字段cpp中翻译为export 头文件里翻译为import)
WIN API的所有函数都包含在DLL中,最重要的有三个DLLKernel32.dll管理内存 进程 和线程User32.dll 窗口界面与消息GDI32.dll 画图和显示文本加载DLL的方式有两种 隐式链接 显示加载两种方法对于你的程序调用动态库时没有任何区别,只是你在编程时,步骤是不一样的。显式调用麻烦了点,但可以没有相应的lib库;隐式调用,原创 2015-07-08 17:25:05 · 343 阅读 · 0 评论 -
DLL 导入类
将LIB文件复制到testB文件夹里(textB与Debug和Release文件夹平级)将DLL文件复制到Debug文件夹里(不复制编译能通过但不能运行)头文件也复制到 lib 所在的文件夹下空白win32 DLL工程中 新建CPP 和H.h#ifndef __JISUAN_0709B__ #define __JISUAN_0709B__ _原创 2015-07-09 17:14:29 · 448 阅读 · 0 评论 -
命名管道
此工作空间也是双工程不同的是,服务端与客户端分别独立打开服务端点击后,在被客户端连接之前,将处于一个未响应状态以下是服务端===================================================================private: HANDLE hPipe;public: afx_msg void OnDestroy(); afx_原创 2015-07-02 08:41:26 · 467 阅读 · 1 评论 -
为ActiveX控件添加对话框
1在资源rc中 添加对话框并向对话框上拖放一个按钮对话框的属性做下修改:Border改为None,Control改为Ture,Style改为Child,System改为False,Visible改为True,然后在对话框中双击,为对话框添加一个类(将会自动打开类精灵)2在Ctrl.h中public: ViewDlg m_dlg; //自定义的对话框3int Ccl原创 2015-07-05 18:42:55 · 1016 阅读 · 0 评论 -
ActiveX 添加自定义属性
在我看来 ActiveX 添加自定义属性就是 添加有接口的成员变量然后在onDraw中写代码 把这个成员变量显示出来在接口中修改这个变量的方法是Control -> Invork原创 2015-07-06 07:04:53 · 646 阅读 · 0 评论 -
ActiveX 自定义事件
默认事件是不需要设计触发条件的比如选择了click事件 如果鼠标点到了控件上 控件就会向容器程序发送事件自定义事件的触发条件是在ActiveX内部设计的比如 设计时间每到第0秒的时候 就触发一次事件 事件名称设为NEW_MINUTE将自定义事件名称设为 NEW_MINUTE后 将会自动生成代码// Event mapBEGIN_EVENT_MAP(CM原创 2015-07-07 17:08:32 · 785 阅读 · 0 评论 -
全局钩子为什么要用DLL 共享节
利用全局钩子 在别的进程窗口下 关闭test窗口关于全局钩子为什么一定要在DLL中2013-12-05 13:02使徒辟允382 分类:网站使用 | 浏览 66 次我有更好的答案分享到:举报| 2013-12-05 14:03提问者采纳如果你只hook本进程得消息,可以把消息回调原创 2015-07-13 19:39:46 · 1552 阅读 · 0 评论 -
用全局钩子截掉所有进程的鼠标和键盘 DLL的调试方法
在DLL CPP中#include HWND g_hwnd;HHOOK g_hMouse=NULL;HHOOK g_hKeyboard=NULL;//鼠标钩子过程LRESULT CALLBACK MouseProc(int nCode,WPARAM wParam,LPARAM lParam){ ; return 1; //这个钩子将屏蔽掉所有鼠标消息}LRESULT原创 2015-07-13 17:14:37 · 612 阅读 · 0 评论 -
ActiveX 属性持久性 是否是测试环境判断
用户不会希望每次开始程序 要重新设置属性值void CMy0705BCtrl::DoPropExchange(CPropExchange* pPX) //此函数用来提供属性的持久性{ ExchangeVersion(pPX, MAKELONG(_wVerMinor, _wVerMajor)); COleControl::DoPropExchange(pPX); // TODO: Ca原创 2015-07-07 19:30:11 · 374 阅读 · 0 评论 -
ActiveX 方法和事件
添加方法=================================================================================仍然是在接口中添加方法调用方法添加事件==============================================================================原创 2015-07-06 12:08:16 · 393 阅读 · 0 评论 -
对话框容器环境响应Active控件事件 动态创建ActiveX
1 在对话框面板上静态添加ActiveX控件在对话框面板上 右键->Insert ActiveX control在控件的属性中 添加对控件的事件响应(要求编写ActiveX控件的时候已经添加了事件)2 动态添加Active控件 以及响应事件首先添加ActiveX控件类在Dlg.h中#include "CDMy0705B.h"原创 2015-07-06 19:52:23 · 731 阅读 · 0 评论 -
由空白win32工程起,手动设计一个窗口程序
#include #include LRESULT CALLBACK WinSunProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam);int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCm原创 2015-06-15 19:54:20 · 403 阅读 · 0 评论 -
win32 消息
API 应用程序接口 SDK 软件开发包 包含API消息队列 对于windows程序 运行时 任何操作首先是由系统收到,系统将操作转化为消息发给程序分为进队消息和不进队消息进队消息不进队消息 WM_PAINT添加属性 style=stle | A去除属性 style=style & ~B两种函数调用约定_cdecl 默认方式 参数个数可变原创 2015-06-15 17:50:14 · 307 阅读 · 0 评论 -
ActiveX 添加标准属性
一个控件添加属性后 属性会出现在控件的接口中在下拉列表中出现的属性 都是标准属性为了显示出属性效果添加以下代码 功能是以背景色填充背景 以前景色写文字void CMy0705BCtrl::OnDraw( CDC* pdc, const CRect& rcBounds, const CRect& rcInvalid){ if (!pdc) return;原创 2015-07-06 06:17:04 · 554 阅读 · 0 评论 -
邮槽
剪切板,匿名管道,命名管道,邮槽 的总结剪切板和匿名管道只能实现同一台机器上两个进程间的通信 不能跨网络命名管道和邮槽可以跨网络邮槽可以一对多广播(一个客户端多个服务器) 数据量小 424字节以下命名管道 一对一 数据量可以大服务端==========================================================vo原创 2015-07-02 16:22:38 · 484 阅读 · 0 评论 -
串行化(序列化) 使用CArchive进行读写
将类的对象存入硬盘 就称之为串行化void CMainFrame::OnSave1() //存{CFile file("abc.txt",CFile::modeCreate|CFile::modeWrite);::CArchive ar(&file,::CArchive::store);int i=4;char ch='a';float f=1.3f;//数值尾转载 2015-06-23 18:47:12 · 524 阅读 · 0 评论 -
修改应用程序外观 注册和使用自定义窗口结构体
修改大小,标题,能否最大化======================================BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs){if( !CFrameWndEx::PreCreateWindow(cs) )return FALSE;// TODO: Modify the Window class or转载 2015-06-19 19:19:40 · 380 阅读 · 0 评论 -
自定义消息 + 在状态栏走进度条
1 在mainFrame CPP 中#define WM_DATA WM_USER+100 //定义一个自定义消息2在h 中afx_msg LRESULT OnData(WPARAM wParam,LPARAM lParam); //添加声明DECLARE_MESSAGE_MAP()3 在APP中BEGIN_MESSAGE_MAP(CMainFrame, CFrame原创 2015-06-20 20:00:19 · 422 阅读 · 0 评论 -
用三个函数捕捉消息 先后顺序 判断消息的来源 子窗口的判断
APP 的PreTranslateMessage(MSG* pMsg)APP的ProcessMessageFilter(int code, LPMSG lpMsg)Dlg的PreTranslateMessage(MSG* pMsg)消息被捕捉的顺序是 1 APP 的 PreTranslateMessage2 Dlg 的 PreTranslateMessage3 APP的原创 2015-06-19 17:21:38 · 577 阅读 · 0 评论 -
卡拉OK式渐变色滚屏
this->m_w=0;this->SetTimer(1,100,NULL);====================================================OnTimerCString str;str="今天天气不错,挺风和日丽的";m_w+=5;CClientDC dc(this);dc.SetTextColor(RGB(0,原创 2015-06-18 06:18:24 · 438 阅读 · 0 评论 -
用发消息方式实现加法运算
void CMy0618ADlg::OnBnClickedButton1(){// TODO: Add your control notification handler code hereint x,y,z;char char1[10],char2[10],char3[10];//this->SendMessage();::SendMessageA(this->GetDl转载 2015-06-18 14:11:57 · 399 阅读 · 0 评论 -
修改窗口过程函数:按下回车后 焦点转移到下一个编辑框
为了使EDIT控件能收到回车键 属性mutiline要改为TRUE方法1 ======================================================================WNDPROC prevProc;LRESULT CALLBACK NewEditProc(HWND hwnd,UINT uMsg,WPARAM wP原创 2015-06-18 19:37:54 · 1828 阅读 · 0 评论 -
绘图,路径
void CMy0617BView::OnDraw(CDC* pDC){CMy0617BDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);if (!pDoc)return;CMy0617BDoc* p2=this->GetDocument();ASSERT_VALID(p2);//valid 有效的CString s原创 2015-06-17 19:59:40 · 392 阅读 · 0 评论 -
文档窗口标题修改
整个标题的修改: 先在框架类mainframe的PreCreateWindow函数前面加入一条语句:cs.style &= ~FWS_ADDTOTITLE;则函数变为: BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs) { cs.style &= ~FWS_ADDTOTITLE转载 2015-06-17 19:09:50 · 491 阅读 · 0 评论 -
绘图 在客户区 在窗口全区 在屏幕全区 透明画刷
void CMy0617AView::OnLButtonUp(UINT nFlags, CPoint point){//CWindowDC dc(this);//客户区//CWindowDC dc(this->GetParent());//窗口区CWindowDC dc(this->GetDesktopWindow());//全屏dc.MoveTo(this->原创 2015-06-17 18:16:39 · 601 阅读 · 0 评论 -
文件不关闭防断电追加写入 写读注册表
void CMy0622BDlg::write_to_file(void){CString str;this->GetDlgItem(IDC_EDIT1)->GetWindowTextA(str);str=str+"\n";FILE* pfile=::fopen("./abc.txt","a");::fwrite(str,1,::strlen(str),pfile);原创 2015-06-22 20:51:30 · 423 阅读 · 0 评论 -
程序 进程 线程 初次多线程
一个程序可以对应多个进程 如 记事本可以打开好多个一个进程也可以同时访问多个程序每个进程有独立的虚拟地址空间,不同进程内,即使使用相同内存地址实际也是不同的物理内存进程由两部分组成1 内核对象2 地址空间 包含所有的可执行模块 或 DLL模块的代码和数据 还包含 栈(stack)和 堆(heap)真正执行代码的是线程,进程只是线程的容器,一个进程可原创 2015-06-24 20:31:54 · 336 阅读 · 0 评论 -
(本来就能)跨进程的剪切板
void CMy0629ADlg::OnBnClickedButton1() //复制进剪切{ // TODO: Add your control notification handler code here if(this->OpenClipboard()) //打开剪切板 { CString str; // HANDLE hClip; //保存::Glob原创 2015-06-29 20:14:59 · 490 阅读 · 0 评论 -
异步选择机制聊天室
本程序在同一线程内实现了接收端和发送端,与上一章多线程聊天室 的结果类似在编写网络程序时,采用异步选择机制可能提高网络应用程序的性能,如果再配合多线程,将再进一步提高程序性能#include #pragma comment(lib, "ws2_32.lib")BOOL CMy0627AApp::InitInstance(){ CWinApp::InitInstanc原创 2015-06-28 20:10:15 · 534 阅读 · 0 评论 -
关键代码段
#include "stdafx.h"#include #include #include using namespace std;DWORD WINAPI fun1(LPVOID lpParameter);DWORD WINAPI fun2(LPVOID lpParameter);int tickets=20;CRITICAL_SECTION g_cs;原创 2015-06-26 20:41:53 · 469 阅读 · 0 评论 -
互斥对象 事件对象 关键代码段的比较
互斥对象与事件对象属于内核对象 速度慢 多个进程实现同步,可以使用互斥对象和关键代码段关键代码段 同步速度快 无法设定超时值 容易进入死锁 优先选择互斥对象HANDLE hMutex;::hMutex=::CreateMutexA(NULL,FALSE,NULL);::WaitForSingleObject(::hMutex,INFINITE);::Rele原创 2015-06-27 12:17:59 · 539 阅读 · 0 评论 -
利用事件对象 实现线程同步
#include "stdafx.h"#include #include #include using namespace std;DWORD WINAPI fun1(LPVOID lpParameter);DWORD WINAPI fun2(LPVOID lpParameter);int tickets=20;HANDLE g_hEvent;int原创 2015-06-26 18:09:10 · 616 阅读 · 1 评论 -
互斥对象 可以避免脏读
#include "stdafx.h"#include #include #include using namespace std;DWORD WINAPI m_fun1(LPVOID lpParameter);DWORD WINAPI m_fun2(LPVOID lpParameter);int tickets=30;HANDLE hMutex;原创 2015-06-25 09:53:46 · 369 阅读 · 0 评论