http://blog.tinybrowser.net/archives/916
posted @
2008-06-11 00:06 free2000fly 閱讀(2264) |
評論 (0) |
編輯 收藏
摘要:
閱讀全文
posted @
2008-05-04 18:52 free2000fly 閱讀(1201) |
評論 (0) |
編輯 收藏
用 mfc 開發的屏幕保護程序, 有個配置對話框可以添加自己喜歡的 flash 動畫, 希望大家喜歡.
至于安裝,使用方法, 相信大家都知道: 將 *.scr 文件復制到 c:\windows\system32 目錄內, 然后在桌面上空白處右擊鼠標, 選中 "屬性" 菜單項.
在隨后出現的 "顯示 屬性" 對話框內, 選擇 "屏幕保護程序" 選項卡. 在 "屏幕保護程序" 下拉選擇框里, 將會出現 Flash2ScreenSaver 選擇項,
選擇它, 然后點擊 "設置" 按鈕, 在隨后蹦出的對話框內, 就可以添加或者刪除你喜歡的 flash
動畫了. Enjoy it!
P.S. 早在 2003 年編寫的, 代碼不好, 現在也提不起興趣再折騰了. 有哪位愿意改改, 弄完后 email 我一聲. 先謝過了.
下載地址為:
http://www.shnenglu.com/Files/free2000fly/Flash2ScreenSaver03_F.zip
posted @
2008-05-02 13:51 free2000fly 閱讀(1616) |
評論 (2) |
編輯 收藏
如題, 多年前翻譯的一個 ASM 教程, 包含一個拼圖游戲.
俺認為這個教程寫的是極具親和力, 當年俺就是從這個和這個系列的前一系列進入 Win32 匯編編程的大門的, 希望它還能對現在的 GGJJDDMM 有所裨益.
俺的中文翻譯在
這里 下載
前一系列的匯編入門教程在
這里, 由陶文翻譯
原教程的網址在
這里.
可以在
這里 下載 MASM32 匯編語言開發包, 在
這里 下載匯編語言集成開發環境(IDE), 在
這里 下載資源編輯器, 在
這里 下載調試器, 都是免費軟件.
posted @
2008-04-05 20:41 free2000fly 閱讀(2287) |
評論 (5) |
編輯 收藏
網上收集的關于用匯編語言編寫 Windows 環境下的 KMD 驅動程序的教程, 由俄國人編寫, 由羅云彬, 松松, 董巖翻譯, 感謝所有這些人的辛勤勞動, 俺將這些散落在網絡上的文章收集整理出來, 我想這些教程不止對使用匯編語言的人有幫助.
教程中文版的下載地址是
這里 搭個順風車, 將修改版的 QuickSys 程序放在
這里
posted @
2008-04-05 11:48 free2000fly 閱讀(1565) |
評論 (0) |
編輯 收藏
用 ALT 向導生成的服務的框架其實并不好馴服, 俺在上面吃了不少苦頭, 因此俺在自動生成代碼上做了不少修正和擴展, 現在好使了,
包括 Debug 版本的調試中斷點, 用戶邏輯的入口點, 也可以雙擊直接運行, 這時就是一個普通的應用程序. 使得編寫服務就跟編普通應用程序沒有區別.
我的框架的代碼包含了一個完整的可運行的例子服務, 下載地址是:
http://www.shnenglu.com/Files/free2000fly/AutoDomain.zip
posted @
2008-03-25 19:43 free2000fly 閱讀(1708) |
評論 (0) |
編輯 收藏
Visual Assist X 1626 crack 下載地址是
http://www.shnenglu.com/Files/free2000fly/VA_X_1626.zip
posted @
2008-03-08 16:07 free2000fly 閱讀(1334) |
評論 (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 閱讀(4057) |
評論 (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 閱讀(280) |
評論 (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 閱讀(449) |
評論 (0) |
編輯 收藏