解决 Windows 7 每次启动都运行 CHKDSK 并重新启动的问题
八 29th
如果遇到 Windows 7 每次启动时都运行 CHKDSK 自检,出现“CHKDSK is verifying files (stage 1 of 3) …” 等信息并重新启动,可以于 Windows 7 启动成功后在“开始——运行”中输入:
chkdsk <盘符:> /x /f
希望本文对您有所帮助。
使用IPicture接口显示图片
八 28th
以下代码使用IPicture接口显示图片,可直接放于OnDraw函数中。
IPictrue接口支持BMP、DIB、EMF、GIF、ICO、JPG、WMF格式图片的显示,但只能保存BMP和ICO格式的图片。
// pDoc为文档对象指针
// pDC为设备描述表指针
::CoInitialize(NULL); // COM 初始化
HRESULT hr;
CFile file;
file.Open(pDoc->GetPathName(), CFile::modeRead | CFile::shareDenyNone ); // 读入文件内容
DWORD dwSize = file.GetLength();
HGLOBAL hMem = ::GlobalAlloc( GMEM_MOVEABLE, dwSize );
LPVOID lpBuf = ::GlobalLock( hMem );
file.ReadHuge( lpBuf, dwSize );
file.Close();
::GlobalUnlock( hMem );
IStream * pStream = NULL;
IPicture * pPicture = NULL;
// 由 HGLOBAL 得到 IStream,参数 TRUE 表示释放 IStream 的同时,释放内存
hr = ::CreateStreamOnHGlobal( hMem, TRUE, &pStream );
ASSERT ( SUCCEEDED(hr) );
hr = ::OleLoadPicture( pStream, dwSize, TRUE, IID_IPicture, ( LPVOID * )&pPicture );
ASSERT(hr==S_OK);
long nWidth,nHeight; // 宽高,MM_HIMETRIC 模式,单位是0.01毫米
pPicture->get_Width( &nWidth ); // 宽
pPicture->get_Height( &nHeight ); // 高
CRect rect;
GetClientRect(&rect);
CSize sz( nWidth, nHeight );
pDC->HIMETRICtoDP( &sz ); // 转换 MM_HIMETRIC 模式单位为 MM_TEXT 像素单位
long x, y, cx, cy;
// 原始大小
/*
cx = sz.cx;
cy = sz.cy;
x = rect.Width() / 2 – cx / 2;
y = rect.Height() / 2 – cy / 2;
*/
// 自动适应窗口
double fRatePic, fRateWnd;
fRatePic = (double)sz.cx / (double)sz.cy;
fRateWnd = (double)rect.Width() / (double)rect.Height();
if (fRatePic > fRateWnd)
{
cx = rect.Width();
cy = (long)(rect.Width() / fRatePic);
}
else
{
cx = (long)(rect.Height() * fRatePic);
cy = rect.Height();
}
if (cx == rect.Width())
{
x = 0;
y = rect.Height() / 2 – cy / 2;
}
if (cy == rect.Height())
{
x = rect.Width() / 2 – cx / 2;
y = 0;
}
pPicture->Render(pDC->m_hDC, x, y, cx, cy,
0, nHeight, nWidth, -nHeight, NULL);
if ( pPicture ) pPicture->Release();// 释放 IPicture 指针
if ( pStream ) pStream->Release(); // 释放 IStream 指针,同时释放了 hMem
::CoUninitialize();
希望本文对您有所帮助。
让程序在Windows启动时自动运行
八 28th
CString strAppName = _T(“AppName”); // 应用程序名
CString strAppPath = _T(“c:\\AppName.exe”); // 应用程序存储路径
CString strRegPath = _T(“Software\\Microsoft\\Windows\\CurrentVersion\\Run”);
HKEY hKey;
RegOpenKeyEx(HKEY_LOCAL_MACHINE, strRegPath, 0, KEY_WRITE, &hKey);
RegDeleteValue(hKey, strAppName);
RegSetValueEx(hKey, strAppName, 0, REG_SZ, (unsigned char*)strAppPath.GetBuffer(0), strAppPath.GetLength());
如果想要在启动时同时隐藏窗体,可以捕获WM_WindowPosChanging消息:
void CMainFrame::OnWindowPosChanging(WINDOWPOS FAR* lpwndpos)
{
if (m_bAutoHide == FALSE)
{
CDialog::OnWindowPosChanging(lpwndpos); // 显示
}
else
{
if (lpwndpos->flags & SWP_SHOWWINDOW) // 隐藏
{
lpwndpos->flags &= ~SWP_SHOWWINDOW;
PostMessage(WM_WINDOWPOSCHANGING, 0, (LPARAM)lpwndpos);
ShowWindow(SW_HIDE);
m_bAutoHide = FALSE;
}
else
{
CDialog::OnWindowPosChanging(lpwndpos); // 显示
}
}
}
其中的m_bAutoHide是BOOL型成员变量,用于记录是否在启动时隐藏窗体。
希望本文对您有所帮助。
让程序进驻系统托盘
八 28th
1.定义自定义消息ID(可在StdAfx.h或主窗体的类型声明文件中):
#define WM_USER_NOTIFYICON WM_USER + 0×100
2.在主窗体的类型声明文件(如:MainFrame.h)加入NOTIFYICONDATA类型成员变量:
NOTIFYICONDATA m_nid;
3.在主窗体中处理WM_CREATE消息:
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CWnd::OnCreate(lpCreateStruct) == -1)
return -1;
m_nid.cbSize = sizeof(NOTIFYICONDATA);
m_nid.hWnd = this->m_hWnd;
m_nid.uFlags = NIF_MESSAGE|NIF_ICON|NIF_TIP; // 标志位
m_nid.uCallbackMessage = WM_USER_NOTIFYICON; // 自定义消息
m_nid.uID = IDR_MAINFRAME; // 资源ID
CString szToolTip = _T(“ToolTip”);
_tcscpy(m_nid.szTip, szToolTip); // 提示信息
HICON hIcon;
hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); // 图标
m_nid.hIcon = hIcon;
::Shell_NotifyIcon(NIM_ADD, &m_nid);
if (hIcon)
::DestroyIcon(hIcon);
return 0;
}
4.重载WindowProc虚函数:
LRESULT CMainFrame::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_USER_NOTIFYICON: // 自定义消息
if (lParam == WM_LBUTTONDBLCLK) // 鼠标双击时出现主窗口
{
ShowWindow(SW_HIDE);
}
else if (lParam == WM_RBUTTONDOWN) // 鼠标右键单击时弹出菜单
{
CMenu menu;
menu.LoadMenu(IDR_TRAY); // 载入菜单
CMenu* pMenu = menu.GetSubMenu(0);
CPoint pos;
GetCursorPos(&pos);
pMenu->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON, pos.x, pos.y, AfxGetMainWnd());
}
break;
case WM_SYSCOMMAND:
if (wParam == SC_MINIMIZE) // 最小化时隐藏主窗体
{
ShowWindow(SW_HIDE);
return 0;
}
break;
}
return CWnd::WindowProc(message, wParam, lParam);
}
5.在主窗体中处理WM_DESTORY消息:
void CMainFrame::OnDestroy()
{
CWnd::OnDestroy();
::Shell_NotifyIcon(NIM_DELETE, &m_nid);
}
希望本文对您有所帮助。
枚举复合文件的存储结构
八 28th
Word和Excel等文件均称为复合文件。这类文件内部有一个“文件系统”,采用“磁盘文件”的组织方式来组织文件内的数据。也称为“文件中的文件系统”。
每个复合文件中有一个“根存储”(类似于文件系统中的“根目录”),根存之下是若干“子存储”(类似于“子目录”)和“数据流”(类似于“文件”),子存储之中可以再有子存储和数据流……。
复合文件是COM技术的基石。下列代码可将任一复合文件的文件结构进行枚举,如配合树型控件(如:CTreeCtrl),可将文件的存储结构清晰的展现出来。
#include <atlconv.h>
void DocFileViewer(LPCTSTR lpszPathName)
{
// lpszPathName: 复合文件存储路径
// COM 初始化
// 如果是MFC程序,可以使用AfxOleInit()替代
::CoInitialize(NULL);
USES_CONVERSION;
LPCTSTR lpFileName = lpszPathName;
HRESULT hr;
IStorage * pStg = NULL;
LPCOLESTR lpwFileName = T2COLE(lpFileName); // 转换T类型为宽字符
hr = ::StgIsStorageFile(lpwFileName); // 是复合文件吗?
if (FAILED(hr))
{
return FALSE;
}
hr = ::StgOpenStorage( // 打开复合文件
lpwFileName, // 文件名称
NULL,
STGM_READWRITE | STGM_DIRECT | STGM_SHARE_EXCLUSIVE,
0,
0,
&pStg); // 得到根存储接口指针
EnumStorage(pStg); // 开始枚举
if(pStg)
{
pStg->Release();
}
// COM 释放
// 如果使用了AfxOleInit(),则无需调用该函数
::CoUninitialize();
}
void EnumStorage(IStorage *pStg)
{
USES_CONVERSION;
IEnumSTATSTG * pEnum = NULL; // 枚举器
HRESULT hr;
hr = pStg->EnumElements(0, NULL, 0, &pEnum);
ASSERT(SUCCEEDED(hr));
STATSTG statstg;
IStorage * pStgSub = NULL; // 子存储接口指针
while (pEnum->Next(1, &statstg, NULL) == NOERROR)
{
// statstg.type 保存着对象类型 STGTY_STREAM 或 STGTY_STORAGE
// statstg.pwcsName 保存着对象名称
// …… 还有时间,长度等很多信息。请查看 MSDN
switch (statstg.type)
{
case STGTY_STORAGE: // 子存储
// …
hr = pStg->OpenStorage( // 打开子存储
statstg.pwcsName,
NULL,
STGM_READWRITE | STGM_DIRECT | STGM_SHARE_EXCLUSIVE,
NULL,
0,
&pStgSub); // 得到子存储接口指针
if (FAILED(hr))
{
return;
}
EnumStorage(pStgSub); // 递归枚举子存储
break;
case STGTY_STREAM: // 数据流
// …
break;
}
::CoTaskMemFree(statstg.pwcsName); // 释放名称所使用的内存
}
if(pEnum)
{
pEnum->Release();
}
if(pStgSub)
{
pStgSub->Release();
}
}
希望本文对您有所帮助。
.NET中将RichTextBox控件的内容存入数据库
八 28th
////////////////////////////////////////////////////////////
// 以下程序将RichTextBox控件(rtb)的内容存入temp_db数据库的
// temp_tab表的content(Text型)字段中。
SqlDataAdapter da = new SqlDataAdapter(“select * from temp_tab”,
“Server=localhost;UID=sa;PWD=1234;Database=temp_db”);
DataTable dt = new DataTable();
da.Fill(dt);
DataRow dr = dt.NewRow();
dr["content"] = rtb.Rtf;
dt.Rows.Add(dr);
SqlCommandBuilder cb = new SqlCommandBuilder(da);
da.Update(dt);
希望本文对您有所帮助。
.NET中获取HTML页面并提取其中的超链接
八 28th
下列的函数分别用于获取HTML页面和提取页面中的超链接。
using System.Net;
using System.IO;
using System.Text;
using System.Text.RegularExpressions;
string[] GetLink(string strHtml)
{
Regex reg = new Regex(“href[\\s\\r]*=[\\s\\r]*[\"\']{0,1}([^\"\'\\s\\r>]*)[\"\'\\s\\r]{0,1}”, RegexOptions.IgnoreCase);
MatchCollection mc = reg.Matches(strHtml);
if (mc.Count > 0)
{
string[] strHref = new string[mc.Count];
int i = 0;
foreach (Match m in mc)
{
strHref[i] = m.Groups[1].Value;
++i;
}
return strHref;
}
return null;
}
string GetHttp(string strUrl)
{
string strHtml = “”;
WebResponse wrp = null;
try
{
WebRequest wrq = WebRequest.Create(strUrl);
wrq.Timeout = 60000;
wrp = wrq.GetResponse();
}
catch (WebException e)
{
}
catch (Exception e)
{
}
finally
{
if (wrp != null)
{
StreamReader sr = new StreamReader(wrp.GetResponseStream(), Encoding.GetEncoding(“GB2312″));
strHtml = sr.ReadToEnd();
sr.Close();
wrp.Close();
}
}
return strHtml;
}
可首先使用GetHttp获取指定URL的页面内容,然后将此内容作为参数传给GetLink,GetLink返回的String数组中的每个元素代表一个超链接。
希望本文对您有所帮助。
ASP.NET中为DataGrid动态创建模板列
八 28th
为DataGrid动态创建模板列,首先要实现ITemplate接口:
public class MyDataGridTemplate : System.Web.UI.ITemplate
{
ListItemType _litType;
object _objData;
public MyDataGridTemplate(ListItemType litType, object objData)
{
_litType = litType;
_objData = objData;
}
public void InstantiateIn(System.Web.UI.Control container)
{
Literal ltr = new Literal();
TextBox txt = new TextBox();
switch(_litType)
{
case ListItemType.Header:
ltr.Text = “<b>” + _objData.ToString() + “</b>”;
container.Controls.Add(ltr);
break;
case ListItemType.Item:
ltr.Text = _objData.ToString();
container.Controls.Add(ltr);
break;
case ListItemType.EditItem:
container.Controls.Add(txt);
break;
case ListItemType.Footer:
ltr.Text = “<i>” + _objData.ToString() + “</i>”;
container.Controls.Add(ltr);
break;
}
}
}
现在就可以动态创建模板列了:
TemplateColumn tc;
tc = new TemplateColumn();
tc.HeaderText = “列1″;
tc.ItemTemplate = new MyDataGridTemplate(ListItemType.Item, “列1″);
dg.Columns.Add(tc);
tc = new TemplateColumn();
tc.HeaderText = “列2″;
tc.ItemTemplate = new MyDataGridTemplate(ListItemType.Item, “列2″);
dg.Columns.Add(tc);
以上代码的效果与下列代码相同:
<asp:TemplateColumn HeaderText=”列1″>
<ItemTemplate>
<asp:Literal Runat=”server” Text=”列1″></asp:Literal>
</ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText=”列2″>
<ItemTemplate>
<asp:Literal Runat=”server” Text=”列2″></asp:Literal>
</ItemTemplate>
</asp:TemplateColumn>
希望本文对您有所帮助。
世界上最健康的作息时间表
八 28th
7:30:起床。英国威斯敏斯特大学的研究人员发现,那些在早上5:22―7:21 分起床的人,其血液中有一种能引起心脏病的物质含量较高,因此,在7:21之后起床对身体健康更加有益。打开台灯。“一醒来,就将灯打开,这样将会重新调整体内的生物钟,调整睡眠和醒来模式。”拉夫堡大学睡眠研究中心教授吉姆·霍恩说。
喝一杯水。水是身体内成千上万化学反应得以进行的必需物质。早上喝一杯清水,可以补充晚上的缺水状态。
7:30―8:00:在早饭之前刷牙。“在早饭之前刷牙可以防止牙齿的腐蚀,因为刷牙之后,可以在牙齿外面涂上一层含氟的保护层。要么,就等早饭之后半小时再刷牙。”英国牙齿协会健康和安全研究人员戈登·沃特金斯说。
8:00―8:30:吃早饭。“早饭必须吃,因为它可以帮助你维持血糖水平的稳定。”伦敦大学国王学院营养师凯文·威尔伦说。早饭可以吃燕麦粥等,这类食物具有较低的血糖指数。
8:30―9:00:避免运动。来自布鲁奈尔大学的研究人员发现,在早晨进行锻炼的运动员更容易感染疾病,因为免疫系统在这个时间的功能最弱。步行上班。马萨诸塞州大学医学院的研究人员发现,每天走路的人,比那些久坐不运动的人患感冒病的几率低25%。
9:30:开始一天中最困难的工作。纽约睡眠中心的研究人员发现,大部分人在每天醒来的一两个小时内头脑最清醒。
10:30:让眼睛离开屏幕休息一下。如果你使用电脑工作,那么每工作一小时,就让眼睛休息3分钟。
11:00:吃点水果。这是一种解决身体血糖下降的好方法。吃一个橙子或一些红色水果,这样做能同时补充体内的铁含量和维生素C含量。
13:00:在面包上加一些豆类蔬菜。你需要一顿可口的午餐,并且能够缓慢地释放能量。“烘烤的豆类食品富含纤维素,番茄酱可以当作是蔬菜的一部分。”维伦博士说。
14:30―15:30:午休一小会儿。雅典的一所大学研究发现,那些每天中午午休30分钟或更长时间,每周至少午休3次的人,因心脏病死亡的几率会下降37%。
16:00:喝杯酸奶。这样做可以稳定血糖水平。在每天三餐之间喝些酸牛奶,有利于心脏健康。
17:00―19:00:锻炼身体。根据体内的生物钟,这个时间是运动的最佳时间,舍菲尔德大**动学医生瑞沃·尼克说。
19:30:晚餐少吃点。晚饭吃太多,会引起血糖升高,并增加消化系统的负担,影响睡眠。晚饭应该多吃蔬菜,少吃富含卡路里和蛋白质的食物。吃饭时要细嚼慢咽。
21:45:看会电视。这个时间看会儿电视放松一下,有助于睡眠,但要注意,尽量不要躺在床上看电视,这会影响睡眠质量。
23:00:洗个热水澡。“体温的适当降低有助于放松和睡眠。”拉夫堡大学睡眠研究中心吉姆·霍恩教授说。
23:30:上床睡觉。如果你早上7点30起床,现在入睡可以保证你享受8小时充足的睡眠。
任何试图更改生物钟的行为,都将给身体留下莫名其妙的疾病,20、30年之后再后悔,已经来不及了。
一、晚上9-11点为免疫系统(淋巴)排毒时间,此段时间应安静或听音乐。
二、晚间11-凌晨1点,肝的排毒,需在熟睡中进行。
三、凌晨1-3点,胆的排毒,亦同。
四、凌晨3-5点,肺的排毒。此即为何咳嗽的人在这段时间咳得最剧烈,因排毒动作已走到肺;不应用止咳药,以免抑制废积物的排除。
五、凌晨5-7点,大肠的排毒,应上厕所排便。
六、凌晨7-9点,小肠大量吸收营养的时段,应吃早餐。疗病者最好早吃,在6点半前,养生者在7点半前,不吃早餐者应改变习惯,即使拖到9、10点吃都比不吃好。
七、半夜至凌晨4点为脊椎造血时段,必须熟睡,不宜熬夜。
记住身体健康作息时间表,安排好你的生活,让你的人生丰富多彩
新闻联播30年精华
八 28th
1、___在钓鱼台国宾馆亲切会见了___,宾主进行了亲切的友好会谈。___高度赞赏了___,并对____一贯坚持“一个中国”的原则表示感谢。
2、___出访___,会见了___,高度赞扬两国关系,对___表示欢迎,支持___的立场。
3、外交部发言人___就___发表声明,对___表示遗憾,提出抗议,并将继续关注。
4、“___五”期间,我国___重点工程,突破___课题,创造效益___,实现利润___。
5、___省___市___县___村加强学习“___”重要精神,切实为农民解决事实。
6、___海关加大打击走私力度,破获一起特大走私案件,查获___共___件,价值人民币___元。
7、今天是___纪念日,我国各地群众,学生纷纷走上街头,宣传普及___知识,加强___教育。
8、___事丨件的原因已经彻底查明,有关责任人已被刑事拘留。
9、今天是___诞辰___周年纪念日,___举行座谈会,深入探讨___,缅怀这位___家。
10、___国群众不满___,举行抗议示威活动。
11、___国议会以___票支持,___票反对,___票反对,___票弃权通过这一项___协议。
12、___,___,请看今晚19点30分播出的___节目。