VC编程常见问题集锦

来源:互联网 发布:js 文本框中数值 合计 编辑:程序博客网 时间:2024/05/22 15:28
 为什么即使调用EnableMenuItem菜单项后,菜单项还处于禁止状态?

需要将CFrameWnd:: m_bAutomenuEnable设置为FALSE,如果该数据成员为TRUE(
缺省值),工作框将自动地禁止没有ON_UPDATE_COMMAND_UI或者ON_COMMAND的菜单项。

//Disable MFC from automatically disabling menu items.
m_bAuoMenuEnable=FALSE
//Now enable the menu item.
CMenu* pMenu=GetMenu ()
ASSERT_VALID (pMenu)

pMenu
->EnableMenuItem (ID_MENU_ITEM,MF_BYCOMMAND | MF_ENABLED)

 

我怎么才能在VC里面创建一个系统声?

你可以使用MessageBeep API调用。

下面是它的调用方法:

MessageBeep(UINT nType) //有6个参数,参考下面定义

-1 使用标准的扬声器

MB_ICONASTERISK SystemAsterisk

MB_ICONEXCLAMATION 调用系统“感叹”的声音

MB_ICONHAND SystemHand

MB_ICONQUESTION 系统出错声

MB_OK 系统缺省音

上面的声音除了扬声器不可更改,其余的都可在控制面板->声音里面进行更改。

我怎样才能建立一个等待光标?

调 用 BeginWaitCursor 函 数 来 启 动 等 待 光 标,调 用 EndWaitCursor
函 数 来 结 束 等 待 光 标。要 注 意,二 者 都 要 调 用 app 的 成 员 函
数,如 下 所 示:

    AfxGetApp()->BeginWaitCursor();
    // 要做的事
    AfxGetApp()->EndWaitCursor();

使用拖放的简单方法
如果要为窗口增加接受Drag&Drop的功能,请按照以下步骤:
1、在OnCreate(...)中调用AcceptDrag(TRUE)。
2、增加消息映射
BEGIN_MESSAGE_MAP(……)
    
//{{AFX_MSG_MAP(CDropEdit)
    ON_WM_CREATE()
    ON_WM_DROPFILES() 
// 关于Drag&Drop的消息
    
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
3、处理消息
void CXXXXX::OnDropFiles(HDROP dropInfo)
{
    
// 得到Drag&Drop的文件个数
    WORD wNumFilesDropped = DragQueryFile(dropInfo, -1, NULL, 0);

    CString firstFile
="";

    
// 
    for (WORD x = 0 ; x < wNumFilesDropped; x++{

        
// 得到PathName的长度,由于第三个参数为NULL,所以调用会失败并返回所需长度
        WORD wPathnameSize = DragQueryFile(dropInfo, x, NULL, 0);

        
// 分配memory
        char * npszFile = (char *) LocalAlloc(LPTR, wPathnameSize += 1);

        
// 分配错
        if (npszFile == NULL) continue;

        
// 再次得到文件名
        DragQueryFile(dropInfo, x, npszFile, wPathnameSize);

        firstFile
=npszFile;


             
// 如果是shortCut则进行转换得到正确的文件名,expandedFile为最后的文件名
             CString expandedFile = ExpandShortcut(firstFile);

        
// 释放memory
        LocalFree(npszFile);
    }


    
//完成
    DragFinish(dropInfo);

}

4、关于ExpandShortcut(...)
CString CXXXXX::ExpandShortcut(CString &inFile)
{
    CString outFile 
= "";

// Make sure we have a path
ASSERT(inFile != _T(""));

IShellLink
* psl;
HRESULT hres;
LPTSTR lpsz 
= inFile.GetBuffer(MAX_PATH);

// Create instance for shell link
hres = ::CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER,
IID_IShellLink, (LPVOID
*&psl);
if (SUCCEEDED(hres))
{
// Get a pointer to the persist file interface
IPersistFile* ppf;
hres 
= psl->QueryInterface(IID_IPersistFile, (LPVOID*&ppf);
if (SUCCEEDED(hres))
{
// Make sure it's ANSI
WORD wsz[MAX_PATH];
::MultiByteToWideChar(CP_ACP, 
0, lpsz, -1, wsz, MAX_PATH);

// Load shortcut
hres = ppf->Load(wsz, STGM_READ);
if (SUCCEEDED(hres)) {
                WIN32_FIND_DATA wfd;
                
// find the path from that
                HRESULT hres = psl->GetPath(outFile.GetBuffer(MAX_PATH), 
                                MAX_PATH,
                                
&wfd, 
                                SLGP_UNCPRIORITY);

                outFile.ReleaseBuffer();
}

ppf
->Release();
}

psl
->Release();
}


    inFile.ReleaseBuffer();

    
// if this fails, outFile == ""
return outFile;
}

原创粉丝点击