 |
不堵塞的等待函数
|
|
| |
| void CUtil::Wait(int nDelay, UINT nMsgFilter)
{
DWORD nStartTime = GetTickCount();
while (true)
{
DWORD nEndTime = GetTickCount();
if (nEndTime - nStartTime > (DWORD) nDelay)
break;
continue;
PumpMessages(NULL, nMsgFilter);
}
}
void CUtil::PumpMessages(HWND hWnd, UINT nMsgFilter)
{
MSG msg;
// Handle dialog messages
while(::PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
//需要过滤的消息
if(nMsgFilter && nMsgFilter == msg.message)
{
continue;
}
if(!::IsDialogMessage(hWnd, &msg))
{
::TranslateMessage(&msg);
::DispatchMessage(&msg); ...
|
|
| 作者:不祥 bluejoe张贴于2004-03-10 14:55:04.0,共阅读1871次,回复1次 |
|
|
 |
十进制/十六进制/二进制字串转化
|
|
| |
| //十进制->二进制
CString DecimalToBinary(CString strDecimal)
{
int nDecimal = atoi(strDecimal.GetBuffer(0));
int nYushu; //ÓàÊý
int nShang; //ÉÌ
CString strBinary = "";
char buff[2];
CString str = "";
BOOL bContinue = TRUE;
while(bContinue)
{
nYushu = nDecimal%2;
nShang = nDecimal/2;
sprintf(buff,"%d",nYushu);
str = strBinary;
strBinary.Format("%s%s",buff,str);
nDecimal = nShang;
if(nShang==0)
bContinue = FALSE;
}
return strBinary;
}
//十六进制到二进制
CString HexToBinary(CString strHex)
{
int nLen ...
|
|
| 作者:不祥 Bccv张贴于2004-03-30 10:02:56.0,共阅读3255次,回复2次 |
|
|
 |
用API 作简繁体转换
|
|
| |
| 1. 输入Big5字符,返回Gb简体字符
//---------------------------------------------------------------------------
//函数输入Big5字符,返回Gb简体字符
//---------------------------------------------------------------------------
AnsiString __fastcall Big2Gb(AnsiString sBig)
{
char* pszBig5=NULL; //Big5编码的字符
wchar_t* wszUnicode=NULL; //Unicode编码的字符
char* pszGbt=NULL; //Gb编码的繁体字符
char* pszGbs=NULL; //Gb编码的简体字符
AnsiString sGb; //返回的字符串
int iLen=0; //需要转换的字符数
pszBig5=sBig.c_str(); //读入需要转换的字符参数
//计算转换的字符数
iLen=MultiByteToWideChar (950 ...
|
|
| 作者:不祥 bluejoe张贴于2006-11-10 16:40:26.0,共阅读2940次,回复2次 |
|
|
 |
Windows消息值列表
|
|
| |
| /*
* Window Messages
*/
#define WM_NULL 0x0000
#define WM_CREATE 0x0001
#define WM_DESTROY 0x0002
#define WM_MOVE 0x0003
#define WM_SIZE 0x0005
#define WM_ACTIVATE 0x0006
/*
* WM_ACTIVATE state values
*/
#define WA_INACTIVE 0
#define WA_ACTIVE 1
#define WA_CLICKACTIVE 2
#define WM_SETFOCUS 0x0007
#define WM_KILLFOCUS 0x0008
#define WM_ENABLE 0x000A
#d ...
|
|
| 作者:不祥 bluejoe张贴于2004-03-11 09:15:39.0,共阅读4044次,回复3次 |
|
|
 |
手机短信PDU编码与解码
|
|
| |
| //将短信转化为待发送编码
//AT+CMGS=021
//0011000D91683176116125F0000801064F60597DFF01
//021 TPDU长度
//PDU:SMSC地址+TPDU
//00 服务中心号码(SMSC地址)
//11
//00 TP-MR(TP-Message-Reference)
//0D91683176116125F0 TP-DA 收信人手机号码
//00 TP-PID(TP-Protocol-Identifier)
//08 TP-DCS(TP-Data-Coding-Scheme)
//01 TP-VP(TP-Validy-Period)
//06 TP-UDL 短信长度
//4F60597DFF01 TP-UD 你好!
//服务中心号码、收信人手机号码格式
//0D Address-Length 地址长度
//91 Type-of-Address 地址类型
// Bits 7
// 1
// Bits 6 5 4
// 0 0 0 Unknown1
// 0 0 1 International number2
// 0 1 0 National number3
// 1 1 1 Reserved for extension
// Bits 3 2 ...
|
|
| 作者:不祥 bluejoe张贴于2004-04-25 11:15:41.0,共阅读7022次,回复4次 |
|
|
 |
中国邮递员问题的C++实现源代码
|
|
| |
| //PKU 2337
#include <cstdio>
#include <string>
#include <vector>
#include <stack>
#include <algorithm>
using namespace std;
const int MAX = 1100;
char str[MAX][25];
int n, in[MAX], out[MAX];
vector<string> words[30];
int vis[30];
int f[30], ss, is, os, ps;
int seq[MAX], step;
void find_euler(int pos)
{
int i,j;
while(out[pos])
{
for(; vis[pos] < words[pos].size() ;)
{
string snext = words[pos][ vis[pos] ];
j = snext[snext.length() -1] -’a’;
out[pos] --;
vis[pos] ++;
...
|
|
| 作者:yong yong张贴于2008-09-17 21:15:27.0,共阅读131次,回复0次 |
|
|
 |
哈密而顿回路近似实现的C语言代码
|
|
| |
| /*创建头文件my_hamilton.h*/
#ifndef __MY_HAMILTON_H__ #define __MY_HAMILTON_H__ //#define __MY_HAMILTON_DEBUG__ #define __MY_HAMILTON_RELEASE__ #define N_NODE 20 /* node number */ #define N_EDGE (N_NODE)*((N_NODE)-1)/2 /* edge number = 4(4-1)/2, for it’s undirected graph */ typedef struct EDGEWEIGHT_TP{ unsigned int edgeNum; /* edge number, start from 1 */ unsigned int node1; /* related node1, start from 1 */ unsigned int node2; /* ...
|
|
| 作者:yong yong张贴于2008-09-17 08:33:20.0,共阅读106次,回复0次 |
|
|
 |
VC6.0中使用ADO操作Access数据库
|
|
| |
| ...VC6.0中使用ADO操作Access数据库
ADO提供了一组非常简单,将一般通用的数据访问细节进行封装的对象。由于ODBC数据源也提供了一般的OLE DB Privider,所以ADO不仅可以应用自身的OLE DB Privider,而且还可以应用所有的ODBC驱动程序。关于OLE DB和ADO的其它详细情况,读者可以自行查阅相关书籍或MSDN,这里就不一一说明了。让我们直接步入主题,如何掌握ADO这种数据库访问技术ADO的操作方法和前面讲过的DAO的操作在很多方面存在相似之处,在这里,笔者为了更有效的说明它的使用方法,用VC6.0做了一个示例程序(AdoRWAccess),这个示例程序可以直接通过ADO来操作Access数据库,示例程序的运行效果如下图所示:
在示例程序中我们仍采用原库结构,数据库名Demo.mdb,库内表名DemoTable,表内字段名为Name(姓名)和Age(年龄)的两个字段,来构造示例程序操作所需的Access数据库,这也和上两篇文章的示例源码中的库结构相兼容。
。
下面让我们看看ADO数据库访问技术使用的基本步骤及方法:
首先,要用#import语句来引用支持ADO的组件类型库(*.tlb),其中类型库可以作为可执行程序(DLL、EXE等)的一部分被定位在其自身程序中的附属资源里,如:被定位在msado15.d ...
|
|
| 作者:Adding qiaoyongbo张贴于2007-12-21 15:44:35.0,共阅读1162次,回复4次 |
|
|
 |
请问怎样使用CMFCToolBar?
|
|
| |
| 怎样用这个类为程序添加多个自定义工具栏?谢谢!
|
|
| 作者:phili phili张贴于2008-09-05 01:52:13.0,共阅读127次,回复0次 |
|
|
 |
获取本地IP地址
|
|
| |
| CString CUtil::GetLocalIp()
{
struct hostent * phost;
char ip[20];
char hostname[50];
gethostname(hostname, 50);
phost = gethostbyname(hostname);
char * * names;
names = phost->h_aliases;
char * * iplist;
iplist = phost->h_addr_list;
while (* iplist)
{
strcpy(ip, inet_ntoa(* (struct in_addr *) * iplist));
iplist++;
}
CString LocalIp = ip;
return LocalIp;
}
|
|
| 作者:不祥 bluejoe张贴于2004-03-02 16:40:13.0,共阅读7340次,回复4次 |
|
|
 |
USB摄像头编程
|
|
| |
| 注意包含头文件qedit.h,dshow.h
几个函数如下,其中有一些全局变量,程序写的充忙,也就不整理了。参考了一些资料。
BOOL initVideo(void)
{
AM_MEDIA_TYPE amt;
CoInitialize(NULL); // COM的初期化
// ---- 输入计算的准备 ----
// 搜索输入装置
IBaseFilter *pbf = NULL;
IMoniker * pMoniker = NULL;
ULONG cFetched;
// 制作装置的各个部分
CoCreateInstance( CLSID_SystemDeviceEnum, NULL, CLSCTX_INPROC,
IID_ICreateDevEnum, (void ** ) &pDevEnum);
// 制作视频输入装置的各个部分
IEnumMoniker * pClassEnum = NULL;
pDevEnum -> CreateClassEnumer ...
|
|
| 作者:不祥 afra张贴于2004-05-29 17:34:02.0,共阅读9507次,回复4次 |
|
|
 |
[原创]内存文件读写类CMemoryFile(内存中模拟目录和文件)
|
|
| |
| 项目中常常需要将中间结果进行保存, 以供后续步骤进行处理. 如果以临时文件的方式往往容易"暴露"中间机密信息. 同时,文件IO读写也较浪费时间(说到这里,不得不BS一下windows的文件系统,当一个目录下的文件数目超过10000时,读写文件相当慢,Linux却没有这样的问题).
面对上面情况,本人想到了内存机制:
如果中间结果数据不超过2G(32位windows的内存地址上限).可以在内存中模拟一个文件系统.将这些信息以"内存文件"形式保存在"内存",同时也能提供"内存目录"(或"内存Db")支持.
下面是"内存文件类"的使用示例(使用上和一般的文件类没任何区别,只是不在磁盘上生成文件):
CMemoryFile pfile;
pfile.fopen( "c:/www/1235.bxk", "wb" );
pfile.fprintf( "aaa\nbbb\n" );
pfile.fclose();
CMemoryFile pfile0;
pfile0.fopen( "c:/www/1234.bxk", "wb" );
pfile0.fprintf( "aaa\nbbb\n" );
pfile0.fclose();
...
|
|
| 作者:成长的蚊子 highshow张贴于2008-02-22 14:00:15.0,共阅读917次,回复2次 |
|
|
 |
VC常用数据类型转换
|
|
| |
| 刚接触VC编程的朋友往往对许多数据类型的转换感到迷惑不解,本文将介绍一些常用数据类型的使用。我们先定义一些常见类型变量借以说明:
int i = 100;
long l = 2001;
float f=300.2;
double d=12345.119;
char username[]="程佩君";
char temp[200];
char *buf;
CString str;
_variant_t v1;
_bstr_t v2;
一、其它数据类型转换为字符串
短整型(int) itoa(i,temp,10);///将i转换为字符串放入temp中,最后一个数字表示十进制 itoa(i,temp,2); ///按二进制方式转换
长整型(long) ltoa(l,temp,10);
浮点数(float,double) 用fcvt可以完成转换,这是MSDN中的例子: int decimal, sign; char *buffer; double source = 3.1415926535; buffer = _fcvt( source, 7, &decimal, &sign ); 运行结果:source: 3.1415926535 buffer: '31415927' decimal: 1 sign: 0 decimal表示小数点 ...
|
|
| 作者:不祥 bluejoe张贴于2006-11-10 16:42:10.0,共阅读5361次,回复4次 |
|
|
 |
vc2005 中 CString转化int,int 转化CString
|
|
| |
| CString转int方法:
CString h;
int a=_ttoi(h);
int转化CString方法:
int a=1263;
CString h;
h.Format(_T("%d"),a);
|
|
| 作者:junxi junxi张贴于2007-06-21 17:30:14.0,共阅读2288次,回复2次 |
|
|
 |
初学者请教个问题
|
|
| |
| 刚学vc++,我新建了一个mfc,取名"冒泡程序",我如何在冒泡程序.cpp中添加 OnLButtonDown()函数呢?我没有使用vc++.net
|
|
| 作者:leryang leryang张贴于2008-03-10 21:30:09.0,共阅读636次,回复4次 |
|
|
 |
求 《Visual C++数字图像处理 第二版源码》
|
|
| |
| 请问谁有这个源代码能否传给我?hzwen_07@163.com QQ:310984233 非常感谢
|
|
| 作者:林川 hzw1987张贴于2008-03-22 16:34:08.0,共阅读728次,回复1次 |
|
|
 |
绘制桌面精灵
|
|
| |
| 如此临时创建的区域,由于计算需要很多的时间,所以使得有点闪烁。改进的方法有:
1、利用屏蔽位图进行处理,可以加快时间
2、如果精灵动作不是特别多,图片不是特别大的情况下,直接将所有创建的区域保存下来,不用每次都来创建和删除,这样将快很多,但是也消耗更多的内存。// 关键在于如何创建一个随意形状的窗口
准备一张带有透明色背景(就是背景都是一个颜色,呵呵)的bmp图片
创建与位图兼容的dc。然后创建一个空区域
hr=CreateRectRgn(0,0,0,0);
for (i=0;i < 图片宽度-2;i++)
{
for(j = 0;j< 图片高度-2;j++)
{
用dc得到图片i,j处的象素pixel
if( pexel !=透明色)
{
temp=CreateRectRgn(i,j,i+1,j+1);
CombineRgn(hr,hr,temp,RGN_OR);
DeleteObject(temp);
}
// 最后用SetWindowRgn函数将窗口形状设置成上面创建的区域的形状
SetWindowRgn(handle,hr,true);
DeleteObject(hr);
ps:如果有与位图相对应的屏蔽位图,用他们进行光栅 ...
|
|
| 作者:不祥 ISeekYou张贴于2004-05-13 14:55:04.0,共阅读2628次,回复2次 |
|
|
 |
全屏显示视图的代码
|
|
| |
| 开启全屏显示的代码:
void CViewerFrame::FullScreenShow()
{
GetWindowPlacement(&m_OldWndPlacement);
CRect WindowRect;
GetWindowRect(&WindowRect);
CRect ClientRect;
RepositionBars(0,0xffff,AFX_IDW_PANE_FIRST,reposQuery,&ClientRect);
ClientToScreen(&ClientRect);
int nFullWidth=GetSystemMetrics(SM_CXSCREEN);
int nFullHeight=GetSystemMetrics(SM_CYSCREEN);
m_FullScreenRect.left=WindowRect.left-ClientRect.left-1;
m_FullScreenRect.top=WindowRect.top-ClientRect.top-1;
m_FullScreenRect.right=WindowRect.right-ClientRect.right+nFullWidth+2;
m_FullScreenRect.bottom=WindowRect.bottom-Clie ...
|
|
| 作者:不祥 bluejoe张贴于2004-04-24 21:26:56.0,共阅读2823次,回复3次 |
|
|
 |
第一次使用
|
|
| |
| ...第一次来不太会用这个,
|
|
| 作者:小忆 wjshuiyi张贴于2008-04-15 09:47:39.0,共阅读577次,回复0次 |
|
|
 |
最大公约数的求法
|
|
| |
| int mcd(int a, int b)
{
if( a <= 0 || b <= 0 )
return -1;
int max,min;
max = a > b ? a : b;
min = a + b - max;
int temp;
//辗转相除
while( min )
{
temp = min;
min = max % min;
max = temp;
}
return max;
}
|
|
| 作者:不祥 bluejoe张贴于2004-02-20 23:47:58.0,共阅读3976次,回复6次 |
|
|