0
This commit is contained in:
BIN
0mtk扩展内存使用示例.mrpexm.rar
Normal file
BIN
0mtk扩展内存使用示例.mrpexm.rar
Normal file
Binary file not shown.
BIN
30 走出山寨MTK芯片开发指南.pdf
Normal file
BIN
30 走出山寨MTK芯片开发指南.pdf
Normal file
Binary file not shown.
BIN
C语言程序设计.pdf
Normal file
BIN
C语言程序设计.pdf
Normal file
Binary file not shown.
BIN
IRAM_STEP_3.rar
Normal file
BIN
IRAM_STEP_3.rar
Normal file
Binary file not shown.
BIN
IRAM_STEP_4.rar
Normal file
BIN
IRAM_STEP_4.rar
Normal file
Binary file not shown.
BIN
IRAM_STEP_5_Doc.rar
Normal file
BIN
IRAM_STEP_5_Doc.rar
Normal file
Binary file not shown.
BIN
J2ME&GAME.pdf
Normal file
BIN
J2ME&GAME.pdf
Normal file
Binary file not shown.
BIN
MMI实例培训教程(完整版).pdf
Normal file
BIN
MMI实例培训教程(完整版).pdf
Normal file
Binary file not shown.
BIN
MRP嵌入汇编实例USEASM.7z
Normal file
BIN
MRP嵌入汇编实例USEASM.7z
Normal file
Binary file not shown.
152
MRP模拟器解决方案.TXT
Normal file
152
MRP模拟器解决方案.TXT
Normal file
@@ -0,0 +1,152 @@
|
|||||||
|
EXT<EFBFBD>ṹ<EFBFBD><EFBFBD><EFBFBD>⣺
|
||||||
|
ǰ8<EFBFBD>ֽڣ<EFBFBD>
|
||||||
|
0~3<><33>mr_table <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ָ<><D6B8>
|
||||||
|
4~7<><37>mr_c_function_st ָ<><D6B8>
|
||||||
|
8~11<31><31>mr_c_function_load <20><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct _mrc_extChunk_st
|
||||||
|
{
|
||||||
|
int32 check;
|
||||||
|
|
||||||
|
MR_LOAD_C_FUNCTION init_func; //mr_c_function_load <20><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
||||||
|
|
||||||
|
/**
|
||||||
|
* (void* P, int32 code, uint8* input, int32 input_len, uint8** output, int32* output_len);
|
||||||
|
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>⣺
|
||||||
|
* p<><70>global_p_buf ָ<><D6B8>
|
||||||
|
* code<64><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>£<EFBFBD>
|
||||||
|
* 0<><30>mrc_init 1<><31>mrc_event 2<><32>
|
||||||
|
*/
|
||||||
|
MR_C_FUNCTION event; //mr_helper <20><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
||||||
|
|
||||||
|
uint8* code_buf; //ext<78>ڴ<EFBFBD><DAB4><EFBFBD>ַ
|
||||||
|
int32 code_len; //ext<78><74><EFBFBD><EFBFBD>
|
||||||
|
uint8* var_buf; //RW<52>ε<EFBFBD>ַ
|
||||||
|
int32 var_len; //RW<52>γ<EFBFBD><CEB3><EFBFBD>
|
||||||
|
mr_c_function_st* global_p_buf; //mr_c_function_st <20><><EFBFBD><EFBFBD>ַ
|
||||||
|
int32 global_p_len; //mr_c_function_st <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
int32 timer;
|
||||||
|
mrc_extMainSendAppMsg_t sendAppEvent;
|
||||||
|
mr_table *extMrTable;
|
||||||
|
|
||||||
|
#ifdef MRC_PLUGIN
|
||||||
|
MR_C_FUNCTION_EX eventEx;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
int32 isPause;/*1: pause ״̬0:<3A><><EFBFBD><EFBFBD>״̬*/
|
||||||
|
} mrc_extChunk_st;
|
||||||
|
|
||||||
|
typedef struct _mr_c_function_st
|
||||||
|
{
|
||||||
|
uint8* start_of_ER_RW;
|
||||||
|
uint32 ER_RW_Length;
|
||||||
|
//uint8* old_start_of_ER_RW;
|
||||||
|
int32 ext_type;
|
||||||
|
mrc_extChunk_st * mrc_extChunk;
|
||||||
|
|
||||||
|
//stack shell 2008-2-28
|
||||||
|
int32 stack;
|
||||||
|
//
|
||||||
|
} mr_c_function_st;
|
||||||
|
|
||||||
|
|
||||||
|
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̣<EFBFBD>
|
||||||
|
<09>ȵ<EFBFBD><C8B5>ã<EFBFBD>int32 mr_c_function_load (int32 code)<29><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> mr_table <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
|
||||||
|
|
||||||
|
ʱ<EFBFBD>գ<EFBFBD>
|
||||||
|
[<5B><>ַ]-4λ<34><CEBB><EFBFBD><EFBFBD> mr_c_function_stָ<74>롣
|
||||||
|
[<5B><>ַ]-8λ<38><CEBB><EFBFBD>Ǻ<EFBFBD><C7BA><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD>롣
|
||||||
|
mr_c_function_load<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˺<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƫ<EFBFBD><EFBFBD>Ϊ0x64<EFBFBD><EFBFBD>mr_c_function_new<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>mr_c_function_new<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>档
|
||||||
|
EXT<EFBFBD><EFBFBD>RW<EFBFBD>Σ<EFBFBD><EFBFBD><EFBFBD>EXTȫ<EFBFBD>ֱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ռ䣬EXT<EFBFBD>ڲ<EFBFBD><EFBFBD>Լ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
|
||||||
|
|
||||||
|
BinSys<EFBFBD><EFBFBD>
|
||||||
|
# /* ---- SKY_PLATFORM start ---- */
|
||||||
|
ifeq ($(strip $(DSM_SUPPORT)),TRUE)
|
||||||
|
# sky add ,compile switch macro
|
||||||
|
COM_DEFS += __MMI_DSM_NEW__
|
||||||
|
|
||||||
|
|
||||||
|
ifeq ($(strip $(PLATFORM)),MT6235B)
|
||||||
|
COMPOBJS += plutommi\mmi\mythroad\mythroadlib\dsm35.lib
|
||||||
|
endif
|
||||||
|
ifneq ($(strip $(PLATFORM)),MT6235B)
|
||||||
|
COMPOBJS += plutommi\mmi\mythroad\mythroadlib\dsm.lib
|
||||||
|
endif
|
||||||
|
|
||||||
|
|
||||||
|
COMPOBJS += plutommi\mmi\mythroad\mythroadlib\mmidsm111.lib
|
||||||
|
<EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD> dsm.lib <20><> mmidsm111.lib
|
||||||
|
|
||||||
|
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Կ<EFBFBD><EFBFBD><EFBFBD>Ŀǰ<EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֲ<EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><EFBFBD>룬<EFBFBD><EFBFBD>dsm.lib<69><62><EFBFBD><EFBFBD>mythroad.obj
|
||||||
|
|
||||||
|
<EFBFBD><EFBFBD>ʹ<EFBFBD><EFBFBD>
|
||||||
|
<EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD><EFBFBD>е<EFBFBD>API<EFBFBD>ӿ<EFBFBD> <20><><EFBFBD>ں<EFBFBD><DABA><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD>ýӿ<EFBFBD> <20><EFBFBD><EEB5BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
<EFBFBD>ҿ<EFBFBD><EFBFBD><EFBFBD> Ŀǰ<C4BF><C7B0><EFBFBD><EFBFBD>Ҫ<EFBFBD>Ĺ<EFBFBD><C4B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>к<EFBFBD><D0BA><EFBFBD>
|
||||||
|
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǿ<EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>д
|
||||||
|
<EFBFBD><EFBFBD>װNDK<EFBFBD>ײ㺯<EFBFBD><EFBFBD>
|
||||||
|
|
||||||
|
Ȼ<EFBFBD><EFBFBD> <20>ѵ<EFBFBD><D1B5><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>EXT֮ǰҪ<C7B0><D2AA>ʲô<CAB2><C3B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>mrc_initǰ<74><C7B0><EFBFBD><EFBFBD>ʲô<CAB2><C3B4><EFBFBD><EFBFBD>ô<EFBFBD><C3B4>mrc_init
|
||||||
|
|
||||||
|
mr_c_function_load <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַΪext<78>ڴ<EFBFBD><DAB4><EFBFBD>ַ + 8<><38><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ext<78>ڲ<EFBFBD>λ<EFBFBD>ù̶<C3B9>
|
||||||
|
|
||||||
|
|
||||||
|
eleqian<EFBFBD><EFBFBD>
|
||||||
|
<EFBFBD>ţ<EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƱȽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD><EFBFBD>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<EFBFBD>Ի<EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> mrc_init mrc_event mrc_pause <20>Ⱥ<EFBFBD><C8BA><EFBFBD> <20>Dz<EFBFBD><C7B2><EFBFBD><EFBFBD><EFBFBD> ext<78>ļ<EFBFBD><C4BC><EFBFBD>λ<EFBFBD>ù̶<C3B9><CCB6>Ķ
|
||||||
|
<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><timespace_2011@qq.com> 23:35:01
|
||||||
|
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
eleqian(1003082820) 23:35:20
|
||||||
|
ext<EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
<EFBFBD><EFBFBD>ʹ֮<EFBFBD><EFBFBD><edroid@foxmail.com> 23:35:44
|
||||||
|
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ô<EFBFBD>ҵ<EFBFBD> mrc_init <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><timespace_2011@qq.com> 23:35:48
|
||||||
|
<EFBFBD><EFBFBD><EFBFBD>Ƕ<EFBFBD><EFBFBD><EFBFBD>mr_helper<EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD>mr_helper <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>Ϣ<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
eleqian(1003082820) 23:35:51
|
||||||
|
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
|
||||||
|
<EFBFBD><EFBFBD>ʹ֮<EFBFBD><EFBFBD><edroid@foxmail.com> 1:22:58
|
||||||
|
mr_table <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>MTK<54><4B><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>ɵģ<C9B5><C4A3><EFBFBD><EFBFBD>ı<EFBFBD><C4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ij<EFBFBD><C4B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>´ο<C2B4><CEBF><EFBFBD><EFBFBD>Ż<EFBFBD><C5BB>ָ<EFBFBD>
|
||||||
|
BinSys(123077083) 1:23:03
|
||||||
|
mr_c_function_load ȷʵ<C8B7>ǹ̶<C7B9><CCB6>ģ<EFBFBD><C4A3><EFBFBD>Ϊһ<CEAA><D2BB>elf<6C>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>fromelf<6C><66><EFBFBD><EFBFBD>ò<EFBFBD><C3B2>ֻʣ<D6BB>´<EFBFBD><C2B4><EFBFBD><EFBFBD>Σ<EFBFBD><CEA3><EFBFBD><EFBFBD><EFBFBD>entry<72><79>0<EFBFBD>ֽڴ<D6BD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊʲôƫ<C3B4><C6AB><EFBFBD><EFBFBD>8<EFBFBD><38><EFBFBD>Ͳ<EFBFBD>֪<EFBFBD><D6AA><EFBFBD><EFBFBD>
|
||||||
|
<EFBFBD><EFBFBD>ʹ֮<EFBFBD><EFBFBD><edroid@foxmail.com> 1:24:09
|
||||||
|
<EFBFBD><EFBFBD>Ϊ ǰ<><C7B0> 8<><38><EFBFBD>ֽ<EFBFBD> <20>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>洢 mr_table <20><> mr_c_function_st <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||||
|
|
||||||
|
|
||||||
|
first<EFBFBD><EFBFBD>entry<EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD>Ϊ mr_c_function_load<61><64><EFBFBD><EFBFBD><EFBFBD>ⲻ<EFBFBD><E2B2BB>armccָ<63><D6B8><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD>armlink<6E>IJ<EFBFBD><C4B2><EFBFBD>
|
||||||
|
armlink
|
||||||
|
<09><><EFBFBD><EFBFBD>
|
||||||
|
-rwpi
|
||||||
|
-ro
|
||||||
|
-base0x80000
|
||||||
|
-remove
|
||||||
|
-first mr_c_function_load
|
||||||
|
-entry mr_c_function_load
|
||||||
|
-o
|
||||||
|
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\mr_cfunction.fmt
|
||||||
|
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\mr_sfw_mrc_mrc_win.o
|
||||||
|
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\mr_src_helloworld.o
|
||||||
|
C:\SKYMOBI\SDS4CPv1.0\Compiler\mr_helper.lib(mr_helper.o)
|
||||||
|
C:\SKYMOBI\SDS4CPv1.0\Compiler\mr_helper.lib(mr_helper_s.o)
|
||||||
|
C:\SKYMOBI\SDS4CPv1.0\Compiler\mr_helperexf.lib
|
||||||
|
C:\SKYMOBI\SDS4CPv1.0\Compiler\mr_helperexb.lib
|
||||||
|
|
||||||
|
<EFBFBD><EFBFBD>ͬ<EFBFBD>㣺
|
||||||
|
ext<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
<EFBFBD><EFBFBD>mr_table<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ext<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹͣ<EFBFBD>ĺ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ext<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><EFBFBD>
|
||||||
|
<EFBFBD><EFBFBD>ͨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
<EFBFBD><EFBFBD>mr_internal_table<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD>"dealtimer"
|
||||||
|
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬ<EFBFBD><EFBFBD>
|
||||||
|
<EFBFBD><EFBFBD>ͨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õĶ<EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>start.mr<6D><72><EFBFBD><EFBFBD><EFBFBD><EFBFBD>dealtimer
|
||||||
|
dealtimer <20><><EFBFBD><EFBFBD><EFBFBD>Ǹ<EFBFBD><C7B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>start.mr<6D>ﶨ<EFBFBD><EFB6A8>
|
||||||
|
|
||||||
|
*(mr_c_function_load - 0x4) + 0xC <20><><EFBFBD><EFBFBD>extģ<74><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֪<EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
|
||||||
BIN
MrpDeveloperSuit_V2.3(AF0200).rar
Normal file
BIN
MrpDeveloperSuit_V2.3(AF0200).rar
Normal file
Binary file not shown.
BIN
Mythroad API V1.05.chm
Normal file
BIN
Mythroad API V1.05.chm
Normal file
Binary file not shown.
BIN
MythroadSDK.exe
Normal file
BIN
MythroadSDK.exe
Normal file
Binary file not shown.
BIN
Mythroad开发指南(卷三:技术内幕)_110302_V1.09.chm
Normal file
BIN
Mythroad开发指南(卷三:技术内幕)_110302_V1.09.chm
Normal file
Binary file not shown.
BIN
Mythroad程序员开发指南卷二:开发规范_v1.0.0.7_20101216 .chm
Normal file
BIN
Mythroad程序员开发指南卷二:开发规范_v1.0.0.7_20101216 .chm
Normal file
Binary file not shown.
BIN
Mythroad程序员开发指南(卷一:入门)_V1.0.6.chm
Normal file
BIN
Mythroad程序员开发指南(卷一:入门)_V1.0.6.chm
Normal file
Binary file not shown.
16
README.md
16
README.md
@@ -1,2 +1,18 @@
|
|||||||
# mrpdev
|
# mrpdev
|
||||||
老硬盘里翻出来的代码,斯凯mrp的开发文档、SDK、相关资料等
|
老硬盘里翻出来的代码,斯凯mrp的开发文档、SDK、相关资料等
|
||||||
|
|
||||||
|
|
||||||
|
# 冒泡开放平台功能机业务停止运营
|
||||||
|
因冒泡开放平台团队业务调整,2013年8月1日起,冒泡开放平台功能机业务将停止新应用的审核,
|
||||||
|
2013年10月1日平台将正式停止运营。并于2013年10月30日前完成收益结算(此次调整仅针对冒泡开放平台业务,不涉及任何斯凯其他功能机业务)。给您造成的困扰,万分抱歉。冒泡开放平台智能机业务继续运营,感谢您对冒泡开放平台业务的支持,祝您生活愉快。
|
||||||
|
|
||||||
|
|
||||||
|
# other
|
||||||
|
|
||||||
|
很遗憾,mrp时代结束这么多年后才终于将这些资料公开,可能我是最后一个保留了完整的开发技术的人,留着将来考古用
|
||||||
|
幸运的是,我们在安卓手机上有了mrp模拟器,以及与mrp开发极其相似的mpc
|
||||||
|
|
||||||
|
这里面有基础的API和当时未开放的高级API接口文档,以及当时比较高级的自定义字库、扩展内存等技术的资料
|
||||||
|
|
||||||
|
青春如同奔流的江河,一去不回来不及道别
|
||||||
|
|
||||||
|
|||||||
BIN
SKY Developer Suite(CP)_Setu.exe
Normal file
BIN
SKY Developer Suite(CP)_Setu.exe
Normal file
Binary file not shown.
BIN
SKYENGINE API 参考手册.chm
Normal file
BIN
SKYENGINE API 参考手册.chm
Normal file
Binary file not shown.
BIN
SKYENGINE API.chm
Normal file
BIN
SKYENGINE API.chm
Normal file
Binary file not shown.
BIN
Sky_SDK_API_0.1.3.chm
Normal file
BIN
Sky_SDK_API_0.1.3.chm
Normal file
Binary file not shown.
BIN
VS2005.pdf
Normal file
BIN
VS2005.pdf
Normal file
Binary file not shown.
BIN
ads1.2中文使用手册.pdf
Normal file
BIN
ads1.2中文使用手册.pdf
Normal file
Binary file not shown.
BIN
mrc_base_i.7z
Normal file
BIN
mrc_base_i.7z
Normal file
Binary file not shown.
742
mrc_network_http.c
Normal file
742
mrc_network_http.c
Normal file
@@ -0,0 +1,742 @@
|
|||||||
|
#include "mrc_base.h"
|
||||||
|
#include "mrc_network.h"
|
||||||
|
#include "mrc_network_http.h"
|
||||||
|
#include "stdarg.h"//for va_list
|
||||||
|
|
||||||
|
typedef DWORD HBLOCKHEAP;
|
||||||
|
|
||||||
|
#ifndef MAX_HOSTNAME_LEN
|
||||||
|
#define MAX_HOSTNAME_LEN 112
|
||||||
|
#endif
|
||||||
|
#define HTTP_RESPONSECODE_OFFSET 9
|
||||||
|
|
||||||
|
static const char sHttpMethods[][5] =
|
||||||
|
{
|
||||||
|
"GET",
|
||||||
|
"HEAD",
|
||||||
|
"POST"
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef struct HttpRequest_T
|
||||||
|
{
|
||||||
|
HTTPMETHOD method;
|
||||||
|
struct HttpRequest_T* next;
|
||||||
|
}HTTPREQUEST, *PHTTPREQUEST;
|
||||||
|
|
||||||
|
typedef struct HttpData
|
||||||
|
{
|
||||||
|
//http event handler
|
||||||
|
FN_SOCKEVENT fnEvent;
|
||||||
|
|
||||||
|
//available when header responsed
|
||||||
|
uint32 responsecode;
|
||||||
|
int32 contentLength;
|
||||||
|
|
||||||
|
//cache the http header
|
||||||
|
uint32 hdrsize;
|
||||||
|
char header[HTTP_HEADER_SIZE];
|
||||||
|
//http request list on this connection
|
||||||
|
PHTTPREQUEST requests_head;
|
||||||
|
PHTTPREQUEST requests_tail;
|
||||||
|
}HTTPDATA, *PHTTPDATA;
|
||||||
|
|
||||||
|
static HTTPDATA sHttpDataPool[SOCKET_MAX_COUNT];
|
||||||
|
static HBLOCKHEAP sHttpDataHeap;
|
||||||
|
|
||||||
|
|
||||||
|
HBLOCKHEAP BlockHeap_Initialize(VOID* buffer, int buffersize, int blocksize);
|
||||||
|
VOID BlockHeap_Free(HBLOCKHEAP* pHeap, VOID* pBlock);
|
||||||
|
VOID* BlockHeap_Alloc(HBLOCKHEAP* pHeap);
|
||||||
|
|
||||||
|
static int mrc_i_isNum(uint8 code);
|
||||||
|
static int mrc_i_isNumText(char * code);
|
||||||
|
static uint32 inet_addr(const char* cp);
|
||||||
|
static char* tolower(char* str);
|
||||||
|
static PCSTR host(PCSTR url, uint16* port, uint16 def);
|
||||||
|
static uint16 get_port(PCSTR url);
|
||||||
|
|
||||||
|
static char* tolower(char* str)
|
||||||
|
{
|
||||||
|
int i = 0;
|
||||||
|
|
||||||
|
for(; str[i]; i++)
|
||||||
|
{
|
||||||
|
if(str[i] >= 'A' && str[i] <= 'Z')
|
||||||
|
str[i] += 'a' - 'A';
|
||||||
|
}
|
||||||
|
|
||||||
|
return str;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static PCSTR host(PCSTR url, uint16* port, uint16 def)
|
||||||
|
{
|
||||||
|
static char host[MAX_HOSTNAME_LEN];
|
||||||
|
int i, j;
|
||||||
|
if(port) *port = def;
|
||||||
|
|
||||||
|
for(i = j = 0; url[i]; i++)
|
||||||
|
{
|
||||||
|
if(url[i] == ':' && url[i+1] == '/' && url[i+2] == '/')
|
||||||
|
{
|
||||||
|
i+=3;
|
||||||
|
while(url[i] && url[i]!=':' && url[i]!='/')
|
||||||
|
{
|
||||||
|
host[j++] = url[i++];
|
||||||
|
}
|
||||||
|
|
||||||
|
if(port && url[i] == ':')
|
||||||
|
{
|
||||||
|
*port = atoi(url+i+1);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
host[j] = 0;
|
||||||
|
return host;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static uint16 get_port(PCSTR url)
|
||||||
|
{
|
||||||
|
uint16 port = 0;
|
||||||
|
char* p = NULL;
|
||||||
|
|
||||||
|
if( NULL == url )
|
||||||
|
{
|
||||||
|
return 80;
|
||||||
|
}
|
||||||
|
|
||||||
|
p = mrc_strstr(url,"://");
|
||||||
|
if( p )
|
||||||
|
{
|
||||||
|
p += 3;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
p = (char*)url;
|
||||||
|
}
|
||||||
|
|
||||||
|
p = mrc_strstr(p,":");
|
||||||
|
if( p )
|
||||||
|
{
|
||||||
|
port = atoi(p+1);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
port = 80;
|
||||||
|
}
|
||||||
|
|
||||||
|
if( port == 0 )
|
||||||
|
{
|
||||||
|
port = 80;
|
||||||
|
}
|
||||||
|
return port;
|
||||||
|
|
||||||
|
}
|
||||||
|
static int mrc_i_isNum(uint8 code)
|
||||||
|
{
|
||||||
|
if ((code>47 && code<58) || (code=='.') || (code==':') )
|
||||||
|
{
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
static int mrc_i_isNumText(char * code)
|
||||||
|
{
|
||||||
|
char * tempCode = code;
|
||||||
|
|
||||||
|
while(*tempCode)
|
||||||
|
{
|
||||||
|
if( mrc_i_isNum(*tempCode) ==0 )
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
tempCode++;
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
static uint32 inet_addr(const char* cp)
|
||||||
|
{
|
||||||
|
uint32 ip = 0;
|
||||||
|
int i;
|
||||||
|
char ipstr[100];
|
||||||
|
mrc_memset(ipstr, 0, 100);
|
||||||
|
|
||||||
|
for(i = 0; i < 4; i++)
|
||||||
|
{
|
||||||
|
ip <<= 8;
|
||||||
|
ip |= atoi(cp);
|
||||||
|
|
||||||
|
if(i < 3 && (NULL == (cp = mrc_strchr(cp, '.'))))
|
||||||
|
return 0;
|
||||||
|
cp++;
|
||||||
|
}
|
||||||
|
return ip;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef HTTP_HEAD_METHOD_ENABLE
|
||||||
|
static BOOL mrc_Http_Request_Add(PHTTPDATA pHttpData, HTTPMETHOD method)
|
||||||
|
{
|
||||||
|
PHTTPREQUEST request;
|
||||||
|
|
||||||
|
//append to the request list, must not failed
|
||||||
|
if( NULL == (request = (PHTTPREQUEST)malloc(sizeof(HTTPREQUEST))))
|
||||||
|
{
|
||||||
|
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
//add to the request list
|
||||||
|
request->method = method;
|
||||||
|
request->next = NULL;
|
||||||
|
if(pHttpData->requests_head == NULL)
|
||||||
|
pHttpData->requests_head = request;
|
||||||
|
else
|
||||||
|
pHttpData->requests_tail->next = request;
|
||||||
|
pHttpData->requests_tail = request;
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void mrc_Http_Request_Clear(PHTTPDATA pHttpData)
|
||||||
|
{
|
||||||
|
PHTTPREQUEST request;
|
||||||
|
|
||||||
|
while(pHttpData->requests_head)
|
||||||
|
{
|
||||||
|
request = pHttpData->requests_head;
|
||||||
|
pHttpData->requests_head = request->next;
|
||||||
|
free(request);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void mrc_Http_Request_Pop(PHTTPDATA pHttpData)
|
||||||
|
{
|
||||||
|
PHTTPREQUEST request = pHttpData->requests_head;
|
||||||
|
|
||||||
|
if(request)
|
||||||
|
{
|
||||||
|
pHttpData->requests_head = request->next;
|
||||||
|
if(pHttpData->requests_head == NULL)
|
||||||
|
pHttpData->requests_tail = NULL;
|
||||||
|
|
||||||
|
free(request);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#define FIND_HTTP_HEADER_ENDING(pHttpData) \
|
||||||
|
(pHttpData->hdrsize >= 4 \
|
||||||
|
&& pHttpData->header[pHttpData->hdrsize - 4] == '\r' \
|
||||||
|
&& pHttpData->header[pHttpData->hdrsize - 3] == '\n' \
|
||||||
|
&& pHttpData->header[pHttpData->hdrsize - 2] == '\r' \
|
||||||
|
&& pHttpData->header[pHttpData->hdrsize -1] == '\n')
|
||||||
|
|
||||||
|
|
||||||
|
#define RESET_HTTP_RESPONSE_INFO(pHttpData) \
|
||||||
|
pHttpData->contentLength = 0; \
|
||||||
|
pHttpData->hdrsize = 0; \
|
||||||
|
pHttpData->responsecode = 0
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef HTTP_HEAD_METHOD_ENABLE
|
||||||
|
#define HANDLE_RESPONSE_END(socket, pHttpData) \
|
||||||
|
if(pHttpData->fnEvent(socket, HTTPEVT_RESPONSE_END, NULL)) \
|
||||||
|
return 1; \
|
||||||
|
RESET_HTTP_RESPONSE_INFO(pHttpData); \
|
||||||
|
Http_Request_Pop(pHttpData)
|
||||||
|
#else
|
||||||
|
#define HANDLE_RESPONSE_END(socket, pHttpData) \
|
||||||
|
if(pHttpData->fnEvent(socket, HTTPEVT_RESPONSE_END, NULL)) \
|
||||||
|
return 1; \
|
||||||
|
RESET_HTTP_RESPONSE_INFO(pHttpData)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
static DWORD mrc_Http_HandleResponseData(PSOCKET socket, PSOCKEVTDATA data)
|
||||||
|
{
|
||||||
|
int32 i;
|
||||||
|
PCSTR len;
|
||||||
|
PHTTPDATA pHttpData = (PHTTPDATA)socket->userdata;
|
||||||
|
|
||||||
|
if(pHttpData->responsecode == 0)
|
||||||
|
{
|
||||||
|
//receive the http header
|
||||||
|
for(i = 0; i < data->size; i++)
|
||||||
|
{
|
||||||
|
//check the http header buffer, when this happen user should adjust the value of HTTP_HEADER_SIZE
|
||||||
|
//todo
|
||||||
|
if(pHttpData->hdrsize >= HTTP_HEADER_SIZE)
|
||||||
|
{
|
||||||
|
mrc_Http_Close(socket, HTTPEVT_ERROR);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
//copy the byte and continue when not found the http header ending
|
||||||
|
pHttpData->header[pHttpData->hdrsize++] = data->buffer[i];
|
||||||
|
if(!FIND_HTTP_HEADER_ENDING(pHttpData))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
//find the header
|
||||||
|
pHttpData->header[pHttpData->hdrsize] = 0;
|
||||||
|
//SGL_LOG("header.txt", pHttpData->header, pHttpData->hdrsize);
|
||||||
|
tolower(pHttpData->header);
|
||||||
|
|
||||||
|
//maybe socket been closed, user do not want to deal the data left
|
||||||
|
//Note:changed by huangsunbo 2008-10-20,respond head data
|
||||||
|
//todo
|
||||||
|
if(pHttpData->fnEvent(socket, HTTPEVT_RESPONSE_HEADER, data))
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
#ifdef HTTP_HEAD_METHOD_ENABLE
|
||||||
|
if(pHttpData->requests_head->method == HEAD)
|
||||||
|
{
|
||||||
|
HANDLE_RESPONSE_END(socket, pHttpData);
|
||||||
|
}else{
|
||||||
|
#endif
|
||||||
|
if(NULL == (len = mrc_Http_GetResponseField(socket, HTTP_FIELD_CONTENTLENGTH)) )
|
||||||
|
{
|
||||||
|
//can not support the response do not have the field "Content-Length"
|
||||||
|
mrc_Http_Close(socket, HTTPEVT_ERROR);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
pHttpData->contentLength = atoi(len);
|
||||||
|
pHttpData->responsecode = mrc_Http_GetResponseCode(socket);
|
||||||
|
if(pHttpData->contentLength == 0)
|
||||||
|
{
|
||||||
|
HANDLE_RESPONSE_END(socket, pHttpData);
|
||||||
|
}
|
||||||
|
#ifdef HTTP_HEAD_METHOD_ENABLE
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
i++; //i is the bytes has been copyed, so should add 1
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
data->buffer += i;
|
||||||
|
data->size -= i;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(data->size > 0)
|
||||||
|
{
|
||||||
|
int32 notifybytes = MIN(pHttpData->contentLength, data->size);
|
||||||
|
int32 remainbytes = data->size - pHttpData->contentLength;
|
||||||
|
data->size = notifybytes;
|
||||||
|
|
||||||
|
//maybe socket been closed, user do not want to deal the data left
|
||||||
|
if(pHttpData->fnEvent(socket, HTTPEVT_RESPONSE_DATA, data))
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
pHttpData->contentLength -= notifybytes;
|
||||||
|
data->size -= notifybytes;
|
||||||
|
data->buffer += notifybytes;
|
||||||
|
data->size = remainbytes;
|
||||||
|
|
||||||
|
if(pHttpData->contentLength == 0)
|
||||||
|
{
|
||||||
|
HANDLE_RESPONSE_END(socket, pHttpData);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(data->size > 0)
|
||||||
|
return mrc_Http_HandleResponseData(socket, data);
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void mrc_Http_Destroy(PSOCKET socket)
|
||||||
|
{
|
||||||
|
PHTTPDATA pHttpData = (PHTTPDATA)socket->userdata;
|
||||||
|
|
||||||
|
#ifdef HTTP_HEAD_METHOD_ENABLE
|
||||||
|
Http_Request_Clear(pHttpData);
|
||||||
|
#endif
|
||||||
|
BlockHeap_Free(&sHttpDataHeap, pHttpData);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static DWORD mrc_Http_HandleSocketEvents(PSOCKET socket, DWORD evt, PSOCKEVTDATA data)
|
||||||
|
{
|
||||||
|
PHTTPDATA pHttpData = (PHTTPDATA)socket->userdata;
|
||||||
|
FN_SOCKEVENT fnEvent = pHttpData->fnEvent;
|
||||||
|
|
||||||
|
switch(evt)
|
||||||
|
{
|
||||||
|
|
||||||
|
case SOCKEVT_CONNECTED:
|
||||||
|
{
|
||||||
|
return fnEvent(socket, evt, data);
|
||||||
|
}
|
||||||
|
|
||||||
|
case SOCKEVT_RECVDATA:
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* HTTPEVT_RESPONSE_HEADER sent to the user after get the http response header
|
||||||
|
* HTTPEVT_RESPONSE_DATA sent to the user when receive the http data,
|
||||||
|
* HTTPEVT_RESPONSE_END sent to the user when request finished
|
||||||
|
*/
|
||||||
|
return mrc_Http_HandleResponseData(socket, data);
|
||||||
|
}
|
||||||
|
|
||||||
|
case SOCKEVT_CONNECTFAILED:
|
||||||
|
case SOCKEVT_ERROR:
|
||||||
|
case SOCKEVT_CLOSED:
|
||||||
|
{
|
||||||
|
mrc_Http_Destroy(socket);
|
||||||
|
return fnEvent(socket, evt, data);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void mrc_Http_Initialize(void)
|
||||||
|
{
|
||||||
|
sHttpDataHeap = BlockHeap_Initialize(sHttpDataPool, sizeof(sHttpDataPool), sizeof(HTTPDATA));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void mrc_Http_Terminate(void)
|
||||||
|
{
|
||||||
|
//DO NOTHING
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
֧<EFBFBD><EFBFBD>ֱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ
|
||||||
|
<EFBFBD><EFBFBD><EFBFBD>Ľ<EFBFBD> 2010-03-30
|
||||||
|
*/
|
||||||
|
PSOCKET mrc_Http_OpenEx(char*ip_string,uint16 port,FN_SOCKEVENT fnEvent)
|
||||||
|
{
|
||||||
|
PHTTPDATA pHttpData;
|
||||||
|
PSOCKET socket;
|
||||||
|
|
||||||
|
if(!ip_string)
|
||||||
|
{
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if( NULL == (pHttpData = BlockHeap_Alloc(&sHttpDataHeap)))
|
||||||
|
{
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
pHttpData->fnEvent = fnEvent;
|
||||||
|
pHttpData->contentLength = 0;
|
||||||
|
pHttpData->responsecode = 0;
|
||||||
|
pHttpData->hdrsize = 0;
|
||||||
|
|
||||||
|
#ifdef HTTP_HEAD_METHOD_ENABLE
|
||||||
|
pHttpData->requests_head = NULL;
|
||||||
|
pHttpData->requests_tail = NULL;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if(NULL == (socket = mrc_Socket_Create(SOCKPROTO_TCP,
|
||||||
|
mrc_Http_HandleSocketEvents, (DWORD)pHttpData)))
|
||||||
|
{
|
||||||
|
BlockHeap_Free(&sHttpDataHeap, pHttpData);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(mrc_Socket_ConnectNoProxy(socket, ip_string,port,1))
|
||||||
|
{
|
||||||
|
return socket;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
mrc_Socket_Close(socket,SOCKEVT_CLOSED);
|
||||||
|
BlockHeap_Free(&sHttpDataHeap, pHttpData);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
BOOL mrc_Http_Close(PSOCKET socket, DWORD evt)
|
||||||
|
{
|
||||||
|
return mrc_Socket_Close(socket, evt);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
PCSTR mrc_Http_FormatHeader(uint32* size, HTTPMETHOD method, PCSTR url,...)
|
||||||
|
{
|
||||||
|
static char header[HTTP_HEADER_SIZE];
|
||||||
|
uint32 hdrsize;
|
||||||
|
PCSTR field, value;
|
||||||
|
va_list args;
|
||||||
|
va_start(args, url);
|
||||||
|
|
||||||
|
//format the request header line
|
||||||
|
sprintf(header, HTTP_HEADER_FORMAT, sHttpMethods[method], url);
|
||||||
|
hdrsize = strlen(header);
|
||||||
|
|
||||||
|
//parse other fields and values
|
||||||
|
while(NULL != (field = va_arg(args, PCSTR)))
|
||||||
|
{
|
||||||
|
//field name
|
||||||
|
strcpy(header + hdrsize, field);
|
||||||
|
hdrsize += strlen(field);
|
||||||
|
header[hdrsize++] = ':';
|
||||||
|
header[hdrsize++] = ' ';//add space by huangsunbo
|
||||||
|
|
||||||
|
//field value
|
||||||
|
value = va_arg(args, PCSTR);
|
||||||
|
strcpy(header + hdrsize, value);
|
||||||
|
hdrsize += strlen(value);
|
||||||
|
|
||||||
|
//field ending
|
||||||
|
header[hdrsize++] = '\r';
|
||||||
|
header[hdrsize++] = '\n';
|
||||||
|
}
|
||||||
|
|
||||||
|
//append the http header ending
|
||||||
|
header[hdrsize++] = '\r';
|
||||||
|
header[hdrsize++] = '\n';
|
||||||
|
|
||||||
|
va_end(args);
|
||||||
|
*size = hdrsize;
|
||||||
|
return header;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
BOOL mrc_Http_Send(PSOCKET socket, HTTPMETHOD method, PBYTE buffer, uint32 size)
|
||||||
|
{
|
||||||
|
#ifdef HTTP_HEAD_METHOD_ENABLE
|
||||||
|
PHTTPDATA pHttpData = (PHTTPDATA)socket->userdata;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
if(!mrc_Socket_Send(socket, buffer, size))
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
#ifdef HTTP_HEAD_METHOD_ENABLE
|
||||||
|
|
||||||
|
//append to the request list, must not failed
|
||||||
|
if(!mrc_Http_Request_Add(pHttpData, method))
|
||||||
|
{
|
||||||
|
mrc_Http_Close(socket, HTTPEVT_ERROR);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL mrc_Http_GetEx(PSOCKET socket, PCSTR url, uint32 from, uint32 to)
|
||||||
|
{
|
||||||
|
PCSTR pHeader, pHost;
|
||||||
|
uint32 hdrsize;
|
||||||
|
uint16 port;
|
||||||
|
uint8 host_buf[128] = {0};
|
||||||
|
|
||||||
|
|
||||||
|
pHost = host(url,NULL,80);
|
||||||
|
port = get_port(url);
|
||||||
|
|
||||||
|
//<2F><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD>Ͷ˿<CDB6>
|
||||||
|
/*<2A><><EFBFBD><EFBFBD>ע<EFBFBD><D7A2>*/
|
||||||
|
sprintf((char*)host_buf,"%s:%d",pHost,port);
|
||||||
|
|
||||||
|
|
||||||
|
//<1>CP<43><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD>http<74><70><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB>Ҫͨ<D2AA><CDA8>sky<6B><79>proxy<78><79><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>
|
||||||
|
//<2F><><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>sky<6B><79>server<65><72>Ȼ<EFBFBD><C8BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>
|
||||||
|
//<2F><><EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD>url
|
||||||
|
|
||||||
|
|
||||||
|
//<2><3E><><EFBFBD><EFBFBD>cmwap<61><70><EFBFBD>ŷ<EFBFBD>ʽ<EFBFBD><CABD>ʱ<EFBFBD><CAB1>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫͨ<D2AA><CDA8>cmcc<63><63><EFBFBD><EFBFBD><EFBFBD>ؽ<EFBFBD><D8BD><EFBFBD>ת<EFBFBD><D7AA>
|
||||||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫͨ<D2AA><CDA8>Host<73><74>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ͷ˿<CDB6><CBBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؽ<EFBFBD><D8BD><EFBFBD>ת<EFBFBD><D7AA>
|
||||||
|
|
||||||
|
if(from > 0)
|
||||||
|
{
|
||||||
|
char tmp[24] = {0};
|
||||||
|
if(to > from)
|
||||||
|
sprintf(tmp, "bytes=%d-%d", from, to);
|
||||||
|
else
|
||||||
|
sprintf(tmp, "bytes=%d-", from);
|
||||||
|
|
||||||
|
pHeader = mrc_Http_FormatHeader(&hdrsize, GET, url,
|
||||||
|
HTTP_FIELD_HOST, host_buf,
|
||||||
|
HTTP_FIELD_UA, HTTP_VALUE_UA,
|
||||||
|
HTTP_FIELD_ACCEPT, HTTP_VALUE_ACCEPT,
|
||||||
|
HTTP_FIELD_CONTENTTYPE, HTTP_VALUE_CONTENTTYPE,
|
||||||
|
HTTP_FIELD_CONNECTION, HTTP_VALUE_CONNECTION_KEEPALIVE,
|
||||||
|
HTTP_FIELD_PROXYCONNECTION, HTTP_VALUE_CONNECTION_KEEPALIVE,
|
||||||
|
HTTP_FIELD_RANGE, tmp,
|
||||||
|
NULL); //do not forget the NULL ending
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/**/
|
||||||
|
pHeader = mrc_Http_FormatHeader(&hdrsize, GET, url,
|
||||||
|
HTTP_FIELD_HOST, host_buf,
|
||||||
|
HTTP_FIELD_UA, HTTP_VALUE_UA,
|
||||||
|
HTTP_FIELD_ACCEPT, HTTP_VALUE_ACCEPT,
|
||||||
|
HTTP_FIELD_CONTENTTYPE, HTTP_VALUE_CONTENTTYPE,
|
||||||
|
HTTP_FIELD_CONNECTION, HTTP_VALUE_CONNECTION_KEEPALIVE,
|
||||||
|
HTTP_FIELD_PROXYCONNECTION, HTTP_VALUE_CONNECTION_KEEPALIVE,
|
||||||
|
NULL); //do not forget the NULL ending
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return mrc_Http_Send(socket, GET, (PBYTE)pHeader, hdrsize);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef HTTP_HEAD_METHOD_ENABLE
|
||||||
|
|
||||||
|
BOOL mrc_Http_Head(PSOCKET socket, PCSTR url)
|
||||||
|
{
|
||||||
|
PCSTR pHeader, pHost;
|
||||||
|
uint32 hdrsize;
|
||||||
|
|
||||||
|
pHost = host(url, NULL, 0);
|
||||||
|
pHeader = mrc_Http_FormatHeader(&hdrsize, HEAD, url,
|
||||||
|
HTTP_FIELD_HOST, pHost,
|
||||||
|
HTTP_FIELD_UA, HTTP_VALUE_UA,
|
||||||
|
HTTP_FIELD_ACCEPT, HTTP_VALUE_ACCEPT,
|
||||||
|
HTTP_FIELD_CONTENTTYPE, HTTP_VALUE_CONTENTTYPE,
|
||||||
|
HTTP_FIELD_CONNECTION, HTTP_VALUE_CONNECTION_KEEPALIVE,
|
||||||
|
HTTP_FIELD_PROXYCONNECTION, HTTP_VALUE_CONNECTION_KEEPALIVE,
|
||||||
|
NULL); //do not forget the NULL ending
|
||||||
|
|
||||||
|
return mrc_Http_Send(socket, HEAD, (PBYTE)pHeader, hdrsize);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
BOOL mrc_Http_PostEx(PSOCKET socket, PCSTR url, PCSTR buffer, uint32 size)
|
||||||
|
{
|
||||||
|
PCSTR pHeader, pHost;
|
||||||
|
uint32 hdrsize;
|
||||||
|
char tmp[12]={0};
|
||||||
|
uint8 host_buf[128] = {0};
|
||||||
|
uint16 port;
|
||||||
|
|
||||||
|
|
||||||
|
pHost = host(url,NULL,80);
|
||||||
|
port = get_port(url);
|
||||||
|
|
||||||
|
//<2F><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD>Ͷ˿<CDB6>
|
||||||
|
sprintf((char*)host_buf,"%s:%d",pHost,port);
|
||||||
|
|
||||||
|
sprintf(tmp, "%d", size);
|
||||||
|
pHeader = mrc_Http_FormatHeader(&hdrsize, POST, url,
|
||||||
|
HTTP_FIELD_HOST, host_buf,
|
||||||
|
HTTP_FIELD_UA, HTTP_VALUE_UA,
|
||||||
|
HTTP_FIELD_ACCEPT, HTTP_VALUE_ACCEPT,
|
||||||
|
HTTP_FIELD_CONTENTTYPE, HTTP_VALUE_CONTENTTYPE,
|
||||||
|
HTTP_FIELD_CONNECTION, HTTP_VALUE_CONNECTION_KEEPALIVE,
|
||||||
|
HTTP_FIELD_PROXYCONNECTION, HTTP_VALUE_CONNECTION_KEEPALIVE,
|
||||||
|
HTTP_FIELD_CONTENTLENGTH, tmp,
|
||||||
|
NULL); //do not forget the NULL ending
|
||||||
|
|
||||||
|
//check that socket have enough buffer
|
||||||
|
if(socket->begin + SOCKET_SENDBUFFER_SIZE - socket->end < hdrsize + size)
|
||||||
|
{
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
//if return false that cause is not about send buffer
|
||||||
|
if(!mrc_Http_Send(socket, POST, (PBYTE)pHeader, hdrsize))
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
//if return false that cause is not about send buffer
|
||||||
|
if(size > 0 && !mrc_Socket_Send(socket, (PBYTE)buffer, size))
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
uint32 mrc_Http_GetResponseCode(PSOCKET socket)
|
||||||
|
{
|
||||||
|
PHTTPDATA pHttpData = (PHTTPDATA) socket->userdata;
|
||||||
|
return atoi(pHttpData->header + HTTP_RESPONSECODE_OFFSET);
|
||||||
|
}
|
||||||
|
|
||||||
|
int mrc_Http_GetResponseHead(PSOCKET socket,uint8** buf, uint32* size)
|
||||||
|
{
|
||||||
|
PHTTPDATA pHttpData = NULL;
|
||||||
|
if( NULL == socket || NULL == buf || size == NULL ||
|
||||||
|
socket->sd < 0 || socket->protocol != SOCKPROTO_TCP )
|
||||||
|
{
|
||||||
|
buf = NULL;
|
||||||
|
*size = 0;
|
||||||
|
return MR_FAILED;
|
||||||
|
}
|
||||||
|
|
||||||
|
pHttpData = (PHTTPDATA) socket->userdata;
|
||||||
|
*buf = (uint8*)pHttpData->header;
|
||||||
|
*size = pHttpData->hdrsize;
|
||||||
|
return MR_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
PCSTR mrc_Http_GetResponseField(PSOCKET socket, PCSTR field)
|
||||||
|
{
|
||||||
|
static char value[HTTP_FIELDVALUE_SIZE];
|
||||||
|
|
||||||
|
int32 i = 0;
|
||||||
|
PCSTR pTmp;
|
||||||
|
PHTTPDATA pHttpData = (PHTTPDATA)socket->userdata;
|
||||||
|
|
||||||
|
strncpy(value, field, HTTP_FIELDVALUE_SIZE-1);
|
||||||
|
value[HTTP_FIELDVALUE_SIZE-1] = 0;
|
||||||
|
tolower(value);
|
||||||
|
|
||||||
|
if( NULL == (pTmp = mrc_strstr(pHttpData->header, value)))
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
pTmp += mrc_strlen(field);
|
||||||
|
while(*pTmp == ' ' || *pTmp == ':')
|
||||||
|
pTmp++;
|
||||||
|
|
||||||
|
while(!(pTmp[i] == '\r' && pTmp[i+1] == '\n'))
|
||||||
|
{
|
||||||
|
value[i] = pTmp[i];
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
|
||||||
|
value[i] = 0;
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
HBLOCKHEAP BlockHeap_Initialize(VOID* buffer, int buffersize, int blocksize)
|
||||||
|
{
|
||||||
|
PBYTE pBlock = (PBYTE)buffer;
|
||||||
|
|
||||||
|
//SGL_ASSERT(0 == MOD(buffersize, blocksize) && 0 == MOD(blocksize, 4));
|
||||||
|
|
||||||
|
for(buffersize -= blocksize; pBlock - (PBYTE)buffer < buffersize ; pBlock += blocksize)
|
||||||
|
*(Uint8**)pBlock = pBlock + blocksize;
|
||||||
|
|
||||||
|
*(PBYTE*)pBlock = NULL;
|
||||||
|
return (HBLOCKHEAP)buffer;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
VOID* BlockHeap_Alloc(HBLOCKHEAP* pHeap)
|
||||||
|
{
|
||||||
|
VOID* pBlock = (VOID*)(*pHeap);
|
||||||
|
|
||||||
|
if(pBlock)
|
||||||
|
*pHeap =(HBLOCKHEAP)( *(PBYTE*)(*pHeap) );
|
||||||
|
|
||||||
|
return pBlock;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
VOID BlockHeap_Free(HBLOCKHEAP* pHeap, VOID* pBlock)
|
||||||
|
{
|
||||||
|
*(PBYTE*)pBlock = (PBYTE)(*pHeap);
|
||||||
|
*pHeap = (HBLOCKHEAP)pBlock;
|
||||||
|
}
|
||||||
171
mrc_network_http.h
Normal file
171
mrc_network_http.h
Normal file
@@ -0,0 +1,171 @@
|
|||||||
|
#ifndef _MRC_NETWORK_HTTP_H_
|
||||||
|
#define _MRC_NETWORK_HTTP_H_
|
||||||
|
|
||||||
|
#include "mrc_base.h"
|
||||||
|
#include "mrc_network.h"
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǻ<EFBFBD><EFBFBD><EFBFBD>HTTPЭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӿڣ<EFBFBD>
|
||||||
|
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>HTTP<EFBFBD>ǻ<EFBFBD><EFBFBD><EFBFBD>socket<EFBFBD>ϵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD>ض<EFBFBD><EFBFBD>壬<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϤHTTPЭ<EFBFBD>鼰socket<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>壬<EFBFBD>ò<EFBFBD><EFBFBD>ֵ<EFBFBD>Դ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ե<EFBFBD>freesky.51mrp.com<6F><6D><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief max http header size in bytes
|
||||||
|
*/
|
||||||
|
#ifndef HTTP_HEADER_SIZE
|
||||||
|
#define HTTP_HEADER_SIZE 1024
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief max field value length in response header
|
||||||
|
*/
|
||||||
|
#ifndef HTTP_FIELDVALUE_SIZE
|
||||||
|
#define HTTP_FIELDVALUE_SIZE 128
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief supported http method
|
||||||
|
*/
|
||||||
|
typedef enum HTTP_METHOD_E
|
||||||
|
{
|
||||||
|
GET = 0, //"GET"
|
||||||
|
|
||||||
|
HEAD, //"HEAD"
|
||||||
|
|
||||||
|
POST//"POST"
|
||||||
|
}HTTPMETHOD;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief http events
|
||||||
|
*/
|
||||||
|
typedef enum HTTP_EVENT_E
|
||||||
|
{
|
||||||
|
/** sent when http socket connected */
|
||||||
|
HTTPEVT_CONNECTED = SOCKEVT_CONNECTED,
|
||||||
|
|
||||||
|
/** sent when http socket connect failed */
|
||||||
|
HTTPEVT_CONNECTFAILED = SOCKEVT_CONNECTFAILED,
|
||||||
|
|
||||||
|
/** sent when error happen */
|
||||||
|
HTTPEVT_ERROR = SOCKEVT_ERROR,
|
||||||
|
|
||||||
|
/** sent when socket closed */
|
||||||
|
HTTPEVT_CLOSED = SOCKEVT_CLOSED,
|
||||||
|
|
||||||
|
/** sent when get the http response header */
|
||||||
|
HTTPEVT_RESPONSE_HEADER,
|
||||||
|
|
||||||
|
/** sent when get the http response data */
|
||||||
|
HTTPEVT_RESPONSE_DATA,
|
||||||
|
|
||||||
|
/** sent when one http response finished */
|
||||||
|
HTTPEVT_RESPONSE_END
|
||||||
|
}HTTPEVENT;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:mrc_Http_Initialize
|
||||||
|
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: HTTP<54><50>ʼ<EFBFBD><CABC>
|
||||||
|
* <20><><EFBFBD><EFBFBD>ֵ:<3A><>
|
||||||
|
*/
|
||||||
|
VOID mrc_Http_Initialize(VOID);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Terminate the http module.
|
||||||
|
*
|
||||||
|
* When the http module is not needed by the application anymore, this function could
|
||||||
|
* be called to release the http module.
|
||||||
|
*
|
||||||
|
* \sa Socket_Initialize
|
||||||
|
*/
|
||||||
|
VOID mrc_Http_Terminate(VOID);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Open a socket for http.
|
||||||
|
*
|
||||||
|
* \param ip_string the server ip address or host name,just like 192.168.0.1 or http://www.163.com
|
||||||
|
* only the authorization user can use this function
|
||||||
|
* \param port the server port number
|
||||||
|
* \param fnEvent the http events handler
|
||||||
|
* \return http socket handle on success, NULL otherwise
|
||||||
|
*/
|
||||||
|
PSOCKET mrc_Http_OpenEx(char*ip_string,uint16 port,FN_SOCKEVENT fnEvent);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Close a http socket .
|
||||||
|
*
|
||||||
|
* \param socket the socket handle
|
||||||
|
* \param evt the close event
|
||||||
|
* \return TRUE on success, FALSE otherwise
|
||||||
|
*/
|
||||||
|
BOOL mrc_Http_Close(PSOCKET socket, DWORD evt);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Send http get command.
|
||||||
|
*
|
||||||
|
* \param socket the http socket handle
|
||||||
|
* \param url the request url
|
||||||
|
* \param from the start position of the content
|
||||||
|
* \param to the end position of the content
|
||||||
|
* \return TRUE on success, FALSE otherwise
|
||||||
|
*/
|
||||||
|
BOOL mrc_Http_GetEx(PSOCKET socket, PCSTR url, uint32 from, uint32 to);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Post the http data.
|
||||||
|
*
|
||||||
|
* \param socket the http socket
|
||||||
|
* \param url the request url
|
||||||
|
* \param buffer the post data
|
||||||
|
* \param size post data size
|
||||||
|
* \return TRUE on success, FALSE otherwise
|
||||||
|
*/
|
||||||
|
BOOL mrc_Http_PostEx(PSOCKET socket, PCSTR url, PCSTR buffer, uint32 size);
|
||||||
|
/**
|
||||||
|
* \brief Get the http response code.
|
||||||
|
*
|
||||||
|
* This can only be called after receive the EVENT HTTPEVT_RESPONSE_HEADER event.
|
||||||
|
* otherwise undefined.
|
||||||
|
*
|
||||||
|
* \param socket the http socket handle
|
||||||
|
* \return the response code
|
||||||
|
*/
|
||||||
|
uint32 mrc_Http_GetResponseCode(PSOCKET socket);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Get the field value of the http header
|
||||||
|
*
|
||||||
|
* This can only be called after receive the EVENT HTTPEVT_RESPONSE_HEADER event.
|
||||||
|
* otherwise undefined.
|
||||||
|
*
|
||||||
|
* \param socket the http socket handle
|
||||||
|
* \param field the http header field
|
||||||
|
* \return the value of the filed on success, NULL otherwise
|
||||||
|
*/
|
||||||
|
PCSTR mrc_Http_GetResponseField(PSOCKET socket, PCSTR field);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Get http response head content
|
||||||
|
*
|
||||||
|
*\param socket the http socket handle
|
||||||
|
* \param buffer the http head point
|
||||||
|
*\param size the http head data length
|
||||||
|
* \return the value of MR_SUCCESS on success, MR_FAILED otherwise
|
||||||
|
*/
|
||||||
|
int mrc_Http_GetResponseHead(PSOCKET socket,uint8** buf, uint32* size);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
||||||
BIN
mythroad工程文件编写指南.pdf
Normal file
BIN
mythroad工程文件编写指南.pdf
Normal file
Binary file not shown.
BIN
sky_fontmaker_v2.0.0616.rar
Normal file
BIN
sky_fontmaker_v2.0.0616.rar
Normal file
Binary file not shown.
414
smp_stylebox.c
Normal file
414
smp_stylebox.c
Normal file
@@ -0,0 +1,414 @@
|
|||||||
|
#include "smp_stylebox.h"
|
||||||
|
|
||||||
|
#include "smp.h"
|
||||||
|
#include "bmp.h"
|
||||||
|
#include "mrc_exb.h"
|
||||||
|
#include "types.h"
|
||||||
|
|
||||||
|
|
||||||
|
#define SMP_BOX_RECOVER_SPEED 3 //<2F><><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>ļ<EFBFBD><C4BC>ٶȣ<D9B6><C8A3><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F>Σ<EFBFBD>
|
||||||
|
|
||||||
|
|
||||||
|
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD>Ϣ*/
|
||||||
|
typedef struct SMP_ItemData{
|
||||||
|
int index; //<2F><><EFBFBD><EFBFBD>
|
||||||
|
int width; //<2F><><EFBFBD><EFBFBD>
|
||||||
|
int height; //<2F>߶<EFBFBD>
|
||||||
|
HBITMAP hBmp; //ͼƬ<CDBC><C6AC><EFBFBD><EFBFBD>
|
||||||
|
}SMPITEMDATA, *PSMPITEMDATA;
|
||||||
|
|
||||||
|
|
||||||
|
/*<2A><><EFBFBD>ڽṹ<DABD><E1B9B9>*/
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
int num; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
BOOL focus; //<2F>Ƿ<EFBFBD><C7B7>н<EFBFBD><D0BD><EFBFBD>
|
||||||
|
int onewidth; //һ<><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
int oneheight;
|
||||||
|
|
||||||
|
int rows; //<2F><>
|
||||||
|
int stand; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
|
||||||
|
int topmagin; //<2F><><EFBFBD><EFBFBD>ʱ <20><><EFBFBD><EFBFBD><EFBFBD>߾<EFBFBD>
|
||||||
|
int leftmagin;
|
||||||
|
|
||||||
|
int highlight; //<2F>ĸ<EFBFBD><C4B8><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
}BOXDATA, *PBOXDATA;
|
||||||
|
|
||||||
|
|
||||||
|
#define SMP_STYLEBOX_MAX 10
|
||||||
|
|
||||||
|
static SMPITEMDATA BoxItem[SMP_STYLEBOX_MAX]; //<2F>Ź<EFBFBD><C5B9><EFBFBD>ÿһ<C3BF><D2BB>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ*/
|
||||||
|
VOID SMP_Stylewnd_SetItem(HWND hWnd, const DWORD* bmps, int size)
|
||||||
|
{
|
||||||
|
|
||||||
|
PBOXDATA pBoxData = _GET_WINDATA(hWnd, PBOXDATA);
|
||||||
|
int i;
|
||||||
|
if(size>SMP_STYLEBOX_MAX || !bmps)
|
||||||
|
return;
|
||||||
|
|
||||||
|
for (i=0; i<size; i++)
|
||||||
|
{
|
||||||
|
BoxItem[i].index = i;
|
||||||
|
BoxItem[i].hBmp = SGL_LoadBitmap(bmps[i], &BoxItem[i].width, &BoxItem[i].height);
|
||||||
|
}
|
||||||
|
pBoxData->num = size;
|
||||||
|
pBoxData->highlight = 4; //Ĭ<><C4AC><EFBFBD><EFBFBD><EFBFBD>м<EFBFBD><D0BC><EFBFBD><EFBFBD>ý<EFBFBD><C3BD><EFBFBD>
|
||||||
|
|
||||||
|
pBoxData->onewidth = _WIDTH(hWnd)/3;
|
||||||
|
pBoxData->oneheight = _HEIGHT(hWnd)/3;
|
||||||
|
pBoxData->topmagin = 0;
|
||||||
|
pBoxData->leftmagin = 0;
|
||||||
|
|
||||||
|
pBoxData->rows = 3; //Ĭ<><C4AC>3*3 <20>Ź<EFBFBD><C5B9><EFBFBD>
|
||||||
|
pBoxData->stand = 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
VOID SMP_Update_OneBox(HWND hWnd, int index)
|
||||||
|
{
|
||||||
|
int hx, hy; //<2F><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>꣨hx, hy<68><79>
|
||||||
|
PBOXDATA pBoxData = _GET_WINDATA(hWnd, PBOXDATA);
|
||||||
|
|
||||||
|
hx = _LEFT(hWnd) + pBoxData->onewidth*(index%3);
|
||||||
|
hy = _TOP(hWnd) + pBoxData->oneheight*(index/3);
|
||||||
|
|
||||||
|
if (hy + pBoxData->topmagin >= _TOP(hWnd) && hy+pBoxData->topmagin+pBoxData->highlight <= _TOP(hWnd)+_HEIGHT(hWnd))
|
||||||
|
{
|
||||||
|
if (pBoxData->highlight == index)//<2F><><EFBFBD><EFBFBD>
|
||||||
|
GAL_FillRoundRrct(hx+(pBoxData->onewidth - BoxItem[index].width)/2 + pBoxData->leftmagin-3,
|
||||||
|
hy+(pBoxData->oneheight - BoxItem[index].height)/2 + pBoxData->topmagin-2,
|
||||||
|
BoxItem[index].width+6, BoxItem[index].height+4, COLOR_focus);
|
||||||
|
else
|
||||||
|
GAL_FillBox(PHYSICALGC, hx, hy, pBoxData->onewidth, pBoxData->oneheight, _BGCOLOR(hWnd));
|
||||||
|
mrc_bitmapShowEx(BoxItem[index].hBmp,
|
||||||
|
hx+(pBoxData->onewidth - BoxItem[index].width)/2 + pBoxData->leftmagin,
|
||||||
|
hy+(pBoxData->oneheight - BoxItem[index].height)/2 + pBoxData->topmagin,
|
||||||
|
BoxItem[index].width, BoxItem[index].width, BoxItem[index].height, BM_TRANSPARENT, 0, 0);
|
||||||
|
|
||||||
|
GAL_FlushRegion(PHYSICALGC, hx + pBoxData->leftmagin, hy + pBoxData->topmagin, pBoxData->onewidth, pBoxData->oneheight);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EEA3AC>Ҫ<EFBFBD><D2AA>ƽ<EFBFBD><C6BD><EFBFBD>ƶ<EFBFBD><C6B6><EFBFBD>ʱ<EFBFBD><CAB1>
|
||||||
|
* û<>в<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0>Ļ<EFBFBD><C4BB><EFBFBD>뻺<EFBFBD><EBBBBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ظ<EFBFBD>ˢ<EFBFBD>£<EFBFBD><C2A3><EFBFBD><EFBFBD>Dz<EFBFBD><C7B2><EFBFBD><EFBFBD>ػ<EFBFBD>ˢ<EFBFBD><CBA2>
|
||||||
|
*/
|
||||||
|
VOID SMP_DrawStyleBox(HWND hWnd)
|
||||||
|
{
|
||||||
|
int i, j, index = 0;
|
||||||
|
int x, y, w, h; //<2F><>ʼ<EFBFBD><CABC><EFBFBD>꣬<EFBFBD><EAA3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
int hx, hy; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
|
||||||
|
|
||||||
|
PBOXDATA pBoxData = _GET_WINDATA(hWnd, PBOXDATA);
|
||||||
|
x = _LEFT(hWnd);
|
||||||
|
y = _TOP(hWnd);
|
||||||
|
w = _WIDTH(hWnd);
|
||||||
|
h = _HEIGHT(hWnd);
|
||||||
|
hy = y;
|
||||||
|
for (i=0; i<pBoxData->rows; i++)//<2F><>
|
||||||
|
{
|
||||||
|
hx = x;
|
||||||
|
for (j=0; j<pBoxData->stand; j++)//<2F><>
|
||||||
|
{
|
||||||
|
if (pBoxData->highlight == index)//<2F><><EFBFBD><EFBFBD>
|
||||||
|
GAL_FillRoundRrct(hx+(pBoxData->onewidth - BoxItem[index].width)/2 + pBoxData->leftmagin-3,
|
||||||
|
hy+(pBoxData->oneheight - BoxItem[index].height)/2 + pBoxData->topmagin-2,
|
||||||
|
BoxItem[index].width+6, BoxItem[index].height+4, COLOR_focus);
|
||||||
|
|
||||||
|
mrc_bitmapShowEx(BoxItem[index].hBmp,
|
||||||
|
hx+(pBoxData->onewidth - BoxItem[index].width)/2 + pBoxData->leftmagin,
|
||||||
|
hy+(pBoxData->oneheight - BoxItem[index].height)/2 + pBoxData->topmagin,
|
||||||
|
BoxItem[index].width, BoxItem[index].width, BoxItem[index].height, BM_TRANSPARENT, 0, 0);
|
||||||
|
hx+=pBoxData->onewidth;
|
||||||
|
index++;
|
||||||
|
}
|
||||||
|
hy+=pBoxData->oneheight;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*<2A><><EFBFBD>ø<EFBFBD><C3B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ţ<EFBFBD> <20>ڱ<EFBFBD><DAB1><EFBFBD><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD>¼<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8>(int)lParam<61><6D><EFBFBD>ø<EFBFBD><C3B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
||||||
|
int SMP_Box_GetHilightId(HWND hWnd)
|
||||||
|
{
|
||||||
|
PBOXDATA pBoxData = _GET_WINDATA(hWnd, PBOXDATA);
|
||||||
|
return pBoxData->highlight;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*<2A>ɿ<EFBFBD><C9BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߰<EFBFBD><DFB0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԭλ<D4AD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD>ָ<EFBFBD>ԭλ*/
|
||||||
|
VOID SMP_Box_RecoverLoaction(HWND hWnd)
|
||||||
|
{
|
||||||
|
PBOXDATA pBoxData = _GET_WINDATA(hWnd, PBOXDATA);
|
||||||
|
int i;
|
||||||
|
//int x_step = 1;
|
||||||
|
int y_step = 1; //<2F>䵱<EFBFBD><E4B5B1><EFBFBD>ٶ<EFBFBD>
|
||||||
|
|
||||||
|
if(pBoxData->leftmagin==0 && pBoxData->topmagin==0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if(pBoxData->topmagin>0)//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
{
|
||||||
|
for (i=0; i<=pBoxData->topmagin; i++, y_step+=SMP_BOX_RECOVER_SPEED)//<2F><> <20>ٶ<EFBFBD>Ϊ1
|
||||||
|
{
|
||||||
|
if(pBoxData->topmagin - y_step<0)
|
||||||
|
pBoxData->topmagin = 0;
|
||||||
|
else
|
||||||
|
pBoxData->topmagin-= y_step;
|
||||||
|
|
||||||
|
SGL_TRACE("%d", pBoxData->topmagin);
|
||||||
|
SGL_UpdateWindow(hWnd);
|
||||||
|
}
|
||||||
|
}else if(pBoxData->topmagin<0)//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
{
|
||||||
|
for(i=0; i>=pBoxData->topmagin; i--, y_step+=SMP_BOX_RECOVER_SPEED)
|
||||||
|
{
|
||||||
|
if(pBoxData->topmagin + y_step>0)
|
||||||
|
pBoxData->topmagin = 0;
|
||||||
|
else
|
||||||
|
pBoxData->topmagin+=y_step;
|
||||||
|
|
||||||
|
SGL_TRACE("%d", pBoxData->topmagin);
|
||||||
|
SGL_UpdateWindow(hWnd);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
LRESULT SMP_Box_WndProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
|
||||||
|
{
|
||||||
|
PBOXDATA pBoxData = _GET_WINDATA(hWnd, PBOXDATA);
|
||||||
|
//static int start_x = 0;
|
||||||
|
static int start_y = 0;
|
||||||
|
static int click_count = 0;
|
||||||
|
static int key_step = 0; //<2F><><EFBFBD><EFBFBD>ģ<EFBFBD>⻬<EFBFBD><E2BBAC><EFBFBD>ٶ<EFBFBD>
|
||||||
|
|
||||||
|
switch(Msg)
|
||||||
|
{
|
||||||
|
case WM_CREATE:
|
||||||
|
{
|
||||||
|
//request memory and initialize members
|
||||||
|
pBoxData = (PBOXDATA)SGL_MALLOC(sizeof(BOXDATA));
|
||||||
|
if(!pBoxData){
|
||||||
|
SGL_TRACE("%s, %d: memory out\n", __FILE__, __LINE__);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
SGL_MEMSET(pBoxData, 0, sizeof(BOXDATA));
|
||||||
|
_SET_WINDATA(hWnd, pBoxData);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
case WM_DESTROY:
|
||||||
|
{
|
||||||
|
if(pBoxData) SGL_FREE(pBoxData);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
case WM_SHOW:
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
case WM_PAINT:
|
||||||
|
{
|
||||||
|
_BGCOLOR(hWnd) = 0x00ddeeff;
|
||||||
|
GAL_FillBox(PHYSICALGC, _LEFT(hWnd), _TOP(hWnd), _WIDTH(hWnd), _HEIGHT(hWnd), _BGCOLOR(hWnd));
|
||||||
|
SMP_DrawStyleBox(hWnd);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
case WM_MOUSEDOWN:
|
||||||
|
{
|
||||||
|
int index_x = 0; //<2F><><EFBFBD><EFBFBD><EFBFBD>Ŷ<EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>(index_x,index_y)
|
||||||
|
int index_y = 0;
|
||||||
|
int oldhl = pBoxData->highlight; //<2F>ɸ<EFBFBD><C9B8><EFBFBD>ͼ<EFBFBD><CDBC>
|
||||||
|
index_x = ((int)wParam)/pBoxData->onewidth;
|
||||||
|
index_y = ((int)lParam)/pBoxData->oneheight;
|
||||||
|
|
||||||
|
pBoxData->highlight = (index_x+3*index_y);
|
||||||
|
|
||||||
|
if (oldhl == pBoxData->highlight)
|
||||||
|
{
|
||||||
|
click_count ++;
|
||||||
|
SGL_NotifyParent(hWnd, SMP_BOXI_CLICKED, pBoxData->highlight);
|
||||||
|
}
|
||||||
|
else if (oldhl != pBoxData->highlight)//<2F><><EFBFBD><EFBFBD><EFBFBD>л<EFBFBD>
|
||||||
|
{
|
||||||
|
click_count = 1;
|
||||||
|
SMP_Update_OneBox(hWnd, oldhl); //ˢ<><CBA2>ͼ<EFBFBD><CDBC>
|
||||||
|
SMP_Update_OneBox(hWnd, pBoxData->highlight);
|
||||||
|
SGL_NotifyParent(hWnd, SMP_BOXI_HILICHANGED, pBoxData->highlight);
|
||||||
|
}
|
||||||
|
|
||||||
|
//λ<>ø<EFBFBD>ԭ
|
||||||
|
if (!pBoxData->leftmagin|| !pBoxData->topmagin)
|
||||||
|
SMP_Box_RecoverLoaction(hWnd);
|
||||||
|
|
||||||
|
//////////////////////////////////////////////////////////////////////////
|
||||||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƶ<EFBFBD>ǰ<EFBFBD><C7B0>Y<EFBFBD><59><EFBFBD><EFBFBD>
|
||||||
|
start_y = (int)lParam;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
case WM_MOUSEMOVE:
|
||||||
|
{
|
||||||
|
//pBoxData->leftmagin = ((int)wParam - start_x);
|
||||||
|
pBoxData->topmagin = ((int)lParam - start_y);
|
||||||
|
SGL_UpdateWindow(hWnd);
|
||||||
|
SGL_NotifyParent(hWnd, SMP_BOXI_MOUSEMOVE, 0);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
case WM_MOUSEUP:
|
||||||
|
{
|
||||||
|
int index_x = 0;
|
||||||
|
int index_y = 0;
|
||||||
|
int oldhl = pBoxData->highlight;
|
||||||
|
index_x = ((int)wParam)/pBoxData->onewidth;
|
||||||
|
index_y = ((int)lParam)/pBoxData->oneheight;
|
||||||
|
pBoxData->highlight = (index_x+3*index_y);
|
||||||
|
if (oldhl == pBoxData->highlight)
|
||||||
|
{
|
||||||
|
if (click_count == 2)//<2F>ڶ<EFBFBD><DAB6>ε<EFBFBD><CEB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɿ<EFBFBD>
|
||||||
|
{
|
||||||
|
click_count = 1;
|
||||||
|
SGL_NotifyParent(hWnd, SMP_BOXI_SELECTED, pBoxData->highlight);
|
||||||
|
}
|
||||||
|
}else if (oldhl != pBoxData->highlight)//<2F><><EFBFBD><EFBFBD><EFBFBD>л<EFBFBD>
|
||||||
|
{
|
||||||
|
SMP_Update_OneBox(hWnd, oldhl); //ˢ<><CBA2>ͼ<EFBFBD><CDBC>
|
||||||
|
SMP_Update_OneBox(hWnd, pBoxData->highlight);
|
||||||
|
SGL_NotifyParent(hWnd, SMP_BOXI_HILICHANGED, pBoxData->highlight);
|
||||||
|
}
|
||||||
|
|
||||||
|
//λ<>ø<EFBFBD>ԭ
|
||||||
|
if (!pBoxData->leftmagin|| !pBoxData->topmagin)
|
||||||
|
SMP_Box_RecoverLoaction(hWnd);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
case WM_KEYDOWN:
|
||||||
|
case WM_KEYDOWNREPEAT:
|
||||||
|
{
|
||||||
|
int oldhl = pBoxData->highlight;
|
||||||
|
switch(wParam)
|
||||||
|
{
|
||||||
|
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƶ<EFBFBD>*/
|
||||||
|
case MR_KEY_UP:
|
||||||
|
{
|
||||||
|
if (pBoxData->highlight>2)
|
||||||
|
pBoxData->highlight-=3;
|
||||||
|
else
|
||||||
|
pBoxData->highlight+=6;
|
||||||
|
SMP_Update_OneBox(hWnd, oldhl); //ˢ<><CBA2>ͼ<EFBFBD><CDBC>
|
||||||
|
SMP_Update_OneBox(hWnd, pBoxData->highlight);
|
||||||
|
SGL_NotifyParent(hWnd, SMP_BOXI_HILICHANGED, pBoxData->highlight);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
case MR_KEY_DOWN:
|
||||||
|
{
|
||||||
|
if (pBoxData->highlight<6)
|
||||||
|
pBoxData->highlight+=3;
|
||||||
|
else
|
||||||
|
pBoxData->highlight-=6;
|
||||||
|
SMP_Update_OneBox(hWnd, oldhl); //ˢ<><CBA2>ͼ<EFBFBD><CDBC>
|
||||||
|
SMP_Update_OneBox(hWnd, pBoxData->highlight);
|
||||||
|
SGL_NotifyParent(hWnd, SMP_BOXI_HILICHANGED, pBoxData->highlight);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
case MR_KEY_LEFT:
|
||||||
|
{
|
||||||
|
if (pBoxData->highlight>0)
|
||||||
|
pBoxData->highlight--;
|
||||||
|
else
|
||||||
|
pBoxData->highlight = 8;
|
||||||
|
SMP_Update_OneBox(hWnd, oldhl); //ˢ<><CBA2>ͼ<EFBFBD><CDBC>
|
||||||
|
SMP_Update_OneBox(hWnd, pBoxData->highlight);
|
||||||
|
SGL_NotifyParent(hWnd, SMP_BOXI_HILICHANGED, pBoxData->highlight);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
case MR_KEY_RIGHT:
|
||||||
|
{
|
||||||
|
if (pBoxData->highlight<8)
|
||||||
|
pBoxData->highlight++;
|
||||||
|
else
|
||||||
|
pBoxData->highlight = 0;
|
||||||
|
SMP_Update_OneBox(hWnd, oldhl); //ˢ<><CBA2>ͼ<EFBFBD><CDBC>
|
||||||
|
SMP_Update_OneBox(hWnd, pBoxData->highlight);
|
||||||
|
SGL_NotifyParent(hWnd, SMP_BOXI_HILICHANGED, pBoxData->highlight);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
case MR_KEY_2://<2F><><EFBFBD><EFBFBD>ģ<EFBFBD>⣬<EFBFBD><E2A3AC><EFBFBD>ϻ<EFBFBD><CFBB><EFBFBD>
|
||||||
|
{
|
||||||
|
if(pBoxData->topmagin>(-_HEIGHT(hWnd))+30)
|
||||||
|
{
|
||||||
|
key_step +=5;
|
||||||
|
pBoxData->topmagin -= key_step;
|
||||||
|
SGL_UpdateWindow(hWnd);
|
||||||
|
SGL_NotifyParent(hWnd, SMP_BOXI_MOUSEMOVE, 0);
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
case MR_KEY_8://<2F><><EFBFBD><EFBFBD>ģ<EFBFBD>⣬<EFBFBD><E2A3AC><EFBFBD>»<EFBFBD><C2BB><EFBFBD>
|
||||||
|
{
|
||||||
|
if(pBoxData->topmagin<_HEIGHT(hWnd)-30)
|
||||||
|
{
|
||||||
|
key_step +=5;
|
||||||
|
pBoxData->topmagin += key_step;
|
||||||
|
SGL_UpdateWindow(hWnd);
|
||||||
|
SGL_NotifyParent(hWnd, SMP_BOXI_MOUSEMOVE, 0);
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
case WM_KEYUP:
|
||||||
|
{
|
||||||
|
/*ѡ<><D1A1>*/
|
||||||
|
if(wParam == MR_KEY_SELECT)
|
||||||
|
{
|
||||||
|
SGL_NotifyParent(hWnd, SMP_BOXI_SELECTED, pBoxData->highlight);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
//λ<>ø<EFBFBD>ԭ
|
||||||
|
if (!pBoxData->leftmagin|| !pBoxData->topmagin)
|
||||||
|
SMP_Box_RecoverLoaction(hWnd);
|
||||||
|
|
||||||
|
key_step = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// case WM_COMMAND:
|
||||||
|
// {
|
||||||
|
// WORD id = LOWORD(wParam);
|
||||||
|
// WORD code = HIWORD(wParam);
|
||||||
|
// switch(id)
|
||||||
|
// {
|
||||||
|
// case WM_COMMAND:
|
||||||
|
// {
|
||||||
|
// if (code == WM_COMMAND)
|
||||||
|
// {
|
||||||
|
// //
|
||||||
|
// }
|
||||||
|
// break;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// return 0;
|
||||||
|
// }
|
||||||
|
case WM_SETFOCUS:
|
||||||
|
case WM_KILLFOCUS:
|
||||||
|
{
|
||||||
|
SGL_UpdateWindow(hWnd);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
24
smp_stylebox.h
Normal file
24
smp_stylebox.h
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
#ifndef _SMP_STYLEBOX_H
|
||||||
|
#define _SMP_STYLEBOX_H
|
||||||
|
|
||||||
|
#include "window.h"
|
||||||
|
|
||||||
|
|
||||||
|
#define SMP_BOXI_HILICHANGED 0x0001 //<2F><><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD>
|
||||||
|
|
||||||
|
#define SMP_BOXI_CLICKED 0x0002 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
|
||||||
|
#define SMP_BOXI_SELECTED 0x0003 //ѡ<><D1A1>
|
||||||
|
|
||||||
|
#define SMP_BOXI_MOUSEMOVE 0x0004 //<2F><><EFBFBD><EFBFBD><EFBFBD>ƶ<EFBFBD>
|
||||||
|
|
||||||
|
/*<2A><><EFBFBD>ø<EFBFBD><C3B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
||||||
|
int SMP_Box_GetHilightId(HWND hWnd);
|
||||||
|
|
||||||
|
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ*/
|
||||||
|
VOID SMP_Stylewnd_SetItem(HWND hWnd, const DWORD* bmps, int size);
|
||||||
|
|
||||||
|
|
||||||
|
LRESULT SMP_Box_WndProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam);
|
||||||
|
|
||||||
|
#endif
|
||||||
BIN
杭州斯凯SDK 开发FAQ.doc
Normal file
BIN
杭州斯凯SDK 开发FAQ.doc
Normal file
Binary file not shown.
BIN
杭州斯凯SDK教程_入门篇.doc
Normal file
BIN
杭州斯凯SDK教程_入门篇.doc
Normal file
Binary file not shown.
BIN
杭州斯凯SDK教程_提高篇.doc
Normal file
BIN
杭州斯凯SDK教程_提高篇.doc
Normal file
Binary file not shown.
Reference in New Issue
Block a user