(鍏跺疄鎴戜笉鏄綉绠★紝璇︽儏璇风湅……) 鍏充簬缃戠涔嬭矾鐨勮鏄

Wimamp 瑙嗚鏁堟灉鎻掍欢 DIY

 Wimamp 瑙嗚鏁堟灉鎻掍欢 DIY


鎴戞兂锛氬湪鍥炵瓟鈥滀綘鐢ㄤ粈涔堟挱鏀惧櫒鍚 MP3鈥濊繖涓棶棰樻椂锛90%鐨勪汉閮戒細鍥炵瓟 Winamp锛侀偅涔堜綘涓瀹氱敤杩 Winamp 鐨勬彃浠跺姛鑳藉惂锛屾鏄鏍峰寲鐨勬彃浠朵娇杩欎釜鈥滆佲濇挱鏀惧櫒涓嶆柇鍦扮剷鍙戦潚鏄ャ備笉绠℃柊鎺ㄥ嚭浠涔堥煶棰戞牸寮(MP4,VQF,RM...)锛屽彧瑕佹彃浠朵竴瑁呭氨鑳芥挱鏀俱傝繕鏈夊舰褰㈣壊鑹茬殑鍙鎻掍欢锛屾瘮濡 Giess 绛夌瓑锛屽皢闊充箰鐨勮妭濂忔劅琛ㄧ幇鐨勫彲璋撴穻婕撳敖鑷达紒

    鏃㈢劧鎻掍欢鏄敤绋嬪簭缂栧啓鐨勶紝閭d箞鎴戜滑浣曚笉鏉ヤ竴璇曡韩鎵嬶紝鍔ㄦ墜鍋氬畠涓涓嚭鏉ワ紵锛佺敤杩 Winamp 鐨勪汉閮界煡閬擄紝Winamp 鎻掍欢鏄斁鍦 Pulgin 鏂囦欢澶逛腑涓涓釜鐨 DLL(鍔ㄦ侀摼鎺ュ簱)鏂囦欢锛屾墍浠ョ紪鍐 Winamp 鎻掍欢鍏跺疄灏辨槸缂栧啓 Windows 鐨勫姩鎬侀摼鎺ュ簱銆傚綋鐒跺啓鐨勬椂鍊欐槸瑕侀伒寰竴瀹氱殑瑙勮寖鐨(鐩稿叧鏂囨。鍙互浠 www.winamp.com 涓嬭浇)锛屽湪杩欐柟闈紝Winamp 浣滆 Justin Frankel 鍐欑殑涓涓彲瑙嗘彃浠剁殑渚嬪瓙鍙互浣滀负鎴戜滑寰堝ソ鐨勫弬鑰冦備笅闈㈡垜浠氨浠ヨ繖涓緥瀛(褰撶劧涔熸槸涓涓紪鍐欒鑼)涓哄弬鑰冿紝璁よ瘑涓涓 Winamp 鍙鎻掍欢鐨勭紪鍐欐柟娉曘
(涓嬮潰鐨勭▼搴忓彲浠 Winamp 瀹樻柟缃戠珯涓嬭浇锛屾枃浠跺悕涓 vis_minisdk.zip)

棣栧厛璁╂垜浠湅涓涓嬪彲瑙嗘彃浠朵娇鐢ㄧ殑鏁版嵁缁撴瀯(鍦ㄦ枃浠 Vis.h 涓)
// 娉ㄦ剰:
// 浠讳綍鍛嗗湪鍓嶅彴鐨勬彃浠剁獥鍙i兘搴旇灏嗘寜閿紶閫佺粰鍏剁埗(WinAMP 鐨)绐楀彛锛屼互纭繚
// 鐢ㄦ埛浠嶆棫鍙互鎺у埗 WinAMP(闄ら潪鐢ㄦ埛鎸変簡 ESC 閿垨鑰呮彃浠舵墍鎸囧畾鐨勯敭)銆
// 鍦ㄥ瓨鍌ㄩ厤缃椂锛岄厤缃暟鎹簲褰撶粺涓瀛樻斁鍦 <dll directory>\plugin.ini 涓
// 璇峰皢杩欎釜鎻掍欢渚嬬▼鐪嬩綔涓涓鏋躲

typedef struct winampVisModule {
  char *description; // 妯″潡鎻忚堪(鍑虹幇鍦ㄦ彃浠堕夋嫨鍒楄〃妗嗕笅闈㈠緱涓嬫媺鍒楄〃妗嗕腑)
  HWND hwndParent; // 鐖剁獥鍙------------- (鐢变富璋冨簲鐢ㄥ~鍏)
  HINSTANCE hDllInstance; // 姝 DLL 鐨勫疄渚嬪彞鏌 - (鐢变富璋冨簲鐢ㄥ~鍏)
  int sRate; // 閲囨牱閫熺巼 ---------- (鐢变富璋冨簲鐢ㄥ~鍏)
  int nCh; // 澹伴亾鏁 ------------ (鐢变富璋冨簲鐢ㄥ~鍏)
  int latencyMs; // 浠庤皟鐢 RenderFrame 鍒扮湡姝g粯鍒剁殑娼滀紡鏃堕棿(姣)
  // (涓昏皟搴旂敤鍦ㄨ幏鍙栨暟鎹殑鏃跺欎細鏌ョ湅杩欎釜鍊)
  int delayMs; // 姣忎袱娆¤皟鐢ㄤ箣闂寸殑闂撮殧鏃堕棿(姣)

  // 鏁版嵁渚濈収鍚勮嚜鐨 Nch(澹伴亾鏁) 鏉$洰琚~鍏
  int spectrumNch;
  int waveformNch;
  unsigned char spectrumData[2][576]; // 棰戣氨鏁版嵁
  unsigned char waveformData[2][576]; // 娉㈠舰鏁版嵁

  void (*Config)(struct winampVisModule *this_mod); // 妯″潡閰嶇疆鍑芥暟
  int (*Init)(struct winampVisModule *this_mod); // 鍒濆鍖栧嚱鏁(鍒涘缓绐楀彛绛夌瓑)銆傛垚鍔熻繑鍥0
  int (*Render)(struct winampVisModule *this_mod); // 鈥滆〃婕斺濆嚱鏁般傛垚鍔熻繑鍥0锛屽杩斿洖1琛ㄧず鎻掍欢搴旇缁堟
  void (*Quit)(struct winampVisModule *this_mod); // 妯″潡閫鍑哄嚱鏁般傚畬鎴愪箣鍚庤皟鐢

  void *userData; // 鐢ㄦ埛鏁版嵁 (鍙)
} winampVisModule;

typedef struct {
  int version; // VID_HDRVER (褰撳墠妯″潡鐨勭増鏈)
  char *description; // 鎻掍欢鐨勬弿杩(鍑虹幇鍦ㄩ夋嫨鎻掍欢瀵硅瘽妗嗙殑鎻掍欢鍒楄〃妗嗕腑)
  winampVisModule* (*getModule)(int); // 鐢ㄦ潵鑾峰彇妯″潡缁撴瀯
} winampVisHeader;

// 瀹氫箟瀵煎嚭鏍囪瘑
typedef winampVisHeader* (*winampVisGetHeaderType)();

// 褰撳墠妯″潡鐨勭増鏈 (0x101 == 1.01)
#define VIS_HDRVER 0x101

    涓婇潰鍒楀嚭鐨勬槸涓涓紪鍐欏彲瑙嗘彃浠跺繀椤诲寘鍚殑澶存枃浠讹紝閲岄潰鍒楀嚭浜嗗彲瑙嗘彃浠剁敤鍒扮殑鏁版嵁缁撴瀯銆傚湪鎺㈣鍏蜂綋鎻掍欢绋嬪簭涔嬪墠锛屾湁涓浜涙蹇靛繀椤绘悶娓咃細涓涓彲瑙嗘彃浠朵腑鍙互鍖呭惈鑻ュ共涓ā鍧(姣忎竴妯″潡閮芥槸涓绉嶆紨绀烘晥鏋滐紝鍙互鍦ㄦ彃浠堕夋嫨瀵硅瘽妗嗕腑閫夋嫨鐢ㄥ摢涓ā鍧楁潵婕旂ず)锛岃繖浜涙ā鍧楅氳繃鏌愮鏂规硶(鍚庨潰灏嗕細鐪嬪埌)琚 Winamp 鑾峰彇锛屼粠鑰屽緱鍒扳滆〃婕斺濈殑鏈轰細銆傜畝鑰岃█涔嬶紝Winamp 鍒╃敤鎵鏈夋彃浠 DLL 涓鍑虹殑涓涓粺涓鍚嶇О鐨勫嚱鏁拌幏寰椾簡涓涓彃浠跺ご鏁版嵁缁撴瀯锛岀劧鍚庨氳繃姝ゆ暟鎹粨鏋勪腑鐨勪竴涓嚱鏁板啀鍘昏幏鍙栧悇涓ā鍧楃殑淇℃伅(杩欎釜杩囩▼涓 COM 鐨 QueryInterface() 鐢ㄦ硶鏈変簺绁炰技锛岀湅鏉ュソ鐨勮璁℃濇兂鏄浉閫氱殑)锛岃繘鑰屽埄鐢ㄥ绾跨▼(閫氳繃 DLL View 瑙傚療寰楃煡)瀹炵幇鍙鎻掍欢鐨勫睍绀恒備笅闈㈠氨鏄彲瑙嗘彃浠剁殑婧愮▼搴忥細
// Winamp 娴嬭瘯鐢ㄥ彲瑙嗘彃浠 v1.0
// 鐗堟潈鎵鏈 (C) 1997-1998, Justin Frankel/Nullsoft
// 鍩轰簬姝ゆ鏋跺彲鑷敱鐨勭紪鍐欎换浣曞彲瑙嗘彃浠...

#include <windows.h>

#include "vis.h"

char szAppName[] = "SimpleVis"; // 绐楀彛绫诲悕

// 鏈夊叧閰嶇疆鐨勫0鏄
int config_x=50, config_y=50; // 绐楀彛鍦ㄥ睆骞曚笂鐨勬í绾靛潗鏍
void config_read(struct winampVisModule *this_mod); // 璇婚厤缃
void config_write(struct winampVisModule *this_mod); // 鍐欓厤缃
void config_getinifn(struct winampVisModule *this_mod, char *ini_file); // 鐢熸垚涓涓 .ini 鏂囦欢鍚

// 鍦ㄩ渶瑕佺殑鏃跺欒繑鍥炰竴涓 winampVisModule锛岀敤鍦ㄤ笅闈㈢殑 hdr 涓俉inAMP 鍙敱姝ゅ緱鐭ユ彃浠朵腑鐨勬ā鍧楁暟銆
winampVisModule *getModule(int which);

// "鎴愬憳"鍑芥暟
void config(struct winampVisModule *this_mod); // 妯″潡閰嶇疆鍑芥暟
int init(struct winampVisModule *this_mod); // 妯″潡鍒濆鍖栧嚱鏁
int render1(struct winampVisModule *this_mod); // 妯″潡1 鐨勨滆〃婕斺濆嚱鏁
int render2(struct winampVisModule *this_mod); // 妯″潡2 鐨勨滆〃婕斺濆嚱鏁
int render3(struct winampVisModule *this_mod); // 妯″潡3 鐨勨滆〃婕斺濆嚱鏁
void quit(struct winampVisModule *this_mod); // 妯″潡缁撴潫鐨勬竻鐞嗗嚱鏁

// 鎻掍欢绐楀彛鐨勭獥鍙e鐞嗗嚱鏁
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
HWND hMainWnd; // 涓荤獥鍙e彞鏌

// 鍙岀紦鍐叉暟鎹
HDC memDC; // 鍐呭瓨DC
HBITMAP memBM, // 鍐呭瓨浣嶅浘 (for memDC)
oldBM; // old bitmap (from memDC)


// 妯″潡澶撮儴銆傚寘鎷ā鍧楃増鏈紝鎻掍欢鎻忚堪(鍑虹幇鍦ㄩ夋嫨鎻掍欢瀵硅瘽妗嗙殑鎻掍欢鍒楄〃妗嗕腑)鍜屾ā鍧楁帴鍙e嚱鏁扮殑鍦板潃
winampVisHeader hdr = { VIS_HDRVER, "Nullsoft Test Visualization Library v1.0", getModule };

// 绗竴妯″潡 (绀烘尝鍣)
winampVisModule mod1 =
{
    "Oscilliscope",
    NULL, // hwndParent
    NULL, // hDllInstance
    0, // sRate
    0, // nCh
    25, // latencyMS
    25, // delayMS
    0, // spectrumNch
    2, // waveformNch
    { 0, }, // spectrumData
    { 0, }, // waveformData
    config,
    init,
    render1, 
    quit
};

// 绗簩妯″潡 (鍏夎氨鍒嗘瀽)
winampVisModule mod2 =
{
    "Spectrum Analyser",
    NULL, // hwndParent
    NULL, // hDllInstance
    0, // sRate
    0, // nCh
    25, // latencyMS
    25, // delayMS
    2, // spectrumNch
    0, // waveformNch
    { 0, }, // spectrumData
    { 0, }, // waveformData
    config,
    init,
    render2, 
    quit
};

// 绗笁妯″潡 (VU meter)
winampVisModule mod3 =
{
    "VU Meter",
    NULL, // hwndParent
    NULL, // hDllInstance
    0, // sRate
    0, // nCh
    25, // latencyMS
    25, // delayMS
    0, // spectrumNch
    2, // waveformNch
    { 0, }, // spectrumData
    { 0, }, // waveformData
    config,    
    init,
    render3, 
    quit
};


// 杩欐槸鎻掍欢 DLL 涓粎鏈夌殑涓涓鍑哄嚱鏁帮紝鐢ㄦ潵杩斿洖鎻掍欢澶寸粨鏋勪綋鎸囬拡锛屼粠鑰岃繘涓姝ュ緱
// 鐭ユ彃浠朵腑鍚勪釜妯″潡鐨勪俊鎭
// 濡傛灉浣犳鍦ㄧ紪璇 C++ 绋嬪簭锛宔xtern "C" { 灏辨槸蹇呰鐨勶紝鎵浠ユ垜浠娇鐢ㄤ簡 #ifdef銆
#ifdef __cplusplus
extern "C" {
#endif
__declspec( dllexport ) winampVisHeader *winampVisGetHeader()
{
    return &hdr;
}
#ifdef __cplusplus
}
#endif

// 鍦ㄥ緱鍒版彃浠跺ご缁撴瀯浣撴寚閽堝悗鐢ㄦ潵鑾峰彇妯″潡淇℃伅銆
// 濡傛灉涓涓笉瀛樺湪鐨勬ā鍧楄璇锋眰灏辫繑鍥 NULL锛屽惁鍒欎緷鎹 'which' 鏉ヨ繑鍥炲悇鍙敤妯″潡(缁撴瀯浣撴寚閽)涓殑涓涓
winampVisModule *getModule(int which)
{
    switch (which)
    {
        case 0: return &mod1;
        case 1: return &mod2;
        case 2: return &mod3;
        default:return NULL;
    }
}

// 妯″潡閰嶇疆鍑芥暟銆傞氳繃 this_mod 鍙緱鐭ヨ閰嶇疆鍝釜妯″潡銆
// 鍏佽浣犵殑鎵鏈夋ā鍧楀叡鐢ㄤ竴涓厤缃嚱鏁般
// (褰撶劧浣犱笉涓闈炲畾瑕佷娇鐢ㄨ繖涓悕瀛楋紝浣犲彲浠ュ缓绔 config1(), config2(), 绛夌瓑...)
void config(struct winampVisModule *this_mod)
{
    MessageBox(this_mod->hwndParent,"This module is Copyright (c) 1997-1998, Justin Frankel/Nullsoft\n"
    "-- This is just a demonstration module, it really isn't\n"
    " supposed to be enjoyable --","Configuration",MB_OK);
}

// 妯″潡鍒濆鍖栧嚱鏁般傛敞鍐岀獥鍙g被锛屽垱寤虹獥鍙g瓑绛夈
// 杩欐槸鎵鏈夋ā鍧楅兘瑕佸仛鐨勫伐浣滐紝浣嗘槸浣犱篃鍙互寤虹珛 init1() 鍜 init2()...
// 鎴愬姛杩斿洖 0锛屽け璐ヨ繑鍥1銆
int init(struct winampVisModule *this_mod)
{
    int width = (this_mod == &mod3)?256:288; // mod1 鍜 mod2 鐨勫楂樼浉绛
    int height = (this_mod == &mod3)?32:256; // 浣嗘槸 mod3 鐨勪笌鍙﹀涓や釜涓嶅悓

    config_read(this_mod); // 璇诲彇閰嶇疆淇℃伅


    { // 娉ㄥ唽绐楀彛绫
        WNDCLASS wc;
        memset(&wc,0,sizeof(wc));
        wc.lpfnWndProc = WndProc; // 绐楀彛澶勭悊杩囩▼
        wc.hInstance = this_mod->hDllInstance; // DLL 鐨勫疄渚嬪彞鏌
        wc.lpszClassName = szAppName; // 绐楀彛绫诲悕

        if (!RegisterClass(&wc)) 
        {
            MessageBox(this_mod->hwndParent,"Error registering window class","blah",MB_OK);
            return 1;
        }
    }


    hMainWnd = CreateWindowEx(
        WS_EX_TOOLWINDOW|WS_EX_APPWINDOW, // 杩欎簺鎵╁睍椋庢牸寤虹珛涓涓ソ鐪嬬殑灏忕獥鍙e妗嗭紝 
        // 浣嗘槸绐楀彛鍦ㄤ换鍔℃爮涓婃湁涓涓寜閽
        szAppName, // 绐楀彛绫诲悕
        this_mod->description, // 绐楀彛鏍囬浣跨敤妯″潡鎻忚堪
        WS_VISIBLE|WS_SYSMENU, // 浣跨獥鍙e彲瑙佸苟涓旀湁涓涓叧闂寜閽
        config_x,config_y, // 绐楀彛鐨勫睆骞曚綅缃 (浠庨厤缃腑璇诲彇)
        width,height, // 绐楀彛鐨勫楂 (闇瑕佸湪鍚庨潰璋冩暣瀹㈡埛鍖哄昂瀵)
        this_mod->hwndParent, // 鐖剁獥鍙e彞鏌 (WinAMP 涓荤獥鍙)
        NULL, // 鏃犺彍鍗
        this_mod->hDllInstance, // DLL 鐨勫疄渚嬪彞鏌
        0); // 鏃犵獥鍙e垱寤烘暟鎹

    if (!hMainWnd) 
    {
        MessageBox(this_mod->hwndParent,"Error creating window","blah",MB_OK);
        return 1;
    }


    SetWindowLong(hMainWnd,GWL_USERDATA,(LONG)this_mod); // 灏嗙獥鍙g敤鎴锋暟鎹涓烘ā鍧楃粨鏋勪綋鎸囬拡

    { // 璋冩暣绐楀彛灏哄浠ヤ娇寰楀鎴峰尯绛変簬瀹戒箻楂
        RECT r;
        GetClientRect(hMainWnd,&r);
        SetWindowPos(hMainWnd,0,0,0,width*2-r.right,height*2-r.bottom,SWP_NOMOVE|SWP_NOZORDER);
    }


    // 鍒涘缓鍙岀紦鍐
    memDC = CreateCompatibleDC(NULL);
    memBM = CreateCompatibleBitmap(memDC,width,height);
    oldBM = SelectObject(memDC,memBM);

    // 鏄剧ず绐楀彛
    ShowWindow(hMainWnd,SW_SHOWNORMAL);
    return 0;
}

// 绀烘尝鍣ㄦā鍧楃殑鈥滆〃婕斺濆嚱鏁般傛垚鍔熻繑鍥0锛屽鏋滄彃浠跺簲璇ヨ缁堟鍒欒繑鍥1銆
int render1(struct winampVisModule *this_mod)
{
    int x, y;
    // 娓呴櫎鑳屾櫙
    Rectangle(memDC,0,0,288,256);
    // 缁樺埗绀烘尝鍣
    for (y = 0; y < this_mod->nCh; y ++) //鏈夊嚑涓0閬撳氨鑺卞嚑鏉℃尝褰㈠浘
    {
        MoveToEx(memDC,0,(y*256)>>(this_mod->nCh-1),NULL);
        for (x = 0; x < 288; x ++)
        {
            LineTo(memDC,x,(y*256 + this_mod->waveformData[y][x]^128)>>(this_mod->nCh-1));
        }
    }
    { // 灏嗗弻缂撳啿澶嶅埗鍒扮獥鍙d腑
        HDC hdc = GetDC(hMainWnd);
        BitBlt(hdc,0,0,288,256,memDC,0,0,SRCCOPY);
        ReleaseDC(hMainWnd,hdc);
    }
    return 0;
}

// 棰戣氨鍒嗘瀽妯″潡鐨勨滆〃婕斺濆嚱鏁般傛垚鍔熻繑鍥0锛屽鏋滄彃浠跺簲璇ヨ缁堟鍒欒繑鍥1銆
int render2(struct winampVisModule *this_mod)
{
    int x, y;
    // 娓呴櫎鑳屾櫙
    Rectangle(memDC,0,0,288,256);
    // 缁樺埗鍒嗘瀽浠
    for (y = 0; y < this_mod->nCh; y ++) //鏈夊嚑涓0閬撳氨鑺卞嚑鏉℃尝褰㈠浘
    {
        for (x = 0; x < 288; x ++)
        {
            MoveToEx(memDC,x,(y*256+256)>>(this_mod->nCh-1),NULL);
            LineTo(memDC,x,(y*256 + 256 - this_mod->spectrumData[y][x])>>(this_mod->nCh-1));
        }
    }
    { // 灏嗗弻缂撳啿澶嶅埗鍒扮獥鍙d腑
        HDC hdc = GetDC(hMainWnd);
        BitBlt(hdc,0,0,288,256,memDC,0,0,SRCCOPY);
        ReleaseDC(hMainWnd,hdc);
    }
    return 0;
}

// VU 琛ㄦā鍧楃殑鈥滆〃婕斺濆嚱鏁般傛垚鍔熻繑鍥0锛屽鏋滄彃浠跺簲璇ヨ缁堟鍒欒繑鍥1銆
int render3(struct winampVisModule *this_mod)
{
    int x, y;
    // 娓呴櫎鑳屾櫙
    Rectangle(memDC,0,0,256,32);
    // 缁樺埗 VU 琛
    for (y = 0; y < 2; y ++)
    {
        int last=this_mod->waveformData[y][0];
        int total=0;
        for (x = 1; x < 576; x ++)
        {
            total += abs(last - this_mod->waveformData[y][x]);
            last = this_mod->waveformData[y][x];
        }
        total /= 288;
        if (total > 127)
            total = 127;
        if (y)
            Rectangle(memDC,128,0,128+total,32);
        else
            Rectangle(memDC,128-total,0,128,32);
    }
    { // 灏嗗弻缂撳啿澶嶅埗鍒扮獥鍙d腑
        HDC hdc = GetDC(hMainWnd);
        BitBlt(hdc,0,0,256,32,memDC,0,0,SRCCOPY);
        ReleaseDC(hMainWnd,hdc);
    }
    return 0;
}

// 妯″潡娓呴櫎鍑芥暟 (瀵瑰簲浜 init())銆傞攢姣佺獥鍙o紝鍙栨秷绐楀彛绫荤殑娉ㄥ唽銆
void quit(struct winampVisModule *this_mod)
{
    config_write(this_mod); // 鍐欏叆閰嶇疆
    SelectObject(memDC,oldBM); // 鍒犻櫎鍙岀紦鍐
    DeleteObject(memDC);
    DeleteObject(memBM); 
    DestroyWindow(hMainWnd); // 閿姣佺獥鍙
    UnregisterClass(szAppName,this_mod->hDllInstance); // 鍙栨秷绐楀彛绫荤殑娉ㄥ唽
}


// 鎻掍欢绐楀彛鐨勭獥鍙e鐞嗗嚱鏁
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)
    {
        case WM_CREATE: return 0;
        case WM_ERASEBKGND: return 0;
        case WM_PAINT:
        { // 浠ュ弻缂撳啿鐨勪俊鎭洿鏂扮獥鍙f樉绀
            PAINTSTRUCT ps;
            RECT r;
            HDC hdc = BeginPaint(hwnd,&ps);
            GetClientRect(hwnd,&r);
            BitBlt(hdc,0,0,r.right,r.bottom,memDC,0,0,SRCCOPY);
            EndPaint(hwnd,&ps);
        }
        return 0;
        case WM_DESTROY: PostQuitMessage(0); return 0;
        case WM_KEYDOWN: // 灏嗛敭鐩樻秷鎭紶閫掔粰 WinAMP 涓荤獥鍙 (浣垮叾琚鐞)
        case WM_KEYUP:
        { // 浠庣獥鍙g殑鐢ㄦ埛鏁版嵁涓緱鍒 this_mod
            winampVisModule *this_mod = (winampVisModule *) GetWindowLong(hwnd,GWL_USERDATA);
            PostMessage(this_mod->hwndParent,message,wParam,lParam);
        }
        return 0;
        case WM_MOVE:
        { // 浠庨厤缃腑寰楀埌 config_x 鍜 config_y
            RECT r;
            GetWindowRect(hMainWnd,&r);
            config_x = r.left;
            config_y = r.top;
        }
        return 0;
    }
    return DefWindowProc(hwnd,message,wParam,lParam);
}

// 鐢熸垚涓涓 <dll directory>\plugin.ini 褰㈠紡鐨 .ini 鏂囦欢鍚
void config_getinifn(struct winampVisModule *this_mod, char *ini_file)
{
    char *p;
    GetModuleFileName(this_mod->hDllInstance,ini_file,MAX_PATH);
    p=ini_file+strlen(ini_file);
    while (p >= ini_file && *p != '\\')
        p--;
    if (++p >= ini_file)
        *p = 0;
    strcat(ini_file,"plugin.ini");
}


void config_read(struct winampVisModule *this_mod)
{
    char ini_file[MAX_PATH];
    config_getinifn(this_mod,ini_file);
    config_x = GetPrivateProfileInt(this_mod->description,"Screen_x",config_x,ini_file);
    config_y = GetPrivateProfileInt(this_mod->description,"Screen_y",config_y,ini_file);
}

void config_write(struct winampVisModule *this_mod)
{
    char string[32];
    char ini_file[MAX_PATH];

    config_getinifn(this_mod,ini_file);

    wsprintf(string,"%d",config_x);
    WritePrivateProfileString(this_mod->description,"Screen_x",string,ini_file);
    wsprintf(string,"%d",config_y);
    WritePrivateProfileString(this_mod->description,"Screen_y",string,ini_file);
}

    姝e鎴戜滑鍓嶉潰鎵璇达紝鎻掍欢绋嬪簭涓庝富绋嬪簭涔嬮棿涓瀹氳鏈夌浉浜掑悎浣滅殑瑙勮寖鎵嶈兘姝e父鐨勮繍浣滐紝姣斿绾﹀畾濂界殑鍑芥暟鍚嶇瓑绛夈備粠涓婇潰鐨勭▼搴忎腑鍙互鐪嬪嚭锛學inamp 鐢ㄧ害瀹氬ソ鐨勫嚱鏁板悕璋冪敤鎻掍欢 DLL 涓敮涓鐨勪竴涓鍑哄嚱鏁 winampVisGetHeader() 鏉ヨ幏鍙栦竴涓寚鍚戞彃浠跺ご缁撴瀯浣 winampVisHeader 鐨勬寚閽堬紝鑰屽悗鑰呭寘鍚殑涓涓寚閽堝嚱鏁(*getModule)(int) 灏卞彲浠ユ牴鎹粰瀹氬弬鏁板悜 Winamp 鏆撮湶妯″潡鐨勬帴鍙c俕_^杩欐牱涓鏉ワ紝鎻掍欢鐨勫叏閮ㄧ粏鑺傚氨閮藉嚭鐜板湪 Winamp 闈㈠墠浜嗐傚洜涓 getModule 鍑芥暟瀵规病鏈夊疄鐜扮殑妯″潡杩斿洖 NULL锛屾墍浠 Winamp 灏卞彲浠ラ氳繃杩斿洖鍊肩‘瀹氬彲瑙嗘彃浠朵腑妯″潡鐨勬暟鐩簡銆傚叾瀹炰笂闈㈢殑绋嬪簭灏辨槸涓涓彲瑙嗘彃浠剁殑缂栧啓妗嗘灦锛屽綋鏄庣‘浜嗗叾涓殑瑙勮寖涔嬪悗灏卞彲浠ユ妸绮惧姏鏀惧湪鈥滆〃婕斺濆嚱鏁扮殑缂栧啓鍜屽叿浣撳疄鐜颁笂浜嗐



鏂囩珷鏉ヨ嚜: 鏈珯鍘熷垱
Tags: 鏀圭増 杩炴帴
鐩稿叧鏃ュ織:

鐗瑰埆澹版槑锛
鈶 鏈珯鍙戣〃鐨勬棩蹇椾粎灞炰釜浜鸿鐐癸紱
鈶 鏃ュ織涓湭娉ㄦ槑"绂佹杞浇"瀛楁牱鐨勬枃绔狅紝濡傞渶杞浇锛岃娉ㄦ槑鍑哄锛屽苟涓斾繚鐣欐鏃ュ織鐨勯摼鎺ワ紱
鈶 绂佹鐩楅摼鏈珯鎵鏈夊浘鐗囥佽蒋浠躲佸奖闊虫枃浠跺湴鍧锛
鈶 鏈珯鎻愪緵涓嬭浇鐨勮祫婧愶紝浠呬緵鍙傝冩垨娴嬭瘯,涓嬭浇璇疯嚜琛屾潃姣掋傚閫犳垚浠讳綍涓嶈壇鍚庢灉锛屾涓嶈礋璐o紱
鈶 濡傛湁浠讳綍鐤戦棶锛岃闅忔椂涓庣珯闀胯仈绯伙細webmaster#smoile.com | smoile's缃戠涔嬭矾 銆
鈶 JPG鏍煎紡璇蜂娇鐢ACDSee宸ュ叿闃呰锛孭DF鏍煎紡璇蜂娇鐢Adobe Reader闃呰锛孌OC鏍煎紡璇蜂娇鐢∣ffice Word闃呰锛孯AR鏍煎紡璇风敤WINRAR闃呰銆
鍏嶈矗澹版槑:
銆銆姝ら〉闈㈡彁渚涚殑鏂囦欢鍧囬氳繃NOD32鏉姣掕蒋浠舵壂鎻忔棤姣锛岃鏀惧績浣跨敤锛屼絾涔熺儲璇锋偍鍦ㄤ笅杞藉悗鍐嶆煡姣掍竴娆$‘淇濇枃浠跺畨鍏紝濡傛湰鏂囦欢瀵规偍鐨勮绠楁満閫犳垚鍗卞锛屾湰绔欎笉璐熻矗浠汇
銆銆鏈珯鎵鍒婅浇鍐呭鍧囦负涓汉鎾板啓鎴栦粠缃戠粶涓婃敹闆嗘暣鐞嗭紝骞朵笖浠ヨ绠楁満鎶鏈爺绌朵氦娴佷负鐩殑锛屼粎渚涘ぇ瀹跺弬鑰冿紝涓嶅瓨鍦ㄤ换浣曞晢涓氱敤閫斻備笉寤鸿鎮ㄥ皢鍏跺綋浣滄妧鏈缓璁垨鎿嶄綔寮曞鑰屾牴鎹叾鐩存帴琛屼簨銆傝嫢鎮ㄩ渶瑕佹妧鏈湇鍔★紝鎮ㄥ簲褰撴寮忓鎵樹笓涓氬叕鍙镐互淇濋殰鎮ㄧ殑鍚堟硶鏉冪泭銆傝繖浜涗俊鎭湁鍙兘涓嶆槸鏈鏂扮殑銆佸畼鏂圭殑淇℃伅锛屼篃鍙兘鏄负浜嗙爺绌舵煇涓鎶鏈棶棰樿屾彺寮曡嚜浠栧锛屽彲浠ヤ笉缁忛氱煡鑰屾洿鏀广傚鏋滄湰缃戠珯鍐呭涓嶆厧渚电姱浜嗘偍鐨勭増鏉冿紝璇蜂笌鎴戣仈绯伙紝鎴戝皢鍙婃椂澶勭悊锛屾挙涓嬬浉鍏冲唴瀹癸紒
璇勮: 2 | 寮曠敤: 325 | 鏌ョ湅娆℃暟: 4123
灏忔彁绀猴細鏂囦欢涓嬭浇涓嶄簡锛熶负浜嗛槻姝㈢洍閾炬帴锛屾湰绔欏仛浜嗘妧鏈鐞嗭紝闇瑕佷笅杞界殑缃戝弸璇烽槄璇杩欓噷锛岃幏鍙栭閫熶笅杞藉湴鍧銆
鍙戣〃璇勮
涓洪槻姝㈡敞鍐屾満鐨勪娇鐢,鏈郴缁熷凡绂佹UBB浠g爜锛
璇峰湪鐣欒█涓嬁浣跨敤杩欎簺鍏抽敭瀛
鏄点绉:
瀵嗐鐮: 娓稿鍙戣█涓嶉渶瑕佸瘑鐮.
楠岃瘉鐮:
鍐呫瀹:
閫夈椤:
铏界劧鍙戣〃璇勮涓嶇敤娉ㄥ唽锛屼絾杩樻槸寤鸿鎮娉ㄥ唽璐﹀彿(姣忓ぉ0鈥8鐐圭姝㈡敞鍐).
瀛楁暟闄愬埗 1000 瀛 | UBB浠g爜 鍏抽棴 | [img]鏍囩 鍏抽棴