Files
minigui-docs/programming-guide-zh/MiniGUIProgGuidePart2Chapter03-zh.md
lisimeng123 6076149c08 update
2022-11-21 09:16:37 +08:00

31 KiB
Raw Permalink Blame History

渲染器及资源管理

1 外观渲染器

渲染器的全称为“外观渲染器Look and Feel Renderer它在 MiniGUI 3.0 中发展出来的。

渲染器将窗口的管理逻辑和窗口的绘制分离MiniGUI 只负责管理窗口,而由渲染器完成窗口非客户区的绘制。渲染器的概念,类似于皮肤或者主题的概念。不同的是:

  1. MiniGUI 提供了专门的渲染器接口,由具体的渲染器实现
  2. 渲染器由一组接口实现和一组属性定义组成
  3. 渲染器可以应用到全局,对所有窗口起效; 也可以应用到一个专门的窗口实例上

MiniGUI 本身提供了一组渲染器接口这些是基于窗口本身的属于系统渲染器或者是全局渲染器NCS 为每个控件提供了渲染器接口,不同的控件接口不一样,属于控件渲染器。

1.1 渲染器公共属性

属性 类型 说明
RDR_3DBODY_FGCLR DWORD(MakeRGBA) 3D 对象前景色
RDR_3DBODY_BGCLR DWORD(MakeRGBA) 3D 对象背景色
RDR_CLIENT_FGCLR DWORD(MakeRGBA) 窗口客户区前景色
RDR_CLIENT_BGCLR DWORD(MakeRGBA) 窗口客户区背景色
RDR_SELECTED_FGCLR DWORD(MakeRGBA) 被选择对象的前景色
RDR_SELECTED_BGCLR DWORD(MakeRGBA) 被选择对象的背景色
RDR_SELECTED_LOSTFOCUS_CLR DWORD(MakeRGBA) 失去焦点对象的颜色
RDR_DISABLE_FGCLR DWORD(MakeRGBA) 不可用对象的前景色
RDR_DISABLE_BGCLR DWORD(MakeRGBA) 不可用对象的背景色
RDR_HIGHLIGHT_FGCLR DWORD(MakeRGBA) 高亮对象的前景色
RDR_HIGHLIGHT_BGCLR DWORD(MakeRGBA) 高亮对象的背景色
RDR_METRICS_BORDER int 边框的大小值
RDR_FONT PLOGFONT 窗口使用的逻辑字体
RDR_BKIMAGE PBITMAP 窗口背景图片
RDR_BKIMAGE_MODE enum ImageDrawMode 窗口绘制模式

2 资源管理

在新控件集中资源管理模块作为一个独立的模块主要负责对资源包进行管理其中包括资源包的装载、访问和卸载等功能。它在访问资源时是通过指定资源所在的资源包和资源的唯一标识符ID等信息来获取所需要的内容 。

其中资源包是为了将各种资源有效地统一管理统一资源与资源标识符ID的映射而提出的概念。一个资源包内可以包含多种资源类型如图片、字符串、UI 资源等等。资源包为资源的管理带来了诸多如下好处。

在了解资源管理前,需要了解下面两个基础概念:

  • 资源包 : 资源的集合,任意种类和任意个数的资源集合,是资源替换的最小单位。
  • 资源 ID : 访问资源包内某一资源的唯一标识。

mGNCS 提供的资源管理模块,相比较 MiniGUI 固有控件集来讲,具有诸多的优势。如:

  • 资源管理与应用代码的分离。
  • 统一了各种资源的管理接口,访问资源更加便捷。
  • 通过资源包的简单替换即可实现多语言,多风格,换肤等效果。
  • 资源部署更加简单。
  • 配合可视化工具 mStudio方便地生成包含各类资源描述的资源包。

mGNCS 的资源管理主要是围绕资源包来实现对资源的各种管理和访问的。如果要正确的访问某个资源,只需要知道其所在的资源包和对应的资源 ID。整体访问流程通常为

  1. 装载指定资源包。
  2. 通过资源 ID 获取资源。
  3. 使用资源,某些资源需要在使用后释放资源。
  4. 卸载资源包。

当前资源包支持的资源类型有:

资源类型 ID 说明 备注
NCSRT_UI UI 窗口资源 对主窗口和控件的描述信息。如窗口风格、大小、标题和属性等。
NCSRT_STRING 字符串资源 文件名、渲染器名和控件类名等固定的系统常量字符串。
NCSRT_TEXT 文本资源 UI 界面上用户指定的文本字符串及 locale 信息。
NCSRT_IMAGE 图片资源 各种 bmp, png 和 jpg 等图片信息。
NCSRT_RDR 渲染器资源 对指定的窗口渲染器的窗口元素外观属性的设置信息。
NCSRT_RDRSET 渲染器集资源 同类渲染器资源的集合。
NCSRT_BINARY 自定义资源 自定义格式的资源。

2.1 资源接口

2.1.1 访问资源包

资源包分为内建格式和外部文件 2 种,无论哪一种都应在系统启动时首先装载资源包,然后访问内部资源,最后系统退出后将资源包正确卸载。在访问非内建资源包时需要使用到如下接口:

HPACKAGE ncsLoadResPackageFromFile (const char* fileName);
#define ncsLoadResPackage  ncsLoadResPackageFromFile
void ncsUnloadResPackage (HPACKAGE package);

其中 ncsLoadResPackage 负责装载资源包,ncsUnloadResPackage 负责卸载资源包。二者需要成对使用。

如果需要装载的资源包是内建的内存格式,则需要首先通过获取内存资源包信息接口(ncsGetIncoreResPackInfo),将内存资源包具体信息返回,然后使用从内存装载资源包的接口(ncsLoadResPackageFromMem)装载资源包,最后使用上面提供的同一卸载接口(ncsUnloadResPackage)卸载资源包。其中 ncsGetIncoreResPackInfo 接口是由内建转换工具所提供,使用内建工具将指定资源包文件转换为内建资源时即已生成,应用无须关心其实现。

extern BOOL ncsGetIncoreResPackInfo(char **addr, int *size);
HPACKAGE ncsLoadResPackageFromMem (const void* mem, int size);

这是装载资源包文件的示例代码:

sprintf(f_package, "%s", "resmgr_demo.res");
SetResPath("./");

hPackage = ncsLoadResPackage (f_package);
if (hPackage == HPACKAGE_NULL) {
        printf ("load resource package:%s failure.\n", f_package);
        return 1;
}

这是卸载资源包文件的示例代码:

ncsUnloadResPackage(hPackage);

2.1.2 获取与设置 Locale

为了方便的进行 locale 的设置与获取,资源管理模块提供了下面两个接口:

const char* ncsSetDefaultLocale (char* language, char* country);
const char* ncsGetDefaultLocale(void);

其中设置接口仅对在其设置后通过资源包获取的资源有效2 个参量分别代表代码语言和国家代码:

  • language 语言代码用2个英文小写字母来表示。
  • country 国家代码需要用 2 个或 3 个英文小写字母来表示。

如设置美式英文为默认 locale可通过如下语句完成

ncsSetDefaultLocale("en", "US");

获取接口返回当前使用的 locale 信息,该信息的格式为:language_country

ISO639 语言代码对照表

ISO 639 Codes(Languages)

Two-letter lower-case symbols are used.

aa Afar
ab Abkhazian
af Afrikaans
am Amharic
ar Arabic
as Assamese
ay Aymara
az Azerbaijani

ba Bashkir
be Byelorussian
bg Bulgarian
bh Bihari
bi Bislama
bn Bengali; Bangla
bo Tibetan
br Breton

ca Catalan
co Corsican
cs Czech
cy Welsh

da Danish
de German
dz Bhutani

el Greek
en English
eo Esperanto
es Spanish
et Estonian
eu Basque

fa Persian
fi Finnish
fj Fiji
fo Faroese
fr French
fy Frisian

ga Irish
gd Scots Gaelic
gl Galician
gn Guarani
gu Gujarati

ha Hausa
he Hebrew (formerly iw)
hi Hindi
hr Croatian
hu Hungarian
hy Armenian

ia Interlingua
id Indonesian (formerly in)
ie Interlingue
ik Inupiak
is Icelandic
it Italian
iu Inuktitut

ja Japanese
jw Javanese

ka Georgian
kk Kazakh
kl Greenlandic
km Cambodian
kn Kannada
ko Korean
ks Kashmiri
ku Kurdish
ky Kirghiz

la Latin
ln Lingala
lo Laothian
lt Lithuanian
lv Latvian, Lettish

mg Malagasy
mi Maori
mk Macedonian
ml Malayalam
mn Mongolian
mo Moldavian
mr Marathi
ms Malay
mt Maltese
my Burmese

na Nauru
ne Nepali
nl Dutch
no Norwegian

oc Occitan
om (Afan) Oromo
or Oriya

pa Punjabi
pl Polish
ps Pashto, Pushto
pt Portuguese

qu Quechua

rm Rhaeto-Romance
rn Kirundi
ro Romanian
ru Russian
rw Kinyarwanda

sa Sanskrit
sd Sindhi
sg Sangho
sh Serbo-Croatian
si Sinhalese
sk Slovak
sl Slovenian
sm Samoan
sn Shona
so Somali
sq Albanian
sr Serbian
ss Siswati
st Sesotho
su Sundanese
sv Swedish
sw Swahili

ta Tamil
te Telugu
tg Tajik
th Thai
ti Tigrinya
tk Turkmen
tl Tagalog
tn Setswana
to Tonga
tr Turkish
ts Tsonga
tt Tatar
tw Twi

ug Uighur
uk Ukrainian
ur Urdu
uz Uzbek

vi Vietnamese
vo Volapuk

wo Wolof

xh Xhosa

yi Yiddish (formerly ji)
yo Yoruba

za Zhuang
zh Chinese
zu Zulu

ISO3166 国家代码对照表

ISO 3166 Codes (Countries)

Country                                         A 2     A 3     Number
----------------------------------------------------------------------
AALAND ISLANDS                                  AX      ALA     248
AFGHANISTAN                                     AF      AFG     004
ALBANIA                                         AL      ALB     008
ALGERIA                                         DZ      DZA     012
AMERICAN SAMOA                                  AS      ASM     016
ANDORRA                                         AD      AND     020
ANGOLA                                          AO      AGO     024
ANGUILLA                                        AI      AIA     660
ANTARCTICA                                      AQ      ATA     010
ANTIGUA AND BARBUDA                             AG      ATG     028
ARGENTINA                                       AR      ARG     032
ARMENIA                                         AM      ARM     051  
ARUBA                                           AW      ABW     533
AUSTRALIA                                       AU      AUS     036
AUSTRIA                                         AT      AUT     040
AZERBAIJAN                                      AZ      AZE     031  
BAHAMAS                                         BS      BHS     044
BAHRAIN                                         BH      BHR     048
BANGLADESH                                      BD      BGD     050
BARBADOS                                        BB      BRB     052
BELARUS                                         BY      BLR     112  
BELGIUM                                         BE      BEL     056
BELIZE                                          BZ      BLZ     084
BENIN                                           BJ      BEN     204
BERMUDA                                         BM      BMU     060
BHUTAN                                          BT      BTN     064
BOLIVIA                                         BO      BOL     068
BOSNIA AND HERZEGOWINA                          BA      BIH     070
BOTSWANA                                        BW      BWA     072
BOUVET ISLAND                                   BV      BVT     074
BRAZIL                                          BR      BRA     076
BRITISH INDIAN OCEAN TERRITORY                  IO      IOT     086
BRUNEI DARUSSALAM                               BN      BRN     096
BULGARIA                                        BG      BGR     100
BURKINA FASO                                    BF      BFA     854
BURUNDI                                         BI      BDI     108
CAMBODIA                                        KH      KHM     116
CAMEROON                                        CM      CMR     120
CANADA                                          CA      CAN     124
CAPE VERDE                                      CV      CPV     132
CAYMAN ISLANDS                                  KY      CYM     136
CENTRAL AFRICAN REPUBLIC                        CF      CAF     140
CHAD                                            TD      TCD     148
CHILE                                           CL      CHL     152
CHINA                                           CN      CHN     156
CHRISTMAS ISLAND                                CX      CXR     162
COCOS (KEELING) ISLANDS                         CC      CCK     166
COLOMBIA                                        CO      COL     170
COMOROS                                         KM      COM     174
CONGO, Democratic Republic of (was Zaire)       CD      COD     180
CONGO, Republic of                              CG      COG     178
COOK ISLANDS                                    CK      COK     184
COSTA RICA                                      CR      CRI     188
COTE D'IVOIRE                                   CI      CIV     384
CROATIA (local name: Hrvatska)                  HR      HRV     191      
CUBA                                            CU      CUB     192
CYPRUS                                          CY      CYP     196
CZECH REPUBLIC                                  CZ      CZE     203  
DENMARK                                         DK      DNK     208
DJIBOUTI                                        DJ      DJI     262
DOMINICA                                        DM      DMA     212
DOMINICAN REPUBLIC                              DO      DOM     214
ECUADOR                                         EC      ECU     218
EGYPT                                           EG      EGY     818
EL SALVADOR                                     SV      SLV     222
EQUATORIAL GUINEA                               GQ      GNQ     226
ERITREA                                         ER      ERI     232
ESTONIA                                         EE      EST     233  
ETHIOPIA                                        ET      ETH     231
FALKLAND ISLANDS (MALVINAS)                     FK      FLK     238
FAROE ISLANDS                                   FO      FRO     234
FIJI                                            FJ      FJI     242
FINLAND                                         FI      FIN     246
FRANCE                                          FR      FRA     250
FRENCH GUIANA                                   GF      GUF     254
FRENCH POLYNESIA                                PF      PYF     258
FRENCH SOUTHERN TERRITORIES                     TF      ATF     260
GABON                                           GA      GAB     266
GAMBIA                                          GM      GMB     270
GEORGIA                                         GE      GEO     268  
GERMANY                                         DE      DEU     276
GHANA                                           GH      GHA     288
GIBRALTAR                                       GI      GIB     292
GREECE                                          GR      GRC     300
GREENLAND                                       GL      GRL     304
GRENADA                                         GD      GRD     308
GUADELOUPE                                      GP      GLP     312
GUAM                                            GU      GUM     316
GUATEMALA                                       GT      GTM     320
GUINEA                                          GN      GIN     324
GUINEA-BISSAU                                   GW      GNB     624
GUYANA                                          GY      GUY     328
HAITI                                           HT      HTI     332
HEARD AND MC DONALD ISLANDS                     HM      HMD     334
HONDURAS                                        HN      HND     340
HONG KONG                                       HK      HKG     344
HUNGARY                                         HU      HUN     348
ICELAND                                         IS      ISL     352
INDIA                                           IN      IND     356
INDONESIA                                       ID      IDN     360
IRAN (ISLAMIC REPUBLIC OF)                      IR      IRN     364
IRAQ                                            IQ      IRQ     368
IRELAND                                         IE      IRL     372
ISRAEL                                          IL      ISR     376
ITALY                                           IT      ITA     380
JAMAICA                                         JM      JAM     388
JAPAN                                           JP      JPN     392
JORDAN                                          JO      JOR     400
KAZAKHSTAN                                      KZ      KAZ     398  
KENYA                                           KE      KEN     404
KIRIBATI                                        KI      KIR     296
KOREA, DEMOCRATIC PEOPLE'S REPUBLIC OF          KP      PRK     408
KOREA, REPUBLIC OF                              KR      KOR     410
KUWAIT                                          KW      KWT     414
KYRGYZSTAN                                      KG      KGZ     417  
LAO PEOPLE'S DEMOCRATIC REPUBLIC                LA      LAO     418
LATVIA                                          LV      LVA     428  
LEBANON                                         LB      LBN     422
LESOTHO                                         LS      LSO     426
LIBERIA                                         LR      LBR     430
LIBYAN ARAB JAMAHIRIYA                          LY      LBY     434
LIECHTENSTEIN                                   LI      LIE     438
LITHUANIA                                       LT      LTU     440  
LUXEMBOURG                                      LU      LUX     442
MACAU                                           MO      MAC     446
MACEDONIA, THE FORMER YUGOSLAV REPUBLIC OF      MK      MKD     807 
MADAGASCAR                                      MG      MDG     450
MALAWI                                          MW      MWI     454
MALAYSIA                                        MY      MYS     458
MALDIVES                                        MV      MDV     462
MALI                                            ML      MLI     466
MALTA                                           MT      MLT     470
MARSHALL ISLANDS                                MH      MHL     584
MARTINIQUE                                      MQ      MTQ     474
MAURITANIA                                      MR      MRT     478
MAURITIUS                                       MU      MUS     480
MAYOTTE                                         YT      MYT     175  
MEXICO                                          MX      MEX     484
MICRONESIA, FEDERATED STATES OF                 FM      FSM     583
MOLDOVA, REPUBLIC OF                            MD      MDA     498  
MONACO                                          MC      MCO     492
MONGOLIA                                        MN      MNG     496
MONTSERRAT                                      MS      MSR     500
MOROCCO                                         MA      MAR     504
MOZAMBIQUE                                      MZ      MOZ     508
MYANMAR                                         MM      MMR     104
NAMIBIA                                         NA      NAM     516
NAURU                                           NR      NRU     520
NEPAL                                           NP      NPL     524
NETHERLANDS                                     NL      NLD     528
NETHERLANDS ANTILLES                            AN      ANT     530
NEW CALEDONIA                                   NC      NCL     540
NEW ZEALAND                                     NZ      NZL     554
NICARAGUA                                       NI      NIC     558
NIGER                                           NE      NER     562
NIGERIA                                         NG      NGA     566
NIUE                                            NU      NIU     570
NORFOLK ISLAND                                  NF      NFK     574
NORTHERN MARIANA ISLANDS                        MP      MNP     580
NORWAY                                          NO      NOR     578
OMAN                                            OM      OMN     512
PAKISTAN                                        PK      PAK     586
PALAU                                           PW      PLW     585
PALESTINIAN TERRITORY, Occupied                 PS      PSE     275
PANAMA                                          PA      PAN     591
PAPUA NEW GUINEA                                PG      PNG     598
PARAGUAY                                        PY      PRY     600
PERU                                            PE      PER     604
PHILIPPINES                                     PH      PHL     608
PITCAIRN                                        PN      PCN     612
POLAND                                          PL      POL     616
PORTUGAL                                        PT      PRT     620
PUERTO RICO                                     PR      PRI     630
QATAR                                           QA      QAT     634
REUNION                                         RE      REU     638
ROMANIA                                         RO      ROU     642
RUSSIAN FEDERATION                              RU      RUS     643
RWANDA                                          RW      RWA     646
SAINT HELENA                                    SH      SHN     654
SAINT KITTS AND NEVIS                           KN      KNA     659
SAINT LUCIA                                     LC      LCA     662
SAINT PIERRE AND MIQUELON                       PM      SPM     666
SAINT VINCENT AND THE GRENADINES                VC      VCT     670
SAMOA                                           WS      WSM     882
SAN MARINO                                      SM      SMR     674
SAO TOME AND PRINCIPE                           ST      STP     678
SAUDI ARABIA                                    SA      SAU     682
SENEGAL                                         SN      SEN     686
SERBIA AND MONTENEGRO                           CS      SCG     891
SEYCHELLES                                      SC      SYC     690
SIERRA LEONE                                    SL      SLE     694
SINGAPORE                                       SG      SGP     702
SLOVAKIA                                        SK      SVK     703  
SLOVENIA                                        SI      SVN     705  
SOLOMON ISLANDS                                 SB      SLB     090
SOMALIA                                         SO      SOM     706
SOUTH AFRICA                                    ZA      ZAF     710
SOUTH GEORGIA AND THE SOUTH SANDWICH ISLANDS    GS      SGS     239
SPAIN                                           ES      ESP     724
SRI LANKA                                       LK      LKA     144
SUDAN                                           SD      SDN     736
SURINAME                                        SR      SUR     740
SVALBARD AND JAN MAYEN ISLANDS                  SJ      SJM     744
SWAZILAND                                       SZ      SWZ     748
SWEDEN                                          SE      SWE     752
SWITZERLAND                                     CH      CHE     756
SYRIAN ARAB REPUBLIC                            SY      SYR     760
TAIWAN                                          TW      TWN     158
TAJIKISTAN                                      TJ      TJK     762  
TANZANIA, UNITED REPUBLIC OF                    TZ      TZA     834
THAILAND                                        TH      THA     764
TIMOR-LESTE                                     TL      TLS     626
TOGO                                            TG      TGO     768
TOKELAU                                         TK      TKL     772
TONGA                                           TO      TON     776
TRINIDAD AND TOBAGO                             TT      TTO     780
TUNISIA                                         TN      TUN     788
TURKEY                                          TR      TUR     792
TURKMENISTAN                                    TM      TKM     795  
TURKS AND CAICOS ISLANDS                        TC      TCA     796
TUVALU                                          TV      TUV     798
UGANDA                                          UG      UGA     800
UKRAINE                                         UA      UKR     804
UNITED ARAB EMIRATES                            AE      ARE     784
UNITED KINGDOM                                  GB      GBR     826
UNITED STATES                                   US      USA     840
UNITED STATES MINOR OUTLYING ISLANDS            UM      UMI     581
URUGUAY                                         UY      URY     858
UZBEKISTAN                                      UZ      UZB     860  
VANUATU                                         VU      VUT     548
VATICAN CITY STATE (HOLY SEE)                   VA      VAT     336
VENEZUELA                                       VE      VEN     862
VIET NAM                                        VN      VNM     704
VIRGIN ISLANDS (BRITISH)                        VG      VGB     092
VIRGIN ISLANDS (U.S.)                           VI      VIR     850
WALLIS AND FUTUNA ISLANDS                       WF      WLF     876
WESTERN SAHARA                                  EH      ESH     732
YEMEN                                           YE      YEM     887
ZAMBIA                                          ZM      ZMB     894
ZIMBABWE                                        ZW      ZWE     716

2.1.3 创建窗口 UI

在使用资源包的情况下mGNCS 所提供的创建主窗口接口相对于 MiniGUI 的创建主窗口来说更加简单,对于主窗口的外观信息描述均已保存于资源包内,接口只需通过窗口资源 ID 即可将界面启动。其中:

  • owner 参数指的是窗口的拖管窗口;
  • hIcon, hMenu 默认为 0 即可;
  • handlersconnects 是用户自定义的与该窗口资源 ID 相关联的事件侦听和连接;
  • user_data 为附加数据,默认为 0 即可。
mMainWnd* ncsCreateMainWindowIndirectFromID (HPACKAGE package,
                    Uint32 wndId, HWND owner, HICON hIcon,
                    HMENU hMenu, NCS_EVENT_HANDLER_INFO* handlers,
                    NCS_EVENT_CONNECT_INFO *connects,
                    DWORD user_data);

对于通过窗口资源 ID 创建对话框的方法类似于主窗口,通过资源 ID 创建界面,参数含义也与上面创建主窗口的接口类似:

int ncsCreateModalDialogFromID (HPACKAGE package, Uint32 dlgId,
                    HWND owner, HICON hIcon, HMENU hMenu,
                    NCS_EVENT_HANDLER_INFO* handlers, NCS_EVENT_CONNECT_INFO *connects);

通过资源包创建 UI 主窗口的示例代码:

return ncsCreateMainWindowIndirectFromID(package,
    ID_MAINWND1,
    hParent,
    h_icon,
    h_menu,
    mainwnd_Mainwnd1_handlers,
    NULL,
    user_data);

2.1.4 获取字符串

通过资源包获取字符串的方法很简单,只需要将资源 ID 传递给接口 ncsGetString,管理模块即会根据当前的 locale 信息,将默认 locale 的字符串返回给应用。

const char* ncsGetString (HPACKAGE package, Uint32 resId);

通过资源包获取字符串的示例代码:

SetDefaultWindowElementRenderer(ncsGetString(hPackage, NCSRM_SYSSTR_DEFRDR));
  • mGNCS 保留从 NCSRM_SYSSTR_BASEIDNCSRM_SYSSTR_MAXID 的 ID 值作为系统 ID可以返回公共的定义如默认渲染器NCSRM_SYSSTR_DEFRDR

2.1.5 获取位图

资源管理模块提供了通过位图 ID 获取相应文件名的功能,便于上层应用在获取文件名后直接使用 MiniGUI 提供的位图装载相关接口操作位图:

const char* ncsGetImageFileName (HPACKAGE package, Uint32 resId);

除了使用 MiniGUI 相关接口访问位图外, mGNCS 还提供了直接通过资源 ID 获取位图对象的接口,上层应用使用完该接口提供的位图资源后,需通过相对应的释放接口释放位图对象。这对设置无关和设置相关位图都有效。

//设置相关位图接口
int ncsGetBitmap(HDC hdc, HPACKAGE package, Uint32 resId,  PBITMAP pBitmap);
void ncsReleaseBitmap (PBITMAP pBitmap);

//设置无关位图接口
int ncsGetMyBitmap(HPACKAGE package, Uint32 resId,
        PMYBITMAP myBmp, RGB* pal);
void ncsReleaseMyBitmap (PMYBITMAP myBmp);

2.1.6 设置渲染器

通过资源包中所包含的渲染器 ID 可以对指定的窗口进行设置,使其具有该渲染器配置下的窗口元素外观属性。但该接口仅在当前窗口所使用的渲染器与新设置的渲染器同名,并且该窗口类是新渲染器所属控件类的子类时方可生效,否则将返回失败,设置不成功。

BOOL ncsSetWinRdr(HWND hWnd, HPACKAGE package, Uint32 rdrId);

另外还可以通过渲染器集合资源设置将某一渲染器集合作为默认系统渲染器配置。

BOOL ncsSetSysRdr(HPACKAGE package, Uint32 rdrSetId);

2.2 示例程序

本实例为用户演示了如何使用资源管理部分接口获取资源。该部分代码由 mStudio 工具自动生成。

resmgr 程序的输出

图 1 resmgr 程序的输出

该程序在屏幕上创建一个包含 2 个按钮的 300x250 的对话框,其中主窗口是 classic 渲染器的外观效果2 个按钮分别是 skin 和 flat 渲染器的外观效果。

清单 1 resmgr_main.c

/*
** $Id: resmgr_main.c 534 2009-09-22 05:37:46Z xwyan $
**
** Listing P2C2.2
**
** resmgr_main.c: Sample program for mGNCS Programming Guide
**      The application entry of resource managerment.
**
** Copyright (C) 2009 Feynman Software.
*/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include <minigui/common.h>
#include <minigui/minigui.h>
#include <minigui/gdi.h>
#include <minigui/window.h>

#include <mgncs/mgncs.h>

#include "resource.h"
#include "ncs-windows.h"

HPACKAGE hPackage = HPACKAGE_NULL;

int MiniGUIMain(int argc, const char* argv[])
{
        #ifdef ntStartWindowEx
        MSG Msg;
        char f_package[MAX_PATH];
        mMainWnd *mWin;
        
        ncsInitialize();
        // START_OF_LOADRESPKG
        sprintf(f_package, "%s", "resmgr_demo.res");
        SetResPath("./");
        
        hPackage = ncsLoadResPackage (f_package);
        if (hPackage == HPACKAGE_NULL) {
                printf ("load resource package:%s failure.\n", f_package);
                return 1;
        }
        // END_OF_LOADRESPKG
        
        // START_OF_GETSTRING
        SetDefaultWindowElementRenderer(ncsGetString(hPackage, NCSRM_SYSSTR_DEFRDR));
        // END_OF_GETSTRING
        
        mWin = ntStartWindowEx(hPackage, HWND_DESKTOP, (HICON)0, (HMENU)0, (DWORD)0);
        
        while(GetMessage(&Msg, mWin->hwnd))
        {
                TranslateMessage(&Msg);
                DispatchMessage(&Msg);
        }
        
        MainWindowThreadCleanup(mWin->hwnd);
        // START_OF_UNLOADPKG
        ncsUnloadResPackage(hPackage);
        // END_OF_UNLOADPKG
        ncsUninitialize();
        #endif
        
        return 0;
}

清单 1 resmgr.c

/*
** $Id: resmgr.c 534 2009-09-22 05:37:46Z xwyan $
**
** Listing P2C2.3
**
** resmgr.c: Sample program for mGNCS Programming Guide
**      Create main window by resource managerment.
**
** Copyright (C) 2009 Feynman Software.
*/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include <minigui/common.h>
#include <minigui/minigui.h>
#include <minigui/gdi.h>
#include <minigui/window.h>

#include <mgncs/mgncs.h>

#include "resource.h"
#include "ncs-windows.h"

static NCS_EVENT_HANDLER_INFO mainwnd_Mainwnd1_handlers[] = {
        
        {-1, NULL}
};

NCS_WND_EXPORT mMainWnd* ntCreateMainwnd1Ex(HPACKAGE package, HWND hParent, HICON h_icon, HMENU h_menu, DWORD user_data)
{
        // START_OF_UIWINDOW
        return ncsCreateMainWindowIndirectFromID(package,
        ID_MAINWND1, 
        hParent,
        h_icon,
        h_menu,
        mainwnd_Mainwnd1_handlers,
        NULL,
        user_data);
        // END_OF_UIWINDOW
}