整理在CSDN上回答网友的问题,温故知新(一)

Q:为什么不能够Kill计时器
A:
KillTimer和SetTimer的第一个句柄参数hwnd应该一致,这个句柄应该是同一线程的某个窗口句柄。  
其次SetTimer和KillTimer的第二个参数nIDEvent也应该一致的。一般来说,SetTimer中nIDEvent需要设为非0,除非第一个参数hwnd的值为NULL。
 
 
1  SetTimer第一个参数不置NULL,则SetTimer中nIDEvent需要设为非0值A。如果成功,返回一个非零值,但这并不是这个Timer的id。要确认TimerProc中操作的是否同一个计时器,则需要在TimerProc的参数nIDEvent和A相比较是否相等。这种情况下Timer的操作应该是:  
    timerid0  =  5500;  //  for  example  
    SetTimer(g_wnd,  timerid0,  2000,  &TimerProc);  
 
///... 
 
void  __stdcall  TimerProc(  HWND  hwnd,  UINT  uMsg,  UINT  idEvent,  DWORD  dwTime)  
{  
    if  (idEvent  ==  timerid0)  
    {  
        KillTimer(g_wnd,  timerid0);  
        ///...  
    }  
}  

  2   SetTimer的hwnd设为NULL,nIDEvent将会被忽略。如果成功,返回一个非零值A,这个A就是TimerProc的nIDEvent。这时应该这样操作:  
    timerid0  =  SetTimer(NULL,  0,  2000,  &TimerProc);  
 
/// ...
 
void  __stdcall  TimerProc(  HWND  hwnd,  UINT  uMsg,  UINT  idEvent,  DWORD  dwTime)  
{  
    if  (idEvent  ==  timerid0)  
    {  
        KillTimer(NULL,  timerid0);  
        ///...  
    }  
}  
Q:播放一段AVI,要循环全屏播放
           MCI_DGV_PLAY_PARMS  mciPlay;  
 
           MCI_DGV_OPEN_PARMS  mciOpen;  
           mciOpen.dwCallback                                      =  0L;  
           mciOpen.wDeviceID                                       =  0;  
           mciOpen.lpstrDeviceType                               =  "avivideo";   
           mciOpen.lpstrElementName                           =  m_lpszFileName;  
           mciOpen.lpstrAlias                                          =  NULL;  
           mciOpen.dwStyle                                            =  WS_CHILD;  
           mciOpen.hWndParent                                     =  hWnd; 
 
           mciSendCommand(0,  
                          MCI_OPEN,    
                          MCI_OPEN_TYPE ¦
   //  specify  this  command  play  file  by  specified  device  type  
                          MCI_OPEN_ELEMENT ¦       //  specify  this  command  play  
                          MCI_DGV_PLAY_REPEAT ¦    //  repeatedly  play  
                          MCI_DGV_OPEN_PARENT,      //  couple  to  WS_CHILD  parameter.  
                          (DWORD)(LPMCI_DGV_OPEN_PARMS)&mciOpen);  
 
           MCI_DGV_STATUS_PARMS            mciStatus;  
           mciStatus.dwItem  =  MCI_DGV_STATUS_HWND;  
           mciSendCommand(mciOpen.wDeviceID,  
                          MCI_STATUS,  MCI_STATUS_ITEM,  
                          (DWORD)(LPMCI_STATUS_PARMS)&mciStatus);  
 
           mciPlay.dwCallback  =  (DWORD)hWnd;  
           mciPlay.dwFrom  =  0;  
           mciPlay.dwTo  =  0;  
 
           ::ShowWindow(*phWnd,SW_MAXIMIZE);  
 
           m_wMCIDeviceID  =  mciOpen.wDeviceID;  
           mciSendCommand(m_wMCIDeviceID,    
                          MCI_PLAY,    
                          MCI_NOTIFY  ¦MCI_DGV_PLAY_REPEAT  ¦MCI_FROM,  
                          (DWORD)(LPMCI_DGV_PLAY_PARMS)&mciPlay);  
 
Q:如何改变框架窗口边框的宽度
A:
手动添加消息WM_NCCALCSIZE的响应函数:  
void  CMainFrame::OnNcCalcSize(BOOL  bCalcValidRects,  NCCALCSIZE_PARAMS  FAR*  lpncsp)    
{  
           CMDIFrameWnd::OnNcCalcSize(bCalcValidRects,  lpncsp);  
           if  (bCalcValidRects)  
                       lpncsp->rgrc[0].bottom  -=  32;      //下边框  
}
  

 
还不够,还要把这块位置用颜色添上:  
void  CMainFrame::OnNcPaint()    
{  
           Default();  
           //...Draw  your  stuff  here  
}  
 
Q:硬盘中文件是怎样组织的祥细说明
A:
Q:怎样将桌面设置为web页面
A:
IActiveDesktop* pAD;
COMPONENTSOPT opt;
HRESULT hr = ::CoCreateInstance(
    CLSID_ActiveDesktop,
    NULL,
    CLSCTX_INPROC_SERVER,
    IID_IActiveDesktop,
    (void**)&pAD);
opt.dwSize = sizeof(opt);
opt.fActiveDesktop =
    opt.fEnableComponents = TRUE;
hr = pAD->SetDesktopItemOptions(&opt,0);
hr = pAD->ApplyChanges(AD_APPLY_REFRESH);
 
Q:通过修改注册表让Windows启动的时候启动程序自身
A:
// find out the file name from given path
CString FindFileName(LPSTR path)
{
    CString filename(path);
    int nIndex = filename.ReverseFind('//');
    filename = filename.Mid(nIndex + 1);
    return filename;
}
// Query if the application will automatically start up when starting windows
BOOL IsAppAutoRunEnabled()
{
    HKEY hKey;
    if(RegCreateKey(HKEY_CURRENT_USER, TEXT("Software//Microsoft//"
            "Windows//CurrentVersion//Run"), &hKey) == ERROR_SUCCESS)
    {
        BOOL bEnabled;
        LPTSTR lpCurrentPath = NULL;
        lpCurrentPath = new CHAR [MAX_PATH];
        GetModuleFileName(NULL,lpCurrentPath,MAX_PATH);
        CString filename = FindFileName(lpCurrentPath);
        bEnabled = (ERROR_SUCCESS == RegQueryValueEx(hKey,
                filename.GetBuffer(0), 0, NULL, NULL, NULL));
        RegCloseKey(hKey);
        delete [] lpCurrentPath;
        return bEnabled;
    }
    return FALSE;
}
// Modify the registry to let the application run at window starting up.
BOOL EnableAppAutoRun()
{
    HKEY hKey;
    if(RegCreateKey(HKEY_CURRENT_USER, TEXT("Software//Microsoft//"
                "Windows//CurrentVersion//Run"), &hKey) == ERROR_SUCCESS)
    {
        LPTSTR lpCurrentPath = NULL;
        lpCurrentPath = new CHAR [MAX_PATH];
        GetModuleFileName(NULL,lpCurrentPath,MAX_PATH);
        CString filename = FindFileName(lpCurrentPath);
        RegSetValueEx(hKey, filename.GetBuffer(0), 0, REG_SZ,
                    (BYTE *)lpCurrentPath, strlen(lpCurrentPath));
        RegCloseKey(hKey);
        return TRUE;
    }
    return FALSE;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
"人工智能导论 全部知识点思维导图整理.emmx"是一份非常值得收藏的文件。这份文件以思维导图的形式整理了人工智能导论的全部知识点,对于学习人工智能的初学者来说,这是一个非常方便且有效的学习工具。 首先,思维导图的形式使得知识点间的关联性一目了然。人工智能是一门涉及到多个领域的学科,知识点之间的联系错综复杂。通过思维导图,我们可以清晰地看到各个知识点之间的逻辑关系,更好地理解人工智能的整体框架。 其次,这个文件涵盖了人工智能导论的全部知识点。人工智能是一个庞大而复杂的领域,很难一下子掌握所有的知识点。这份思维导图整理了全部知识点,使得我们可以有一个全面的了解。通过学习这份导图,我们可以快速地掌握人工智能导论的核心概念和基本原理。 此外,思维导图的形式让我们可以更好地复习和回顾知识点。当我们需要温故知新时,可以通过浏览思维导图中的知识点,快速地回忆起相关的内容。思维导图中的关键词和分支结构,也可以帮助我们更好地组织和记忆知识。 总之,"人工智能导论 全部知识点思维导图整理.emmx"是一份非常有价值的学习资源。通过这份导图,我们可以清晰地了解人工智能导论的知识点之间的逻辑关系,快速地掌握核心概念和基本原理,并且可以更好地复习和回顾知识点。无论是初学者还是进阶学习者,都会从这份文件中受益匪浅。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值