俞敏洪-《生活在潇洒与豁达的心境中》(转)

俞敏洪-《生活在潇洒与豁达的心境中》(转)放大

  —潇洒和豁达意味着对自己的精神有着充分的自信。同时,潇洒和豁达也意味着能够抛弃个人恩怨。

 潇洒与豁达的境界意味着你能超越别人,但是又能原谅别人。潇洒与豁达的境界意味着你能够部分地摆脱人性弱点,并且在这基础上以超然的态度来对待周围的人和事。


  
我曾给新东方的管理层讲过一个故事,关于一个禅宗的故事。三伏天,蚕园的草地上枯黄了一大片。小和尚说:“快撒点种子吧,好难看啊。”师傅说:“等天凉了,随时。”中秋时分,师傅买了一包草籽,叫小和尚去播种。秋风起来,草籽边撒边飘。小和尚就说:“不好了,好多种子都被吹飞了。”老和尚说:“没关系,吹飞的多半是空的,撒下去也发不了芽。随性。”撒完种子,接着就飞来几只小鸟。“要命了,种子都被鸟吃光了。”小和尚说。师傅说:“没关系,种子多,吃不完。随意。”半夜一阵骤雨,小和尚早上冲进禅房:“师傅,这下可真完了,好多草籽被雨冲走了。”“冲到哪儿就在那儿发芽。”师傅说:“随缘。”一个星期过去了,原本光秃秃的地面居然长出了很多青翠的草苗,一些原来没有播种的角落也泛出了绿意。小和尚高兴地直拍手。师傅点头说:“随喜。”

  这里的“随”不是“跟随”的“随”,而是顺其自然的意思,要不抱怨,不过度,不强求。“随”不是“随便”的“随”,而是把握机缘,不悲观,不刻板,不慌乱,不忘形。“五随”概括起来就是要珍惜一切,轻松随性地过自己的生活。这就是对待得与失的正确态度。当草籽被雨冲走以后,在别的地方还会发芽。当你失去某种东西以后,你心灵的种子可能已经在另外一个地方开始开花了,它可能会长出另外一种美丽的果实来。
  面对得与失,我们应该生活在潇洒与豁达的心境中。所谓潇洒与豁达,就是在知道你失去了东西之后,能够用一种开放的,快乐的心态来对待自己的生活。你承认自己是人,而不是神。当别人批评你,指正你的缺点的时候,你承认自己有这个缺点,你可以改正,但是你不应该因为别人指责你的缺点而感到愤怒。当别人说你长得很矮的时候,如果事实确实如此,你就承认了。当别人说你长得很难看的时候,如果你确实长得很难看,你也就承认了。不能改变的事实,我们没有必要去计较。但是你要知道,在身材和长相之外,你还有很多精神,还有很多文化,还有很多气质,这些是可以不断提高的。你的身材不能提高,但是你的灵魂可以提高。邓小平长得很矮,也不好看,但是在这个世界上没有人敢说邓小平不伟大。因此,你不能太在意别人对你的看法,而且别人的看法随着你的进步也会不断改变。潇洒和豁达意味着对自己的精神有着充分的自信。同时,潇洒和豁达也意味着能够抛弃个人恩怨。当你谈论别人的事情的时候,你可以谈笑自如,但是当谈论自己的成功与失败的时候,能谈笑自如的人是非常少的,因为人总是像蜗牛一样保护自己。当你谈到自己的时候能谈笑自如,当你有着强烈的自嘲精神的时候,你就能保持自己的自信,也能保持自己的尊严。潇洒和豁达也意味着对生活中不如意的东西的容忍和乐观。我们生活中每天都有个人恩怨产生,这意味着你深刻了解人性的弱点,因为正是人性的弱点,才会带来个人的恩怨,才会带来不如意的事情,也正是因为你本人有人性的弱点,才会产生恩怨,才会产生不如意的事情。如果你是完人,你是神,那就没有恩怨,没有不如意的事情。我们要以宽容的态度来对待别人。有的人自私,有的人爱面子,有的人心胸狭窄,有的人小气,你要知道这是人间最正常的事情。但是你不能因为别人自私,你也自私,你不能因为别人都要面子,你也要面子,否则,你就不能达到潇洒与豁达的境界。
潇洒与豁达的境界意味着你能超越别人,但是又能原谅别人。潇洒与豁达的境界意味着你能够部分地摆脱人性弱点,并且在这基础上以超然的态度来对待周围的人和事。
  
英文中有这样四句话,其实也是我最喜欢的四句话。

  第一句话是Love as if you’ve never been disappointed by love. 爱的时候,要像从来没有因为爱而失望过一样。人们很容易因为爱而失望。你爱着别人,当你爱的人伤害你的时候,你就很难再爱第二次。我看到过一个说法,一个女人第一次失恋会痛苦六个月,第二次失恋会痛苦三个月,第三次她再也不痛苦了,因为在男人把她抛弃以前,她早就把男人抛弃了。尽管这种做法好像把生活变得轻松了,但同时也变得玩世不恭了。真正重要的是当你一再被人抛弃的时候,一再因为你的爱而受伤害的时候,你依然能够真诚地去爱,在别人抛弃你的时候你依然能够尊重别人,也就是说你的爱不受外界的环境影响,那么,你就活得真诚而潇洒了。

  第二句话是Work as if you don’t need any money. 工作的时候,就像你不需要钱一样。当你工作的时候,是因为工作本身给你带来乐趣,如果工作的时候只是为了钱工作,那工作的乐趣会荡然无存。一心工作,到最后你一定会得到回报,这个回报不仅是财富上的,而且是尊严上的,友情上的,地位上的回报。这些回报加起来,远远比你纯粹地计较钱的回报要大得多。但是世界上很多人没法理解这个道理,我希望新东方的员工能够理解。

  最后两句话是Dance as if nobody is watching you. Sing as if nobody is listening to you. 跳舞的时候,就像没有人在看你那样,唱歌的时候,就像没有人在听你一样。不仅仅是跳舞唱歌的时候,在生活中,你发现自己做的很多事情被别人评判,希望得到别人赞美的时候,你就会非常拘谨,就会故意把自己伪善的一面暴露出来。当你把自己伪善的一面暴露出来的时候,别人会更加贬低你。当你在尊重别人的自由和尊严的前提之下,随性随意而为的时候,别人对你会更加尊重。所以你要达到这两句话的境界,跳舞随性而跳,唱歌随性而唱,也是不容易的事情。中国的少数民族同胞跳起舞来,唱起歌来都非常地美,因为他们在发挥自己的本性,他们在把自己的欢乐和痛苦全部地表达出来。但我们唱歌,每唱一句,都在担心别人到底怎么想,希望得到别人的赞扬,而这恰恰导致我们的生活变得忸怩而拘禁

觉得挺有道理 大家一起分享~~Image

CButton的问题

想用到一个多选按钮。。。函数中判断了半天。没弄对。。。

事实真相是。。你勾上对勾以后才调用函数。。。所以判断的时候应该判断操作以后的状态。

Waveform Audio[译]

使用波形和辅助音频

播放WAVE资源

你可以使用PlaySound函数来播放一个存储的资源。虽然这些也可以使用sndPlaySound函数,sndPlaySound需要你查找,加载,锁定,解锁和释放资源;PlaySound可以使用一行来办到这些

PlaySound例子

PlaySound(“SoundName”, hInst, SND_RESOURCE | SND_ASYNC);

sndPlaySound的例子

SND_MEMORY标志位表明lpszSoundName参数是一个指向内存中WAVE映象文件。为了包含一个当作资源的WAVE文件在程序中,增加下面的语句到资源文件中

soundName WAVE c:soundsbells.wav

——————————————————————————————————————

下面这个例子演示了如果用播放资源的函数播放WAVE资源。

BOOL PlayResource(LPSTR lpName)
{
    BOOL bRtn;
    LPSTR lpRes;
    HANDLE hResInfo, hRes;

    // Find the WAVE resource.

    hResInfo = FindResource(hInst, lpName, "WAVE");
    if (hResInfo == NULL)
        return FALSE;

    // Load the WAVE resource.

    hRes = LoadResource(hInst, hResInfo);
    if (hRes == NULL)
        return FALSE;

    // Lock the WAVE resource and play it.

    lpRes = LockResource(hRes);
    if (lpRes != NULL) {
        bRtn = sndPlaySound(lpRes, SND_MEMORY | SND_SYNC |
            SND_NODEFAULT);
        UnlockResource(hRes);
    }
    else
        bRtn = 0;

    // Free the WAVE resource and return success or failure.

    FreeResource(hRes);
    return bRtn;
}
<strong><font size="2">使用PCMWAVEFORMAT结构</font></strong>
<font size="2">对于PCM音频数据,使用PCMWAVEFORMAT结构来指定数据格式。接下来的例子演示了怎样来设置</font>
<font size="2">PCMWAVEFORMAT结构对于11.025KHz,8声道和44.1KHz,16位立体声。在设置PCMWAVEFORMAT之后,</font>
<font size="2">例子调用了IsFormatSupported函数来验证PCM波形输出设备是否支持格式。</font>
<pre><font size="2">UINT wReturn;
PCMWAVEFORMAT pcmWaveFormat;

// Set up PCMWAVEFORMAT for 11 kHz 8-bit mono.

pcmWaveFormat.wf.wFormatTag = WAVE_FORMAT_PCM;
pcmWaveFormat.wf.nChannels = 1;
pcmWaveFormat.wf.nSamplesPerSec = 11025L;
pcmWaveFormat.wf.nAvgBytesPerSec = 11025L;
pcmWaveFormat.wf.nBlockAlign = 1;
pcmWaveFormat.wBitsPerSample = 8;

// See if format is supported by any device in system.

wReturn = IsFormatSupported(&amp;pcmWaveFormat, WAVE_MAPPER);

// Report results.

if (wReturn == 0)
     MessageBox(hMainWnd, "11 kHz 8-bit mono is supported.",
       "", MB_ICONINFORMATION);
else if (wReturn == WAVERR_BADFORMAT)
     MessageBox(hMainWnd, "11 kHz 8-bit mono NOT supported.",
       "", MB_ICONINFORMATION);
else
     MessageBox(hMainWnd, "Error opening waveform device.",
       "Error", MB_ICONEXCLAMATION);

// Set up PCMWAVEFORMAT for 44.1 kHz 16-bit stereo.

pcmWaveFormat.wf.wFormatTag = WAVE_FORMAT_PCM;
pcmWaveFormat.wf.nChannels = 2;
pcmWaveFormat.wf.nSamplesPerSec = 44100L;
pcmWaveFormat.wf.nAvgBytesPerSec = 176400L;
pcmWaveFormat.wf.nBlockAlign = 4;
pcmWaveFormat.wBitsPerSample = 16;

// See if format is supported by any device in the system.

wReturn = IsFormatSupported(&amp;pcmWaveFormat, WAVE_MAPPER);

/ Report results.

if (wReturn == 0)
    MessageBox(hMainWnd, "44.1 kHz 16-bit stereo is supported.",
      "", MB_ICONINFORMATION);
else if (wReturn == WAVERR_BADFORMAT)
    MessageBox(hMainWnd, "44.1 kHz 16-bit stereo NOT supported.",
      "", MB_ICONINFORMATION);
else
    MessageBox(hMainWnd, "Error opening waveform device.",
      "Error", MB_ICONEXCLAMATION);
<strong><font size="3">确定非标准的格式支持</font></strong></font>
<font size="2"><font size="2">为了知道一个设备是否支持一种特别的格式,你可以加上WAVE_FORMAT_QUERY标位调用</font></font>
<font size="2"><font size="2">waveOutOpen函数。接下来的例子使用这个技术来确定一个波形音频设备是否支持一个指定的格式。</font></font>
<pre><font size="2">// Determines whether the specified waveform-audio output device
// supports a specified waveform-audio format. Returns
// MMSYSERR_NOERROR if the format is supported, WAVEERR_BADFORMAT if
// the format is not supported, and one of the other MMSYSERR_ error
// codes if there are other errors encountered in opening the
// specified waveform-audio device.

MMRESULT IsFormatSupported(LPWAVEFORMATEX pwfx, UINT uDeviceID)
{
    return (waveOutOpen(
        NULL,                 // ptr can be NULL for query
        uDeviceID,            // the device identifier
        pwfx,                 // defines requested format
        NULL,                 // no callback
        NULL,                 // no instance data
        WAVE_FORMAT_QUERY));  // query only, do not open device
} <br/>用这种技术来确定是否支持非标准格式对于波形音频输入设备同样也适用。仅仅不同的是使用</font>
<font size="2">waveInOpen函数来代替waveOutOpen来查询支持的格式。</font>
<font size="2">为了确定在系统中一个特殊的波形音频数据设备是否被波形音频设备所支持,使用前面的例子。</font>
<font size="3"><strong>写波形音频数据的例子</strong></font>
<div dir="ltr" style="text-align: left"><p><font size="2">下面的例子说明分配所需采取的步骤,设置WAVEHDR结构和写一个数据块到波形音频输出设备中。</font></p><pre><font size="2">// Global variables.

HANDLE hData  = NULL;  // handle of waveform data memory
HPSTR  lpData = NULL;  // pointer to waveform data memory

void WriteWaveData(void)
{
    HWAVEOUT    hWaveOut;
    HGLOBAL     hWaveHdr;
    LPWAVEHDR   lpWaveHdr;
    HMMIO       hmmio;
    UINT        wResult;
    HANDLE      hFormat;
    WAVEFORMAT  *pFormat;
    DWORD       dwDataSize;

    // Open a waveform device for output using window callback.

    if (waveOutOpen((LPHWAVEOUT)&amp;hWaveOut, WAVE_MAPPER,
                    (LPWAVEFORMAT)pFormat,
                    (LONG)hwndApp, 0L, CALLBACK_WINDOW))
    {
        MessageBox(hwndApp,
                   "Failed to open waveform output device.",
                   NULL, MB_OK | MB_ICONEXCLAMATION);
        LocalUnlock(hFormat);
        LocalFree(hFormat);
        mmioClose(hmmio, 0);
        return;
    }

    // Allocate and lock memory for the waveform data.

    hData = GlobalAlloc(GMEM_MOVEABLE | GMEM_SHARE, dwDataSize );
    if (!hData)
    {
        MessageBox(hwndApp, "Out of memory.",
                   NULL, MB_OK | MB_ICONEXCLAMATION);
        mmioClose(hmmio, 0);
        return;
    }
    if ((lpData = GlobalLock(hData)) == NULL)
    {
        MessageBox(hwndApp, "Failed to lock memory for data chunk.",
                   NULL, MB_OK | MB_ICONEXCLAMATION);
        GlobalFree(hData);
        mmioClose(hmmio, 0);
        return;
    }

    // Read the waveform data subchunk.

    if(mmioRead(hmmio, (HPSTR) lpData, dwDataSize) != (LRESULT)dwDataSize)
    {
        MessageBox(hwndApp, "Failed to read data chunk.",
                   NULL, MB_OK | MB_ICONEXCLAMATION);
        GlobalUnlock(hData);
        GlobalFree(hData);
        mmioClose(hmmio, 0);
        return;
    }

    // Allocate and lock memory for the header.

    hWaveHdr = GlobalAlloc(GMEM_MOVEABLE | GMEM_SHARE,
        (DWORD) sizeof(WAVEHDR));
    if (hWaveHdr == NULL)
    {
        GlobalUnlock(hData);
        GlobalFree(hData);
        MessageBox(hwndApp, "Not enough memory for header.",
            NULL, MB_OK | MB_ICONEXCLAMATION);
        return;
    }

    lpWaveHdr = (LPWAVEHDR) GlobalLock(hWaveHdr);
    if (lpWaveHdr == NULL)
    {
        GlobalUnlock(hData);
        GlobalFree(hData);
        MessageBox(hwndApp,
            "Failed to lock memory for header.",
            NULL, MB_OK | MB_ICONEXCLAMATION);
        return;
    }

    // After allocation, set up and prepare header.

    lpWaveHdr-&gt;lpData = lpData;
    lpWaveHdr-&gt;dwBufferLength = dwDataSize;
    lpWaveHdr-&gt;dwFlags = 0L;
    lpWaveHdr-&gt;dwLoops = 0L;
    waveOutPrepareHeader(hWaveOut, lpWaveHdr, sizeof(WAVEHDR));

    // Now the data block can be sent to the output device. The
    // waveOutWrite function returns immediately and waveform
    // data is sent to the output device in the background.

    wResult = waveOutWrite(hWaveOut, lpWaveHdr, sizeof(WAVEHDR));
    if (wResult != 0)
    {
        waveOutUnprepareHeader(hWaveOut, lpWaveHdr,
                               sizeof(WAVEHDR));
        GlobalUnlock( hData);
        GlobalFree(hData);
        MessageBox(hwndApp, "Failed to write block to device",
                   NULL, MB_OK | MB_ICONEXCLAMATION);
        return;
    }
} </font>

处理MM_WOM_DONE消息

接下来的例子演示了怎样处理MM_WOM_DONE消息。这个例子假定应用程序不播放多个数据块,所以它可以

在播放单个数据块后关闭输出设备。

// WndProc--Main window procedure.
LRESULT FAR PASCAL WndProc(HWND hWnd, UINT msg, WPARAM wParam,
    LPARAM lParam)
{
switch (msg)
{
    case MM_WOM_DONE:

    // A waveform-audio data block has been played and
    // can now be freed.
    waveOutUnprepareHeader((HWAVEOUT) wParam,
        (LPWAVEHDR) lParam, sizeof(WAVEHDR) );

    // Free hData memory.

    waveOutClose((HWAVEOUT) wParam);
    break;
    }
    return DefWindowProc(hWnd, msg, wParam, lParam);
}