 |
绘制桌面精灵
|
|
| |
| 如此临时创建的区域,由于计算需要很多的时间,所以使得有点闪烁。改进的方法有:
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,共阅读2724次,回复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,共阅读2925次,回复3次 |
|
|
 |
第一次使用
|
|
| |
| ...第一次来不太会用这个,
|
|
| 作者:小忆 wjshuiyi张贴于2008-04-15 09:47:39.0,共阅读651次,回复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,共阅读4090次,回复6次 |
|
|
 |
CListCtrl与CListView相关代码
|
|
| |
| 选择项的问题
双击响应函数里的参数有一个是NM_LISTVIEW *
msdn查NMLISTVIEW(把中间那个_去掉)能看到这个结构中有一个成员变量是iItem
0表示第一行,1表示第二行;还有一个iSubItem表示列,0表示双击在第一列
CListCtrl大小图标转换
先要添加控制按纽(大图标,小图标,列表,详细)
void OnBig()
{ LONG lStyle;
lStyle = GetWindowLong(m_ListCtrl.m_hWnd,GWL_STYLE);//获取当前窗口句并
lStyle&=~ LVS_TYPEMASK;//清除显示方式所在的比特为
lStyle |= LVS_ICON;//设置显示方式
SetWindowLong(m_listCtrl.m_hWnd, GWL_STYLE,lStyle);//设置窗口类型 ...
|
|
| 作者:不祥 jerry张贴于2004-03-10 18:19:36.0,共阅读4730次,回复1次 |
|
|
 |
C++ Primer(第4版)习题解答[2]
|
|
| |
| 习题4.1
假设get_size是一个没有参数并返回int值的函数,下列哪些定义是非法的?为什么?
unsigned buf_size = 1024
(a) int ia[buf_size];
(b) int ia[get_size()];
(c) int ia[4*7-14];
(d) char st[11] = "fundamental" ;
【解答】
(a)非法,buf_size是一个变量,不能用于定义数组的维数(维长度)。
(b)非法,get_size()是函数调用,不是常量表达式,不能用于定义数组的维数(维长度)。
(d)非法,存放字符串"fundamental"的数组必须有12个元素,st只有11个元素。
习题4.2
下列数组的值是什么?
string sa[10];
int ia[10];
int main(){
string sa2[10];
int ia2[10];
}
【解答】
sa和sa2为元素类型为string的数组,自动调用string类的默认构造函数将各元素初始化为空字符串;ia为在函数体外定义的内置数组,各元素初始化为0;ia2为在函数体内定义的内置数组,各元素未初始化,其值不确定。
习题4.3
下列哪些定义是错误的?
(a) i ...
|
|
| 作者:白乔 bluejoe张贴于2008-02-19 13:33:40.0,共阅读1030次,回复0次 |
|
|
 |
C++ Primer(第4版)习题解答
|
|
| |
| 习题1.1
查看所用的编译器文档,了解它所用的文件命名规范。编译并运行本节的main程序。
【解答】
一般而言,C++编译器要求待编译的程序保存在文件中。C++程序中一般涉及两类文件:头文件和源文件。大多数系统中,文件的名字由文件名和文件后缀(又称扩展名)组成。文件后缀通常表明文件的类型,如头文件的后缀可以是.h或.hpp等;源文件的后缀可以是.cc或.cpp等,具体的后缀与使用的编译器有关。通常可以通过编译器所提供的联机帮助文档了解其文件命名规范。
习题1.2
修改程序使其返回-1。返回值-1通常作为程序运行失败的指示器。然而,系统不同,如何(甚至是否)报告main函数运行失败也不同。重新编译并再次运行程序,看看你的系统如何处理main函数的运行失败指示器。
【解答】
笔者所使用的Windows操作系统并不报告main函数的运行失败,因此,程序返回-1或返回0在运行效果上没有什么区别。但是,如果在DOS命令提示符方式下运行程序,然后再键入echo %ERRORLEVEL%命令,则系统会显示返回值-1。
习题1.3
编一个程序,在标准输出上打印“Hello, World”。
【解答】
#include<iostream>
int main()
{
std::cout << "Hello, World" << std ...
|
|
| 作者:白乔 bluejoe张贴于2008-02-19 13:31:45.0,共阅读1033次,回复0次 |
|
|
 |
【转】设置窗口的透明度
|
|
| |
| ...
设置窗口的透明度(win2000以上)
-----------------------------------
第一步 定义功能
typedef BOOL (FAR PASCAL * FUNC1)(
HWND hwnd, // handle to the layered window
COLORREF crKey, // specifies the color key
BYTE bAlpha, // value for the blend function
DWORD dwFlags // action
);
第二步 实现代码
在OnInitDialog中加入下列代码(如果在SDI里面,应该是在OnCreat里面添加)
.....
HMODULE hModule = GetModuleHandle("user32.dll");
FUNC1 SetLayeredWindowAttributes;
SetLayeredWindowAttributes = (FUNC1) GetProcAddress (hModule, _T( "SetLayeredWindowAttributes" ) );
// 设置分层扩展标记
SetWindowLong(GetSafeHwnd(), ...
|
|
| 作者:ohahay ohahay张贴于2007-12-28 19:19:31.0,共阅读991次,回复0次 |
|
|
 |
神经元网络实现数字识别
|
|
| |
| /* ============================================================================
题目:用BP神经网络算法实现数字识别
指导老师:李laoshi
学生:杨 冯 李
日期: 2006-12-30
******************************************************************************/
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <conio.h>
/******************************************************************************
宏定义
******************************************************************************/
typedef int BOOL;
typedef int ...
|
|
| 作者:蓝天上的我 itcoco05张贴于2007-01-24 21:49:17.0,共阅读3029次,回复4次 |
|
|
 |
GDI+路径技术的汉字笔顺求助
|
|
| |
| ...我现在在做一个汉字笔顺调整的辅助工具,由于对MFC及GDI+编程不熟悉,想请高手帮忙,具体要求如下: 做一个窗口,上面能输入汉字,点击确定后能按Truetype里的笔顺顺序显示每一个笔画,要求每一个笔画在田字格里面显示,并给每一个笔画按顺序用数组标记。然后还有一个调整笔画的地方,就是可以输入上面定义的数组的标号来真正按笔画顺序输出汉字,当然并不是真正意思上的按笔画输出,是要做出那么个东西来可以调整笔画的顺序,并可以点击保存按钮进行保存,保存的格式不限。
|
|
| 作者:natalie natalie张贴于2007-12-21 16:37:51.0,共阅读827次,回复0次 |
|
|
 |
连接ODBC数据源的一段代码
|
|
| |
| CDatabase DB;
bool CFreePhoneApp::DatabaseReady()
{
TCHAR cFilePath[_MAX_PATH];
GetModuleFileName(NULL, cFilePath, _MAX_PATH);
m_sModuleFileName = cFilePath;
CString sDBFile = m_sModuleFileName;
sDBFile.Replace(".exe", ".mdb");
CFileFind Finder;
if(!Finder.FindFile(sDBFile))
{
::MessageBox(NULL,"无法找到系统数据库文件!路径如下:\r\n" + sDBFile +
"\r\n\r\nFreePhone安装时,将自动创建该文件。建议重新安装。",
"致命错误", MB_OK | MB_ICONEXCLAMATION);
return false;
}
CString sDSN;
sDSN = "DSN=FreePhone;FileType=Ms Access;DBQ=" + sDBFile + ";MaxScanRows=20";
if(!SQLConfigDataSource(NU ...
|
|
| 作者:不祥 bluejoe张贴于2004-04-23 21:22:28.0,共阅读4354次,回复5次 |
|
|
 |
指针参数是如何传递内存的?
|
|
| |
| 如果函数的参数是一个指针,不要指望用该指针去申请动态内存。示例7-4-1 中, Test 函数的语句GetMemory(str, 200)并没有使str 获得期望的内存,str 依旧是NULL, 为什么? void GetMemory(char *p, int num) { p = (char *)malloc(sizeof(char) * num); } void Test(void) { char *str = NULL; GetMemory(str, 100); // str 仍然为 NULL strcpy(str, "hello"); // 运行错误 } 示例7-4-1 试图用指针参数申请动态内存 高质量C++/C 编程指南,v 1.0 2001 Page 48 of 101 毛病出在函数GetMemory 中。编译器总是要为函数的每个参数制作临时副本,指针 参数p 的副本是 _p,编译器使 _p = p。如果函数体内的程序修改了_p 的内容,就导致 参数p 的内容作相应的修改。这就是指针可以用作输出参数的原因。在本例中,_p 申请 了新的内存,只是把_p 所指的内存地址改变了,但是p 丝毫未变。所以函数GetMemory 并不能输出任何东西。事实上,每执行一次GetMemory 就会泄露一块内存,因为没有用 free 释放内存。 如果非得要用指针参数去申请内存,那么应该改 ...
|
|
| 作者:wlx weilaixi张贴于2007-07-02 12:54:19.0,共阅读1629次,回复2次 |
|
|
 |
求助:八叉树源代码
|
|
| |
| ...我想用八叉树对三维散乱点云进行分割然后精简,自己编了很久都没编出来,想问一下,大家谁有源代码啊,可不可以共享一下,谢谢。
|
|
| 作者:阿珂 likezhen821张贴于2007-12-10 23:24:10.0,共阅读837次,回复0次 |
|
|
 |
文件类型及相关打开程序的注册
|
|
| |
| 譬如:注册文件类型.pln,为其指定文件类型图标,并使用当前程序作为默认打开程序。
调用如下:
RegisterShellFileType(".pln", "Plan.Documnet", "规划文件", 1);
其中参数的含义:
filterExt:文件后缀名
fileTypeID:文件类型ID
fileTypeDesc:文件描述
iconIndex:文件图标在当前程序中的索引BOOL CPlanningApp::RegisterShellFileType(CString filterExt, CString fileTypeID, CString fileTypeDesc, int iconIndex)
{
CString strPathName, strTemp;
TCHAR szLongPathName[_MAX_PATH];
TCHAR szShortPathName[_MAX_PATH];
::GetModuleFileName(this->m_hInstance, szLongPathName, _MAX_PATH);
if (::GetShortPathName(szLongPathName, szShortPathName, _MAX_PATH) == 0)
{
// rare failure case (es ...
|
|
| 作者:不祥 bluejoe张贴于2007-01-16 13:50:13.0,共阅读2443次,回复1次 |
|
|
 |
隐藏任务栏
|
|
| |
| ShowWindow(FindWindow(TEXT("Shell_TrayWnd"),NULL),SW_HIDE);
|
|
| 作者:不祥 jerry张贴于2004-05-11 20:45:57.0,共阅读3131次,回复3次 |
|
|
 |
如何得到系统帮助手型鼠标形状
|
|
| |
| HCURSOR LoadHelpCursor()
{
CString strWndDir;
GetWindowsDirectory(strWndDir.GetBuffer(MAX_PATH), MAX_PATH);
strWndDir.ReleaseBuffer();
strWndDir += _T("\\winhlp32.exe");
HMODULE hModule = LoadLibrary(strWndDir);
HCURSOR hCursor=NULL;
if (hModule)
{
hCursor = ::LoadCursor(hModule, MAKEINTRESOURCE(106));
FreeLibrary(hModule);
}
return hCursor;
}
|
|
| 作者:不祥 xler张贴于2004-05-11 15:04:02.0,共阅读2510次,回复2次 |
|
|
 |
vc中操作Xml--使用CMarkup类
|
|
| |
| DotNet中使用xml相对比较轻松,在vc中操作xml,有些繁琐。最近在网络上得知CMarkup比较好用,于是试了下,还好,就把部分例子写出来。以后有时间的话,再写清楚点。
//----------UserInfo.xml--------------
<?xml version="1.0" encoding="UTF-8" ?>
<UserInfo>
<UserID>luo</UserID>
<UserID>lin</UserID>
</UserInfo>
1. 生成UserInfo.xml
CMarkup xml;
xml.SetDoc("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n");
xml.AddElem("UserInfo");
xml.IntoElem();
xml.AddElem("UserID","luo");
xml.AddElem("UserID","lin");
xml.OutOfElem();
xml.Save("UserInfo.xml");
2. 浏览特定元素
//----查看所有UserID----
CMarkup xml;
xml.Load("UserInfo.xml");
BOOL b ...
|
|
| 作者:不祥 bluejoe张贴于2006-11-10 16:44:04.0,共阅读6825次,回复7次 |
|
|
 |
三种常见中文内码的转换方法
|
|
| |
| 转篇文章给你,很好用的,直接使用函数,不用设置简体繁体对照表
三种常见中文内码的转换方法
我们平时常见的三种中文内码是:GB2312(简体中文)、GBK、BIG5(繁体中文)。网上有很多中文内码的专用转换工具。我们碰到由于内码不一致而导致的乱麻问题,用这些工具可以进行相互转换。但论坛里经常有人问如何在自己的程序中集成这些功能呢?本文将介绍如何利用 Windows 提供的API 函数来实现。转换涉及到的 API 函数主要有两个:MultiByteToWideChar 和 WideCharToMultiByte。有关这两个函数的详细文档请参考 MSDN,本文不再赘述。
本文将介绍四个转换函数分别实现如下的转换:
* Big5 => GBK
* GBK => Big5
* GB2312 => GBK
* GBK => GB2312
有关 GB2312 =〉BIG5 的转换以及 BIG5 =〉GB2312 的转换可以通过 GBK 间接实现。先将 GB2312 转成 GBK,再将 GBK 转成 BIG5,反之亦然。当然也可以自己实现它们之间的直接转换。
// Big5 => GBK:
void BIG52GBK(char *szBuf)
{
if(!strcmp(szBuf, ""))
...
|
|
| 作者:edog bluejoe张贴于2007-01-29 10:38:34.0,共阅读2583次,回复1次 |
|
|
 |
自己写屏幕保护程序
|
|
| |
| 主要实现一个ScreenSaverProc过程函数,在处理WM_PAINT消息时绘制内容,也可以通过定时器等加入其他的花样。
需要加入scrnsave.lib库和scrnsave.h头、
另外需要实现一个BOOL WINAPI ScreenSaverConfigureDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) 函数来处理屏保配置对话框,一个BOOL WINAPI RegisterDialogClasses(HANDLE hInst)函数注册。
LRESULT CALLBACK ScreenSaverProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_PAINT:
{
// 在此绘制需要的内容。
break;
}
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
// 调用系统的缺省处理函数
return DefScreenSaverProc hWnd,message,wParam,lParam);
}
...
|
|
| 作者:不祥 ISeekYou张贴于2004-05-13 14:26:03.0,共阅读2529次,回复2次 |
|
|
 |
在MFC中应用CTreeCtrl控件的技巧
|
|
| |
| 首先,我们要创建一个基本对话框的MFC工程MFC_TreeCRTL(名字随便给一个)。然后在资源视图中插入两个Dialog,ID分别为IDD_DIALOG11和IDD_DIALOG211,都更改Style属性为Child,Border属性为None,为它们建立两个类,分别命名为Cdialog11和Cdialog211,并在MFC_TreeCRTLDlg.CPP文件中包含dialog11.h和dialog211.h两个头文件。再导入几个资源图标作为树形控件节点的图标及装饰面板。最后在主面板上添加一个CTreeCtrl控件,ID为默认,并在ClassWizard中添加它的一个变量,命名为m_mytree。 接着,我们进行具体代码编写。 我们必须在CMFC_TreeCRTLDlg类中加入这些变量和函数 CDialog * m_treePages[2];
CString node_name;
BOOL InitMytree(); 我们还要在CMFC_TreeCRTLDlg类的构造函数中为m_treePages[2]分配空间, m_treePages[0]=new Cdialog11;
m_treePages[1]=new Cdialog211;
InitMytree()函数为m_mytree的初始化过程 BOOL CMFC_TreeCRTLDlg::Init ...
|
|
| 作者:不祥 qiaoyongbo张贴于2007-07-20 01:28:34.0,共阅读1992次,回复2次 |
|
|