http://blog.tinybrowser.net/archives/916
posted @
2008-06-11 00:06 free2000fly 阅读(2258) |
评论 (0) |
编辑 收藏
摘要:
阅读全文
posted @
2008-05-04 18:52 free2000fly 阅读(1189) |
评论 (0) |
编辑 收藏
用 mfc 开发的屏幕保护程序, 有个配置对话框可以添加自己喜欢的 flash 动画, 希望大家喜欢.
至于安装,使用方法, 相信大家都知道: 将 *.scr 文件复制到 c:\windows\system32 目录内, 然后在桌面上空白处右击鼠标, 选中 "属性" 菜单项.
在随后出现的 "显示 属性" 对话框内, 选择 "屏幕保护程序" 选项卡. 在 "屏幕保护程序" 下拉选择框里, 将会出现 Flash2ScreenSaver 选择项,
选择它, 然后点击 "设置" 按钮, 在随后蹦出的对话框内, 就可以添加或者删除你喜欢的 flash
动画了. Enjoy it!
P.S. 早在 2003 年编写的, 代码不好, 现在也提不起兴趣再折腾了. 有哪位愿意改改, 弄完后 email 我一声. 先谢过了.
下载地址为:
http://www.cppblog.com/Files/free2000fly/Flash2ScreenSaver03_F.zip
posted @
2008-05-02 13:51 free2000fly 阅读(1610) |
评论 (2) |
编辑 收藏
如题, 多年前翻译的一个 ASM 教程, 包含一个拼图游戏.
俺认为这个教程写的是极具亲和力, 当年俺就是从这个和这个系列的前一系列进入 Win32 汇编编程的大门的, 希望它还能对现在的 GGJJDDMM 有所裨益.
俺的中文翻译在
这里 下载
前一系列的汇编入门教程在
这里, 由陶文翻译
原教程的网址在
这里.
可以在
这里 下载 MASM32 汇编语言开发包, 在
这里 下载汇编语言集成开发环境(IDE), 在
这里 下载资源编辑器, 在
这里 下载调试器, 都是免费软件.
posted @
2008-04-05 20:41 free2000fly 阅读(2282) |
评论 (5) |
编辑 收藏
网上收集的关于用汇编语言编写 Windows 环境下的 KMD 驱动程序的教程, 由俄国人编写, 由罗云彬, 松松, 董岩翻译, 感谢所有这些人的辛勤劳动, 俺将这些散落在网络上的文章收集整理出来, 我想这些教程不止对使用汇编语言的人有帮助.
教程中文版的下载地址是
这里 搭个顺风车, 将修改版的 QuickSys 程序放在
这里
posted @
2008-04-05 11:48 free2000fly 阅读(1561) |
评论 (0) |
编辑 收藏
用 ALT 向导生成的服务的框架其实并不好驯服, 俺在上面吃了不少苦头, 因此俺在自动生成代码上做了不少修正和扩展, 现在好使了,
包括 Debug 版本的调试中断点, 用户逻辑的入口点, 也可以双击直接运行, 这时就是一个普通的应用程序. 使得编写服务就跟编普通应用程序没有区别.
我的框架的代码包含了一个完整的可运行的例子服务, 下载地址是:
http://www.cppblog.com/Files/free2000fly/AutoDomain.zip
posted @
2008-03-25 19:43 free2000fly 阅读(1702) |
评论 (0) |
编辑 收藏
Visual Assist X 1626 crack 下载地址是
http://www.cppblog.com/Files/free2000fly/VA_X_1626.zip
posted @
2008-03-08 16:07 free2000fly 阅读(1330) |
评论 (4) |
编辑 收藏
原文网址: http://blog.csdn.net/classfactory/archive/2004/08/29/87749.aspx
C++ 中的枚举类型继承于 C 语言。就像其他从 C 语言继承过来的很多特性一样,C++ 枚举也有缺点,这其中最显著的莫过于作用域问题——在枚举类型中定义的常量,属于定义枚举的作用域,而不属于这个枚举类型。例如下面的示例:
enum FileAccess {
Read = 0x1,
Write = 0x2,
};
FileAccess access = ::Read; // 正确
FileAccess access = FileAccess::Read; // 错误
C++枚举的这个特点对于习惯面向对象和作用域概念的人来说是不可接受的。首先,FileAccess::Read 显然更加符合程序员的直觉,因为上面的枚举定义理应等价于如下的定义(实际上,.NET 中的枚举类型便是如此实现的):
class FileAccess {
static const int Read = 0x1;
static const int Write = 0x2;
};
其次,这导致我们无法在同一个作用域中定义两个同样名称的枚举值。也就是说,以下的代码是编译错误:
enum FileAccess {
Read = 0x1,
Write = 0x2,
};
enum FileShare {
Read = 0x1, // 重定义
Write = 0x2, // 重定义
};
如果这一点没有让你恼怒过的话,你可能还没写过多少 C++ 代码 :-)。实际上,在最新的 C++0x 标准草案中有关于枚举作用域问题的提案,但最终的解决方案会是怎样的就无法未卜先知了,毕竟对于象 C++ 这样使用广泛的语言来说,任何特性的增删和修改都必须十分小心谨慎。
当然,我们可以使用一些迂回的方法来解决这个问题(C++ 总是能给我们很多惊喜和意外)。例如,我们可以把枚举值放在一个结构里,并使用运算符重载来逼近枚举的特性:
struct FileAccess {
enum __Enum {
Read = 0x1,
Write = 0x2
};
__Enum _value; // 枚举值
FileAccess(int value = 0) : _value((__Enum)value) {}
FileAccess& operator=(int value) {
this->_value = (__Enum)value;
return *this;
}
operator int() const {
return this->_value;
}
};
我们现在可以按照希望的方式使用这个枚举类型:
FileAccess access = FileAccess::Read;
并且,因为我们提供了到 int 类型的转换运算符,因此在需要 int 的地方都可以使用它,例如 switch 语句:
switch (access) {
case FileAccess::Read:
break;
case FileAccess::Write:
break;
}
当然我们不愿意每次都手工编写这样的结构。通过使用宏,我们可以很容易做到这一点:
#define DECLARE_ENUM(E) \
struct E \
{ \
public: \
E(int value = 0) : _value((__Enum)value) { \
} \
E& operator=(int value) { \
this->_value = (__Enum)value; \
return *this; \
} \
operator int() const { \
return this->_value; \
} \
\
enum __Enum {
#define END_ENUM() \
}; \
\
private: \
__Enum _value; \
};
我们现在可以按如下的方式定义前面的枚举,并且不比直接写 enum 复杂多少。
DECLARE_ENUM(FileAccess)
Read = 0x1,
Write = 0x2,
END_ENUM()
DECLARE_ENUM(FileShare)
Read = 0x1,
Write = 0x2,
END_ENUM()
posted @
2008-03-08 15:04 free2000fly 阅读(4043) |
评论 (2) |
编辑 收藏
使用 ADO 编制数据库程序
最近正在使用 ADO 编制数据库程序, 找好的资料比较困难, 找到比较好的
[1] snoopy每日一译-完美的ADO http://www.vcer.net/1076417661402.html
[2] snoopy每日一译-完美的ADO[2](上) http://www.vcer.net/2005.html
[3] snoopy每日一译-完美的ADO[2](中) http://www.vcer.net/2014.html
[4] snoopy每日一译-完美的ADO[2](下) http://www.vcer.net/2027.html
原文链接在这里:
ADO is AOK (a simple ADO tutorial) http://www.codeguru.com/cpp/data/mfc_database/ado/article.php/c1141/
ADO is AOK - Part II http://www.codeguru.com/cpp/data/mfc_database/ado/article.php/c1157/
相关的, 在 VB 和 C 之间传递数组的文章, 在这里 http://support.microsoft.com/kb/207931/en-us
传递字节数组的方法, 在这里 http://support.microsoft.com/kb/154172/en-us
方便查阅
posted @
2008-03-08 15:01 free2000fly 阅读(277) |
评论 (0) |
编辑 收藏
要实现一个将 IP 地址控件的 disabled 状态, 但是 Windows 的实现就没有将控件的颜色灰掉,
M$ 真是的, 最后一步懒得弄了, 我只好自己弄咯. 下面是我的WTL,实现代码. BTW, 这个控件在
动态改变大小时, 里面的四个 EDIT 的大小没跟着改变, 我也懒得弄了 ;-)
#ifndef __ATL_GRAY_IP_ADDR_CTRL_H__
#define __ATL_GRAY_IP_ADDR_CTRL_H__
#pragma once
#include <vector>
#ifndef ARRAYSIZE
#define ARRAYSIZE( x ) (sizeof(x)/sizeof((x)[0]))
#endif // !defined(ARRAYSIZE)
namespace WTL {
class CGrayIPAddrCtrlImpl : public CWindowImpl<CGrayIPAddrCtrlImpl, CIPAddressCtrl>
{
typedef CWindowImpl<CGrayIPAddrCtrlImpl, CIPAddressCtrl> baseClass;
public:
BEGIN_MSG_MAP_EX(CGrayIPAddrCtrlImpl)
MESSAGE_HANDLER(WM_CREATE, OnCreate)
MESSAGE_HANDLER(WM_PAINT, OnPaint)
MESSAGE_HANDLER(WM_SIZE, OnSize)
END_MSG_MAP();
CGrayIPAddrCtrlImpl() : m_uFourTimes(0)
{ }
LRESULT OnCreate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
uMsg, wParam, lParam, bHandled;
m_vecEdit.clear();
::EnumChildWindows(m_hWnd, EnumChildProc, (LPARAM)this);
bHandled = FALSE;
return S_OK;
}
static BOOL CALLBACK EnumChildProc(HWND hwnd, LPARAM lParam)
{
CGrayIPAddrCtrlImpl *pThis = reinterpret_cast<CGrayIPAddrCtrlImpl *>(lParam);
CEdit wndEdit(hwnd);
if (pThis->m_uFourTimes < 4)
{
wndEdit.SetReadOnly();
pThis->m_uFourTimes ++;
}
RECT rc = { 0 };
wndEdit.GetClientRect(&rc);
wndEdit.ClientToScreen(&rc);
pThis->m_vecEdit.push_back(rc);
ATLTRACE("======================EnumChildProc==%d==%d==%d===================\n",
pThis->m_vecEdit.size(), rc.left, rc.right);
return TRUE;
}
BOOL SubclassWindow(HWND hWnd)
{
BOOL bReturn = baseClass::SubclassWindow(hWnd);
if (bReturn) {
m_vecEdit.clear();
::EnumChildWindows(m_hWnd, EnumChildProc, (LPARAM)this);
}
return bReturn;
}
LRESULT OnPaint(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
uMsg, wParam, lParam, bHandled;
TCHAR szText[MAX_PATH];
GetWindowText(szText, ARRAYSIZE(szText));
CRect rc;
CPaintDC dcMem(m_hWnd);
GetClientRect(rc);
COLORREF crBack = GetSysColor(COLOR_BTNFACE);
::SetBkColor(dcMem, crBack);
::ExtTextOut(dcMem, 0, 0, ETO_OPAQUE, &rc, NULL, 0, NULL);
{
DWORD dwFlags = DT_CENTER;
DWORD dwStyle = GetExStyle();
COLORREF crOldBk = 0xFFFFFFFF;
UINT nOldMode = (UINT)-1;
if (dwStyle & WS_EX_TRANSPARENT) {
nOldMode = dcMem.SetBkMode(TRANSPARENT);
} else {
crOldBk = dcMem.SetBkColor(crBack);
}
TCHAR szDot[] = _T(".");
RECT rcTemp;
std::vector<RECT>::reverse_iterator it;
for(it=m_vecEdit.rbegin(); it!=m_vecEdit.rend(); it++)
{
std::vector<RECT>::reverse_iterator itNext = it+1;
if (itNext != m_vecEdit.rend())
{
rcTemp.top = it->top;
rcTemp.bottom = it->bottom;
rcTemp.left = it->right;
rcTemp.right = itNext->left;
ScreenToClient(&rcTemp);
dcMem.DrawText(szDot, _tcslen(szDot), &rcTemp, dwFlags);
}
}
if (dwStyle & WS_EX_TRANSPARENT) {
dcMem.SetBkMode(nOldMode);
} else {
dcMem.SetBkColor(crOldBk);
}
}
return S_OK;
}
LRESULT OnSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
uMsg, wParam, lParam, bHandled;
m_vecEdit.clear();
::EnumChildWindows(m_hWnd, EnumChildProc, (LPARAM)this);
bHandled = FALSE;
return S_OK;
}
UINT m_uFourTimes;
std::vector< RECT > m_vecEdit;
};
}; // namespace WTL
#endif // __ATL_GRAY_IP_ADDR_CTRL_H__
posted @
2008-03-08 14:51 free2000fly 阅读(441) |
评论 (0) |
编辑 收藏