近日需要把文本輸入框(EDITTEXT)設為不可編輯,也就是只讀模式.發現在Dialog下無法啟用,並且在WM_INITDIALOG設置STYLE也無作用.下面給出設置方法:
- HWND hWnd = CreateDialog();創建Dialog後
- hWnd hEdit= ::GetDlgItem(hWnd,IDDEIT);
- SendMessage(hEdit,EM_SETREADONLY,true,0);
- WPARAM設為TRUE則啟用只讀模式,設為FALSE則啟用編輯模式
BOOKCARD
近日需要把文本輸入框(EDITTEXT)設為不可編輯,也就是只讀模式.發現在Dialog下無法啟用,並且在WM_INITDIALOG設置STYLE也無作用.下面給出設置方法:
近日要實現文件拖放,如果只實現接收則較為簡單,下麵把實現原理記下.
int Query_DragAndDrop(HDROP hdrop,PROC_DRAGANDDROP Proc_DragAndDrop)
{
int File_Num;
TCHAR File_Path[2056];
int File_Index;
File_Num = ::DragQueryFile(hdrop,-1,NULL,0);// 獲取文件個數
for(File_Index = 0; File_Index < File_Num; ++File_Index)
{ // 獲取拖放文件
::DragQueryFile(hdrop,File_Index,File_Path,sizeof(File_Path));
Proc_DragAndDrop(File_Path);// 處理文件
}
::DragFinish(hdrop);// 釋放空間
return 1;
}
HASH(哈希碼)用於生成文件的指紋,如果兩個文件的哈希碼一致,則代表文件是相同的.令外也用於生成密碼指紋.此軟件用於生成文件的哈希碼,支持SHA1,SHA256,SHA384,SHA512,MD5,MD4,MD2,CRC32,CRC64.大部分的哈希校驗碼是我在2009年所寫.所以此軟件製作較順利.加入文件拖放和拷貝剪貼板,全部使用純C代碼所寫速度快,體積小.
Win32版下載:HASH
按扭BUTTON可以設定圖標,但有幾點需要需注意:
外鏈即指向您的網站的連結,它確定你從搜索引擎獲得多小流量.但要獲得大量的外鏈並不容易,而對於個人Blog(博客)應把精力集中于文章的質量而不是把精力用於增加外鏈.但個人博客主可以通過域名查詢網站增加外鏈,通過查詢域名流下查詢記錄,並產生一條指向你域名鏈接,而域名查詢網站首頁也會產生最新查詢鏈接,如果搜索引擎剛好來訪,你的外鏈就會增加.但天天查詢網站域名更會耗費大量精力,不過你可以製作全自動化域名查詢蜘蛛.下麵給出軟件的製作思路.
對話框圖標在模板中不能設置,需要
1. 準備一張512×512圖片
2. 使用IconWorkshop轉換成ICO圖標
3. 分辯率勾選48×48,32×32,24×24,16×16,位數32Bit(RGBA),16Bit,8Bit(256色)即可.
4. 在你VC工程目標下創建ICON文件夾,把ICO圖標複製於此.
5. 在RSOURCE.RC文件加上,要注意第一條記錄也是應用圖標
IDR_MAINFRAME ICON “ICO\\logo.ico”
6. 在對話框WM_INITDIALOG設置
HICON hIcon = LoadIcon(main_instance,_T(“IDR_MAINFRAME”));//載入圖標
::SendMessage(hWnd, WM_SETICON, true, (LPARAM)hIcon);//設置大圖標
::SendMessage(hWnd, WM_SETICON, false, (LPARAM)hIcon);//設置小圖標
如果程式需要讀取大量數據可使用SQLite3關係數據庫,但如果只是讀寫小量文本數據,則使用文本一行行地保存文本更方便,擴展名最好改為.db下麵給設計思路.
讀取文本數據
寫入文本數據
讀取文本的C代碼
bool Read_DB()
{
FILE * stream=NULL; // 文件流句柄
char text[2056];
stream = _wfopen(L”text.dat”,L”r+t”);// 以文本方式打開文件
if(stream == NULL)
return false;// 無法打開文件
// 讀取一行
while(fgets(text,sizeof(text),stream) != NULL)
{ //去除字符串中最後面 “換行符” “空格”
TrimRight(text);
// 處理文本
// ……….
}
fclose(stream); // 關閉文件句柄
return true;
}
追加一行文本的C代碼
bool Save_DB(char * text)
{
FILE * stream=NULL; // 文件流句柄
// 以文本方式打開文件
stream = _wfopen(L”text.dat”,L”a+t”);
if(stream == NULL)
return false;// 無法打開文件
::fputs(text,stream);// 寫入數據
::fputs(“\n”,stream);// 換行
fclose(stream);// 關閉文件句柄
return true;
}
對話框(DIALOG)模板可以設定顯示位置,但因屏幕大小不一,總想讓對話框在屏幕居中顯示.
下面給出C源代碼便於移值到其它工程
bool CentreWindow(HWND hWnd)
{
RECT rect;
int width,height;
int x,y;
if(IsWindow(hWnd) == false)
return false;
::GetWindowRect(hWnd,&rect); // 獲取窗口的
width = rect.right – rect.left; // 計算窗口寬度
height = rect.bottom – rect.top; // 計算窗口高度
x = GetSystemMetrics(SM_CXSCREEN)/2-width/2;// 計算窗口居中X
y = GetSystemMetrics(SM_CYSCREEN)/2-height/2;// 計算窗口居中Y
SetWindowPos(hWnd,HWND_TOP,x,y,0,0,SWP_NOSIZE); // 移動窗口
return true;
}
啟動瀏覽器最簡單的方法是使用ShellExecute(),但無返回進程句炳,要關閉瀏覽器只能查找窗口.更好的方法是CreateProcess()啟動瀏覽器新進程並打帶網頁,並返回進程句柄,方便關閉瀏覽器.
BOOL CreateProcess(LPCTSTR lpApplicationName,//執行模塊名填空NULL即可
LPTSTR lpCommandLine,//命令行填”瀏覽器Path+空格+網頁URL”
LPSECURITY_ATTRIBUTES lpProcessAttributes,//進程屬性 LPSECURITY_ATTRIBUTES lpThreadAttributes,//線程屬性
BOOL bInheritHandles, //繼承進程句柄false
DWORD dwCreationFlags, //創建標誌填CREATE_NEW_CONSOLE
LPVOID lpEnvironment, //進程環境
LPCTSTR lpCurrentDirectory,// 進程的工作路徑填NULL
LPSTARTUPINFO lpStartupInfo, //STARTUPINFO結構
LPPROCESS_INFORMATION lpProcessInformation//PROCESS_INFORMATION結構
);
下麵給打開網頁源代碼,便於
bool Open_Url(char * url,char * browser_Path)
{
int result = 0;
char CommandA[2056];
WCHAR CommandW[2056];
int length;
SECURITY_ATTRIBUTES Security_Attributes_Process;// 進程屬性
SECURITY_ATTRIBUTES Security_Attributes_Thread;// 線程屬性
STARTUPINFO Startup_Info;// 啟動信息
PROCESS_INFORMATION Process_Information;// 進程信息
strcpy(CommandA,browser_Path);
strcat(CommandA,” “);
strcat(CommandA,url);
// 轉換UNICODE
length = MultiByteToWideChar(CP_ACP, NULL, CommandA, strlen(CommandA), CommandW, sizeof(CommandW));
CommandW[length] = NULL;
// 進程屬性
Security_Attributes_Process.nLength = sizeof(SECURITY_ATTRIBUTES);
Security_Attributes_Process.lpSecurityDescriptor = NULL;
Security_Attributes_Process.bInheritHandle = true;
// 線程屬性
Security_Attributes_Thread.nLength = sizeof(SECURITY_ATTRIBUTES);
Security_Attributes_Thread.lpSecurityDescriptor = NULL;
Security_Attributes_Thread.bInheritHandle = true;
// 啟動信息
ZeroMemory( &Startup_Info, sizeof(STARTUPINFO) );
Startup_Info.cb = sizeof(STARTUPINFO);
ZeroMemory( &Process_Information, sizeof(PROCESS_INFORMATION) );
// 創建進程
result = CreateProcessW(NULL,
CommandW,
&Security_Attributes_Process,
&Security_Attributes_Thread,
FALSE,
CREATE_NEW_CONSOLE,
NULL,
NULL,
&Startup_Info,
&Process_Information);
// 獲取進程句柄
if(result != 0)
return true;
else
return false;
}
Windows默認瀏覽器的路徑在註冊表(REGEDIT.EXE)的HKEY_CLASSES_ROOT\http\shell\open\command\,提取數據需要使用下面三個註冊表操作函數.並給出設計思路源碼
char Browser_Path[2056];// 瀏覽器路徑
// ————————————————————–
// 獲取系統默認瀏覽器路徑
// ————————————————————–
char * Get_WebBrowserPath_SEO(void)
{
long ret;
HKEY hKey;// 註冊表句柄
WCHAR path[2056];//
char data[2056];
DWORD length;
// 打開註冊表
// HKEY_CLASSES_ROOT\http\shell\open\command
ret = RegOpenKeyExW(HKEY_CLASSES_ROOT,L”http\\shell\\open\\command”,0,KEY_ALL_ACCESS,&hKey);
if(ret != ERROR_SUCCESS)
return NULL;
// 獲取REG_SZ
DWORD type = REG_SZ;//類型
length = sizeof(path);//
ret = RegQueryValueExW(hKey,NULL,NULL,&type,(PBYTE)path,&length);
if(ret != ERROR_SUCCESS)
return NULL;
// 關閉註冊表句柄
RegCloseKey(hKey);
// 轉換為UTF-8
length = WideCharToMultiByte(CP_UTF8, NULL, path, wcslen(path), data, sizeof(data), NULL, NULL);
data[length] = NULL;
// 清零
memset(Browser_Path,0,sizeof(Browser_Path));
// 提取路徑
for(int i = 0,index = 0;i<(int)length; ++i)
{
if(data[i] == ‘”‘ && index != 0)
break;// 讀取完畢跳出
if(data[i] != ‘”‘)
{
Browser_Path[index] = data[i];
++index;
}
}
return Browser_Path;// 返回路徑
}
你必須登入才能發表留言。