Просмотр исходного кода

准备开始对接热敏打印机

zhangyang 6 лет назад
Родитель
Сommit
fcde07802e

+ 1 - 1
bin/Win32/Debug/zhipuzi_pos_windows/skin/GameRes/desk.xml

@@ -10,6 +10,6 @@
 		<Label float="true" name="waimai_order_list_order_no" text="订单编号:" textcolor="#FF558CC4" pos="300,36,600,66" mouse="false" />
 		
 		<Button name="waimai_order_list_info" float="true" pos="600,6,660,36" text="详情" textcolor="#FFFF0000" bkcolor="#FFFFFF00"/>
-		<Button name="waimai_order_list_info" float="true" pos="600,56,660,86" text="打印" textcolor="#FFFF0000" bkcolor="#FFFFFF00"/>
+		<Button name="waimai_order_list_print" float="true" pos="600,56,660,86" text="打印" textcolor="#FFFF0000" bkcolor="#FFFFFF00"/>
 	</WaimaiOrderItem>
 </Window>

BIN
bin/Win32/Debug/zhipuzi_pos_windows/zhipuzi_pos_windows.exe


+ 266 - 244
lewaimai_dispatch/helper/MD5.cpp

@@ -1,328 +1,350 @@
 #include "../pch/pch.h"
-#include "MD5.h"  
+#include "MD5.h"
 
 #include <stdio.h>
 
-// Constants for MD5Transform routine.  
-#define S11 7  
-#define S12 12  
-#define S13 17  
-#define S14 22  
-#define S21 5  
-#define S22 9  
-#define S23 14  
-#define S24 20  
-#define S31 4  
-#define S32 11  
-#define S33 16  
-#define S34 23  
-#define S41 6  
-#define S42 10  
-#define S43 15  
-#define S44 21  
-
-///////////////////////////////////////////////  
-
-// F, G, H and I are basic MD5 functions.  
-inline MD5::uint4 MD5::F(uint4 x, uint4 y, uint4 z) {
-	return x & y | ~x&z;
+// Constants for MD5Transform routine.
+#define S11 7
+#define S12 12
+#define S13 17
+#define S14 22
+#define S21 5
+#define S22 9
+#define S23 14
+#define S24 20
+#define S31 4
+#define S32 11
+#define S33 16
+#define S34 23
+#define S41 6
+#define S42 10
+#define S43 15
+#define S44 21
+
+///////////////////////////////////////////////
+
+// F, G, H and I are basic MD5 functions.
+inline MD5::uint4 MD5::F(uint4 x, uint4 y, uint4 z)
+{
+    return x & y | ~x & z;
 }
 
-inline MD5::uint4 MD5::G(uint4 x, uint4 y, uint4 z) {
-	return x & z | y & ~z;
+inline MD5::uint4 MD5::G(uint4 x, uint4 y, uint4 z)
+{
+    return x & z | y & ~z;
 }
 
-inline MD5::uint4 MD5::H(uint4 x, uint4 y, uint4 z) {
-	return x ^ y^z;
+inline MD5::uint4 MD5::H(uint4 x, uint4 y, uint4 z)
+{
+    return x ^ y ^ z;
 }
 
-inline MD5::uint4 MD5::I(uint4 x, uint4 y, uint4 z) {
-	return y ^ (x | ~z);
+inline MD5::uint4 MD5::I(uint4 x, uint4 y, uint4 z)
+{
+    return y ^ (x | ~z);
 }
 
-// rotate_left rotates x left n bits.  
-inline MD5::uint4 MD5::rotate_left(uint4 x, int n) {
-	return (x << n) | (x >> (32 - n));
+// rotate_left rotates x left n bits.
+inline MD5::uint4 MD5::rotate_left(uint4 x, int n)
+{
+    return (x << n) | (x >> (32 - n));
 }
 
-// FF, GG, HH, and II transformations for rounds 1, 2, 3, and 4.  
-// Rotation is separate from addition to prevent recomputation.  
-inline void MD5::FF(uint4 &a, uint4 b, uint4 c, uint4 d, uint4 x, uint4 s, uint4 ac) {
-	a = rotate_left(a + F(b, c, d) + x + ac, s) + b;
+// FF, GG, HH, and II transformations for rounds 1, 2, 3, and 4.
+// Rotation is separate from addition to prevent recomputation.
+inline void MD5::FF(uint4 &a, uint4 b, uint4 c, uint4 d, uint4 x, uint4 s, uint4 ac)
+{
+    a = rotate_left(a + F(b, c, d) + x + ac, s) + b;
 }
 
-inline void MD5::GG(uint4 &a, uint4 b, uint4 c, uint4 d, uint4 x, uint4 s, uint4 ac) {
-	a = rotate_left(a + G(b, c, d) + x + ac, s) + b;
+inline void MD5::GG(uint4 &a, uint4 b, uint4 c, uint4 d, uint4 x, uint4 s, uint4 ac)
+{
+    a = rotate_left(a + G(b, c, d) + x + ac, s) + b;
 }
 
-inline void MD5::HH(uint4 &a, uint4 b, uint4 c, uint4 d, uint4 x, uint4 s, uint4 ac) {
-	a = rotate_left(a + H(b, c, d) + x + ac, s) + b;
+inline void MD5::HH(uint4 &a, uint4 b, uint4 c, uint4 d, uint4 x, uint4 s, uint4 ac)
+{
+    a = rotate_left(a + H(b, c, d) + x + ac, s) + b;
 }
 
-inline void MD5::II(uint4 &a, uint4 b, uint4 c, uint4 d, uint4 x, uint4 s, uint4 ac) {
-	a = rotate_left(a + I(b, c, d) + x + ac, s) + b;
+inline void MD5::II(uint4 &a, uint4 b, uint4 c, uint4 d, uint4 x, uint4 s, uint4 ac)
+{
+    a = rotate_left(a + I(b, c, d) + x + ac, s) + b;
 }
 
-//////////////////////////////////////////////  
+//////////////////////////////////////////////
 
-// default ctor, just initailize  
+// default ctor, just initailize
 MD5::MD5()
 {
-	init();
+    init();
 }
 
-//////////////////////////////////////////////  
+//////////////////////////////////////////////
 
-// nifty shortcut ctor, compute MD5 for string and finalize it right away  
+// nifty shortcut ctor, compute MD5 for string and finalize it right away
 MD5::MD5(const std::string &text)
 {
-	init();
-	update(text.c_str(), text.length());
-	finalize();
+    init();
+    update(text.c_str(), text.length());
+    finalize();
 }
 
-//////////////////////////////  
+//////////////////////////////
 
 void MD5::init()
 {
-	finalized = false;
+    finalized = false;
 
-	count[0] = 0;
-	count[1] = 0;
+    count[0] = 0;
+    count[1] = 0;
 
-	// load magic initialization constants.  
-	state[0] = 0x67452301;
-	state[1] = 0xefcdab89;
-	state[2] = 0x98badcfe;
-	state[3] = 0x10325476;
+    // load magic initialization constants.
+    state[0] = 0x67452301;
+    state[1] = 0xefcdab89;
+    state[2] = 0x98badcfe;
+    state[3] = 0x10325476;
 }
 
-//////////////////////////////  
+//////////////////////////////
 
-// decodes input (unsigned char) into output (uint4). Assumes len is a multiple of 4.  
+// decodes input (unsigned char) into output (uint4). Assumes len is a multiple of 4.
 void MD5::decode(uint4 output[], const uint1 input[], size_type len)
 {
-	for (unsigned int i = 0, j = 0; j < len; i++, j += 4)
-		output[i] = ((uint4)input[j]) | (((uint4)input[j + 1]) << 8) |
-		(((uint4)input[j + 2]) << 16) | (((uint4)input[j + 3]) << 24);
+    for(unsigned int i = 0, j = 0; j < len; i++, j += 4)
+        output[i] = ((uint4)input[j]) | (((uint4)input[j + 1]) << 8) |
+                    (((uint4)input[j + 2]) << 16) | (((uint4)input[j + 3]) << 24);
 }
 
-//////////////////////////////  
+//////////////////////////////
 
-// encodes input (uint4) into output (unsigned char). Assumes len is  
-// a multiple of 4.  
+// encodes input (uint4) into output (unsigned char). Assumes len is
+// a multiple of 4.
 void MD5::encode(uint1 output[], const uint4 input[], size_type len)
 {
-	for (size_type i = 0, j = 0; j < len; i++, j += 4) {
-		output[j] = input[i] & 0xff;
-		output[j + 1] = (input[i] >> 8) & 0xff;
-		output[j + 2] = (input[i] >> 16) & 0xff;
-		output[j + 3] = (input[i] >> 24) & 0xff;
-	}
+    for(size_type i = 0, j = 0; j < len; i++, j += 4)
+    {
+        output[j] = input[i] & 0xff;
+        output[j + 1] = (input[i] >> 8) & 0xff;
+        output[j + 2] = (input[i] >> 16) & 0xff;
+        output[j + 3] = (input[i] >> 24) & 0xff;
+    }
 }
 
-//////////////////////////////  
+//////////////////////////////
 
-// apply MD5 algo on a block  
+// apply MD5 algo on a block
 void MD5::transform(const uint1 block[blocksize])
 {
-	uint4 a = state[0], b = state[1], c = state[2], d = state[3], x[16];
-	decode(x, block, blocksize);
-
-	/* Round 1 */
-	FF(a, b, c, d, x[0], S11, 0xd76aa478); /* 1 */
-	FF(d, a, b, c, x[1], S12, 0xe8c7b756); /* 2 */
-	FF(c, d, a, b, x[2], S13, 0x242070db); /* 3 */
-	FF(b, c, d, a, x[3], S14, 0xc1bdceee); /* 4 */
-	FF(a, b, c, d, x[4], S11, 0xf57c0faf); /* 5 */
-	FF(d, a, b, c, x[5], S12, 0x4787c62a); /* 6 */
-	FF(c, d, a, b, x[6], S13, 0xa8304613); /* 7 */
-	FF(b, c, d, a, x[7], S14, 0xfd469501); /* 8 */
-	FF(a, b, c, d, x[8], S11, 0x698098d8); /* 9 */
-	FF(d, a, b, c, x[9], S12, 0x8b44f7af); /* 10 */
-	FF(c, d, a, b, x[10], S13, 0xffff5bb1); /* 11 */
-	FF(b, c, d, a, x[11], S14, 0x895cd7be); /* 12 */
-	FF(a, b, c, d, x[12], S11, 0x6b901122); /* 13 */
-	FF(d, a, b, c, x[13], S12, 0xfd987193); /* 14 */
-	FF(c, d, a, b, x[14], S13, 0xa679438e); /* 15 */
-	FF(b, c, d, a, x[15], S14, 0x49b40821); /* 16 */
-
-	/* Round 2 */
-	GG(a, b, c, d, x[1], S21, 0xf61e2562); /* 17 */
-	GG(d, a, b, c, x[6], S22, 0xc040b340); /* 18 */
-	GG(c, d, a, b, x[11], S23, 0x265e5a51); /* 19 */
-	GG(b, c, d, a, x[0], S24, 0xe9b6c7aa); /* 20 */
-	GG(a, b, c, d, x[5], S21, 0xd62f105d); /* 21 */
-	GG(d, a, b, c, x[10], S22, 0x2441453); /* 22 */
-	GG(c, d, a, b, x[15], S23, 0xd8a1e681); /* 23 */
-	GG(b, c, d, a, x[4], S24, 0xe7d3fbc8); /* 24 */
-	GG(a, b, c, d, x[9], S21, 0x21e1cde6); /* 25 */
-	GG(d, a, b, c, x[14], S22, 0xc33707d6); /* 26 */
-	GG(c, d, a, b, x[3], S23, 0xf4d50d87); /* 27 */
-	GG(b, c, d, a, x[8], S24, 0x455a14ed); /* 28 */
-	GG(a, b, c, d, x[13], S21, 0xa9e3e905); /* 29 */
-	GG(d, a, b, c, x[2], S22, 0xfcefa3f8); /* 30 */
-	GG(c, d, a, b, x[7], S23, 0x676f02d9); /* 31 */
-	GG(b, c, d, a, x[12], S24, 0x8d2a4c8a); /* 32 */
-
-	/* Round 3 */
-	HH(a, b, c, d, x[5], S31, 0xfffa3942); /* 33 */
-	HH(d, a, b, c, x[8], S32, 0x8771f681); /* 34 */
-	HH(c, d, a, b, x[11], S33, 0x6d9d6122); /* 35 */
-	HH(b, c, d, a, x[14], S34, 0xfde5380c); /* 36 */
-	HH(a, b, c, d, x[1], S31, 0xa4beea44); /* 37 */
-	HH(d, a, b, c, x[4], S32, 0x4bdecfa9); /* 38 */
-	HH(c, d, a, b, x[7], S33, 0xf6bb4b60); /* 39 */
-	HH(b, c, d, a, x[10], S34, 0xbebfbc70); /* 40 */
-	HH(a, b, c, d, x[13], S31, 0x289b7ec6); /* 41 */
-	HH(d, a, b, c, x[0], S32, 0xeaa127fa); /* 42 */
-	HH(c, d, a, b, x[3], S33, 0xd4ef3085); /* 43 */
-	HH(b, c, d, a, x[6], S34, 0x4881d05); /* 44 */
-	HH(a, b, c, d, x[9], S31, 0xd9d4d039); /* 45 */
-	HH(d, a, b, c, x[12], S32, 0xe6db99e5); /* 46 */
-	HH(c, d, a, b, x[15], S33, 0x1fa27cf8); /* 47 */
-	HH(b, c, d, a, x[2], S34, 0xc4ac5665); /* 48 */
-
-	/* Round 4 */
-	II(a, b, c, d, x[0], S41, 0xf4292244); /* 49 */
-	II(d, a, b, c, x[7], S42, 0x432aff97); /* 50 */
-	II(c, d, a, b, x[14], S43, 0xab9423a7); /* 51 */
-	II(b, c, d, a, x[5], S44, 0xfc93a039); /* 52 */
-	II(a, b, c, d, x[12], S41, 0x655b59c3); /* 53 */
-	II(d, a, b, c, x[3], S42, 0x8f0ccc92); /* 54 */
-	II(c, d, a, b, x[10], S43, 0xffeff47d); /* 55 */
-	II(b, c, d, a, x[1], S44, 0x85845dd1); /* 56 */
-	II(a, b, c, d, x[8], S41, 0x6fa87e4f); /* 57 */
-	II(d, a, b, c, x[15], S42, 0xfe2ce6e0); /* 58 */
-	II(c, d, a, b, x[6], S43, 0xa3014314); /* 59 */
-	II(b, c, d, a, x[13], S44, 0x4e0811a1); /* 60 */
-	II(a, b, c, d, x[4], S41, 0xf7537e82); /* 61 */
-	II(d, a, b, c, x[11], S42, 0xbd3af235); /* 62 */
-	II(c, d, a, b, x[2], S43, 0x2ad7d2bb); /* 63 */
-	II(b, c, d, a, x[9], S44, 0xeb86d391); /* 64 */
-
-	state[0] += a;
-	state[1] += b;
-	state[2] += c;
-	state[3] += d;
-
-	// Zeroize sensitive information.  
-	memset(x, 0, sizeof x);
+    uint4 a = state[0], b = state[1], c = state[2], d = state[3], x[16];
+    decode(x, block, blocksize);
+
+    /* Round 1 */
+    FF(a, b, c, d, x[0], S11, 0xd76aa478); /* 1 */
+    FF(d, a, b, c, x[1], S12, 0xe8c7b756); /* 2 */
+    FF(c, d, a, b, x[2], S13, 0x242070db); /* 3 */
+    FF(b, c, d, a, x[3], S14, 0xc1bdceee); /* 4 */
+    FF(a, b, c, d, x[4], S11, 0xf57c0faf); /* 5 */
+    FF(d, a, b, c, x[5], S12, 0x4787c62a); /* 6 */
+    FF(c, d, a, b, x[6], S13, 0xa8304613); /* 7 */
+    FF(b, c, d, a, x[7], S14, 0xfd469501); /* 8 */
+    FF(a, b, c, d, x[8], S11, 0x698098d8); /* 9 */
+    FF(d, a, b, c, x[9], S12, 0x8b44f7af); /* 10 */
+    FF(c, d, a, b, x[10], S13, 0xffff5bb1); /* 11 */
+    FF(b, c, d, a, x[11], S14, 0x895cd7be); /* 12 */
+    FF(a, b, c, d, x[12], S11, 0x6b901122); /* 13 */
+    FF(d, a, b, c, x[13], S12, 0xfd987193); /* 14 */
+    FF(c, d, a, b, x[14], S13, 0xa679438e); /* 15 */
+    FF(b, c, d, a, x[15], S14, 0x49b40821); /* 16 */
+
+    /* Round 2 */
+    GG(a, b, c, d, x[1], S21, 0xf61e2562); /* 17 */
+    GG(d, a, b, c, x[6], S22, 0xc040b340); /* 18 */
+    GG(c, d, a, b, x[11], S23, 0x265e5a51); /* 19 */
+    GG(b, c, d, a, x[0], S24, 0xe9b6c7aa); /* 20 */
+    GG(a, b, c, d, x[5], S21, 0xd62f105d); /* 21 */
+    GG(d, a, b, c, x[10], S22, 0x2441453); /* 22 */
+    GG(c, d, a, b, x[15], S23, 0xd8a1e681); /* 23 */
+    GG(b, c, d, a, x[4], S24, 0xe7d3fbc8); /* 24 */
+    GG(a, b, c, d, x[9], S21, 0x21e1cde6); /* 25 */
+    GG(d, a, b, c, x[14], S22, 0xc33707d6); /* 26 */
+    GG(c, d, a, b, x[3], S23, 0xf4d50d87); /* 27 */
+    GG(b, c, d, a, x[8], S24, 0x455a14ed); /* 28 */
+    GG(a, b, c, d, x[13], S21, 0xa9e3e905); /* 29 */
+    GG(d, a, b, c, x[2], S22, 0xfcefa3f8); /* 30 */
+    GG(c, d, a, b, x[7], S23, 0x676f02d9); /* 31 */
+    GG(b, c, d, a, x[12], S24, 0x8d2a4c8a); /* 32 */
+
+    /* Round 3 */
+    HH(a, b, c, d, x[5], S31, 0xfffa3942); /* 33 */
+    HH(d, a, b, c, x[8], S32, 0x8771f681); /* 34 */
+    HH(c, d, a, b, x[11], S33, 0x6d9d6122); /* 35 */
+    HH(b, c, d, a, x[14], S34, 0xfde5380c); /* 36 */
+    HH(a, b, c, d, x[1], S31, 0xa4beea44); /* 37 */
+    HH(d, a, b, c, x[4], S32, 0x4bdecfa9); /* 38 */
+    HH(c, d, a, b, x[7], S33, 0xf6bb4b60); /* 39 */
+    HH(b, c, d, a, x[10], S34, 0xbebfbc70); /* 40 */
+    HH(a, b, c, d, x[13], S31, 0x289b7ec6); /* 41 */
+    HH(d, a, b, c, x[0], S32, 0xeaa127fa); /* 42 */
+    HH(c, d, a, b, x[3], S33, 0xd4ef3085); /* 43 */
+    HH(b, c, d, a, x[6], S34, 0x4881d05); /* 44 */
+    HH(a, b, c, d, x[9], S31, 0xd9d4d039); /* 45 */
+    HH(d, a, b, c, x[12], S32, 0xe6db99e5); /* 46 */
+    HH(c, d, a, b, x[15], S33, 0x1fa27cf8); /* 47 */
+    HH(b, c, d, a, x[2], S34, 0xc4ac5665); /* 48 */
+
+    /* Round 4 */
+    II(a, b, c, d, x[0], S41, 0xf4292244); /* 49 */
+    II(d, a, b, c, x[7], S42, 0x432aff97); /* 50 */
+    II(c, d, a, b, x[14], S43, 0xab9423a7); /* 51 */
+    II(b, c, d, a, x[5], S44, 0xfc93a039); /* 52 */
+    II(a, b, c, d, x[12], S41, 0x655b59c3); /* 53 */
+    II(d, a, b, c, x[3], S42, 0x8f0ccc92); /* 54 */
+    II(c, d, a, b, x[10], S43, 0xffeff47d); /* 55 */
+    II(b, c, d, a, x[1], S44, 0x85845dd1); /* 56 */
+    II(a, b, c, d, x[8], S41, 0x6fa87e4f); /* 57 */
+    II(d, a, b, c, x[15], S42, 0xfe2ce6e0); /* 58 */
+    II(c, d, a, b, x[6], S43, 0xa3014314); /* 59 */
+    II(b, c, d, a, x[13], S44, 0x4e0811a1); /* 60 */
+    II(a, b, c, d, x[4], S41, 0xf7537e82); /* 61 */
+    II(d, a, b, c, x[11], S42, 0xbd3af235); /* 62 */
+    II(c, d, a, b, x[2], S43, 0x2ad7d2bb); /* 63 */
+    II(b, c, d, a, x[9], S44, 0xeb86d391); /* 64 */
+
+    state[0] += a;
+    state[1] += b;
+    state[2] += c;
+    state[3] += d;
+
+    // Zeroize sensitive information.
+    memset(x, 0, sizeof x);
 }
 
-//////////////////////////////  
+//////////////////////////////
 
-// MD5 block update operation. Continues an MD5 message-digest  
-// operation, processing another message block  
+// MD5 block update operation. Continues an MD5 message-digest
+// operation, processing another message block
 void MD5::update(const unsigned char input[], size_type length)
 {
-	// compute number of bytes mod 64  
-	size_type index = count[0] / 8 % blocksize;
-
-	// Update number of bits  
-	if ((count[0] += (length << 3)) < (length << 3))
-		count[1]++;
-	count[1] += (length >> 29);
-
-	// number of bytes we need to fill in buffer  
-	size_type firstpart = 64 - index;
-
-	size_type i;
-
-	// transform as many times as possible.  
-	if (length >= firstpart)
-	{
-		// fill buffer first, transform  
-		memcpy(&buffer[index], input, firstpart);
-		transform(buffer);
-
-		// transform chunks of blocksize (64 bytes)  
-		for (i = firstpart; i + blocksize <= length; i += blocksize)
-			transform(&input[i]);
-
-		index = 0;
-	}
-	else
-		i = 0;
-
-	// buffer remaining input  
-	memcpy(&buffer[index], &input[i], length - i);
+    // compute number of bytes mod 64
+    size_type index = count[0] / 8 % blocksize;
+
+    // Update number of bits
+    if((count[0] += (length << 3)) < (length << 3))
+    {
+        count[1]++;
+    }
+    count[1] += (length >> 29);
+
+    // number of bytes we need to fill in buffer
+    size_type firstpart = 64 - index;
+
+    size_type i;
+
+    // transform as many times as possible.
+    if(length >= firstpart)
+    {
+        // fill buffer first, transform
+        memcpy(&buffer[index], input, firstpart);
+        transform(buffer);
+
+        // transform chunks of blocksize (64 bytes)
+        for(i = firstpart; i + blocksize <= length; i += blocksize)
+        {
+            transform(&input[i]);
+        }
+
+        index = 0;
+    }
+    else
+    {
+        i = 0;
+    }
+
+    // buffer remaining input
+    memcpy(&buffer[index], &input[i], length - i);
 }
 
-//////////////////////////////  
+//////////////////////////////
 
-// for convenience provide a verson with signed char  
+// for convenience provide a verson with signed char
 void MD5::update(const char input[], size_type length)
 {
-	update((const unsigned char*)input, length);
+    update((const unsigned char*)input, length);
 }
 
-//////////////////////////////  
+//////////////////////////////
 
-// MD5 finalization. Ends an MD5 message-digest operation, writing the  
-// the message digest and zeroizing the context.  
+// MD5 finalization. Ends an MD5 message-digest operation, writing the
+// the message digest and zeroizing the context.
 MD5& MD5::finalize()
 {
-	static unsigned char padding[64] = {
-		0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
-	};
-
-	if (!finalized) {
-		// Save number of bits  
-		unsigned char bits[8];
-		encode(bits, count, 8);
-
-		// pad out to 56 mod 64.  
-		size_type index = count[0] / 8 % 64;
-		size_type padLen = (index < 56) ? (56 - index) : (120 - index);
-		update(padding, padLen);
-
-		// Append length (before padding)  
-		update(bits, 8);
-
-		// Store state in digest  
-		encode(digest, state, 16);
-
-		// Zeroize sensitive information.  
-		memset(buffer, 0, sizeof buffer);
-		memset(count, 0, sizeof count);
-
-		finalized = true;
-	}
-
-	return *this;
+    static unsigned char padding[64] =
+    {
+        0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+    };
+
+    if(!finalized)
+    {
+        // Save number of bits
+        unsigned char bits[8];
+        encode(bits, count, 8);
+
+        // pad out to 56 mod 64.
+        size_type index = count[0] / 8 % 64;
+        size_type padLen = (index < 56) ? (56 - index) : (120 - index);
+        update(padding, padLen);
+
+        // Append length (before padding)
+        update(bits, 8);
+
+        // Store state in digest
+        encode(digest, state, 16);
+
+        // Zeroize sensitive information.
+        memset(buffer, 0, sizeof buffer);
+        memset(count, 0, sizeof count);
+
+        finalized = true;
+    }
+
+    return *this;
 }
 
-//////////////////////////////  
+//////////////////////////////
 
-// return hex representation of digest as string  
+// return hex representation of digest as string
 std::string MD5::hexdigest() const
 {
-	if (!finalized)
-		return "";
-
-	char buf[33];
-	for (int i = 0; i < 16; i++)
-		sprintf(buf + i * 2, "%02x", digest[i]);
-	buf[32] = 0;
-
-	return std::string(buf);
+    if(!finalized)
+    {
+        return "";
+    }
+
+    char buf[33];
+    for(int i = 0; i < 16; i++)
+    {
+        sprintf(buf + i * 2, "%02x", digest[i]);
+    }
+    buf[32] = 0;
+
+    return std::string(buf);
 }
 
-//////////////////////////////  
+//////////////////////////////
 
 std::ostream& operator<<(std::ostream& out, MD5 md5)
 {
-	return out << md5.hexdigest();
+    return out << md5.hexdigest();
 }
 
-//////////////////////////////  
+//////////////////////////////
 
 std::string md5(const std::string str)
 {
-	MD5 md5 = MD5(str);
+    MD5 md5 = MD5(str);
 
-	return md5.hexdigest();
+    return md5.hexdigest();
 }

+ 35 - 35
lewaimai_dispatch/helper/MD5.h

@@ -1,47 +1,47 @@
 #pragma once
 
-#include <string>  
-#include <iostream>  
+#include <string>
+#include <iostream>
 
 class MD5
 {
 public:
-	typedef unsigned int size_type; // must be 32bit  
+    typedef unsigned int size_type; // must be 32bit
 
-	MD5();
-	MD5(const std::string& text);
-	void update(const unsigned char *buf, size_type length);
-	void update(const char *buf, size_type length);
-	MD5& finalize();
-	std::string hexdigest() const;
-	friend std::ostream& operator<<(std::ostream&, MD5 md5);
+    MD5();
+    MD5(const std::string& text);
+    void update(const unsigned char *buf, size_type length);
+    void update(const char *buf, size_type length);
+    MD5& finalize();
+    std::string hexdigest() const;
+    friend std::ostream& operator<<(std::ostream&, MD5 md5);
 
 private:
-	void init();
-	typedef unsigned char uint1; //  8bit  
-	typedef unsigned int uint4;  // 32bit  
-	enum { blocksize = 64 }; // VC6 won't eat a const static int here  
-
-	void transform(const uint1 block[blocksize]);
-	static void decode(uint4 output[], const uint1 input[], size_type len);
-	static void encode(uint1 output[], const uint4 input[], size_type len);
-
-	bool finalized;
-	uint1 buffer[blocksize]; // bytes that didn't fit in last 64 byte chunk  
-	uint4 count[2];   // 64bit counter for number of bits (lo, hi)  
-	uint4 state[4];   // digest so far  
-	uint1 digest[16]; // the result  
-
-	// low level logic operations  
-	static inline uint4 F(uint4 x, uint4 y, uint4 z);
-	static inline uint4 G(uint4 x, uint4 y, uint4 z);
-	static inline uint4 H(uint4 x, uint4 y, uint4 z);
-	static inline uint4 I(uint4 x, uint4 y, uint4 z);
-	static inline uint4 rotate_left(uint4 x, int n);
-	static inline void FF(uint4 &a, uint4 b, uint4 c, uint4 d, uint4 x, uint4 s, uint4 ac);
-	static inline void GG(uint4 &a, uint4 b, uint4 c, uint4 d, uint4 x, uint4 s, uint4 ac);
-	static inline void HH(uint4 &a, uint4 b, uint4 c, uint4 d, uint4 x, uint4 s, uint4 ac);
-	static inline void II(uint4 &a, uint4 b, uint4 c, uint4 d, uint4 x, uint4 s, uint4 ac);
+    void init();
+    typedef unsigned char uint1; //  8bit
+    typedef unsigned int uint4;  // 32bit
+    enum { blocksize = 64 }; // VC6 won't eat a const static int here
+
+    void transform(const uint1 block[blocksize]);
+    static void decode(uint4 output[], const uint1 input[], size_type len);
+    static void encode(uint1 output[], const uint4 input[], size_type len);
+
+    bool finalized;
+    uint1 buffer[blocksize]; // bytes that didn't fit in last 64 byte chunk
+    uint4 count[2];   // 64bit counter for number of bits (lo, hi)
+    uint4 state[4];   // digest so far
+    uint1 digest[16]; // the result
+
+    // low level logic operations
+    static inline uint4 F(uint4 x, uint4 y, uint4 z);
+    static inline uint4 G(uint4 x, uint4 y, uint4 z);
+    static inline uint4 H(uint4 x, uint4 y, uint4 z);
+    static inline uint4 I(uint4 x, uint4 y, uint4 z);
+    static inline uint4 rotate_left(uint4 x, int n);
+    static inline void FF(uint4 &a, uint4 b, uint4 c, uint4 d, uint4 x, uint4 s, uint4 ac);
+    static inline void GG(uint4 &a, uint4 b, uint4 c, uint4 d, uint4 x, uint4 s, uint4 ac);
+    static inline void HH(uint4 &a, uint4 b, uint4 c, uint4 d, uint4 x, uint4 s, uint4 ac);
+    static inline void II(uint4 &a, uint4 b, uint4 c, uint4 d, uint4 x, uint4 s, uint4 ac);
 };
 
 std::string md5(const std::string str);

+ 4 - 0
lewaimai_dispatch/lewaimai_dispatch_windows.vcxproj

@@ -193,6 +193,8 @@ copy $(ProjectDir)conf\ $(SolutionDir)bin\$(Platform)\$(Configuration)\conf\</Co
     </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemGroup>
+    <ClInclude Include="order\CWaimaiOrder.h" />
+    <ClInclude Include="tool\CPosPrinter.h" />
     <ClInclude Include="wnd\CWaimaiOrderItemUI.h" />
     <ClInclude Include="wnd\CGameFrameWnd.h" />
     <ClInclude Include="wnd\CLoginWnd.h" />
@@ -213,6 +215,8 @@ copy $(ProjectDir)conf\ $(SolutionDir)bin\$(Platform)\$(Configuration)\conf\</Co
     <ClInclude Include="wnd\OrderListUI.h" />
   </ItemGroup>
   <ItemGroup>
+    <ClCompile Include="order\CWaimaiOrder.cpp" />
+    <ClCompile Include="tool\CPosPrinter.cpp" />
     <ClCompile Include="wnd\CWaimaiOrderItemUI.cpp" />
     <ClCompile Include="wnd\CGameFrameWnd.cpp" />
     <ClCompile Include="wnd\CLoginWnd.cpp" />

+ 12 - 0
lewaimai_dispatch/lewaimai_dispatch_windows.vcxproj.filters

@@ -69,6 +69,12 @@
     <ClInclude Include="wnd\CWaimaiOrderItemUI.h">
       <Filter>头文件</Filter>
     </ClInclude>
+    <ClInclude Include="tool\CPosPrinter.h">
+      <Filter>头文件</Filter>
+    </ClInclude>
+    <ClInclude Include="order\CWaimaiOrder.h">
+      <Filter>头文件</Filter>
+    </ClInclude>
   </ItemGroup>
   <ItemGroup>
     <ClCompile Include="lewaimai_dispatch_windows.cpp">
@@ -119,6 +125,12 @@
     <ClCompile Include="wnd\CWaimaiOrderItemUI.cpp">
       <Filter>源文件</Filter>
     </ClCompile>
+    <ClCompile Include="tool\CPosPrinter.cpp">
+      <Filter>源文件</Filter>
+    </ClCompile>
+    <ClCompile Include="order\CWaimaiOrder.cpp">
+      <Filter>源文件</Filter>
+    </ClCompile>
   </ItemGroup>
   <ItemGroup>
     <None Include="conf\dispatch.conf" />

+ 148 - 0
lewaimai_dispatch/order/CWaimaiOrder.cpp

@@ -0,0 +1,148 @@
+#include "../pch/pch.h"
+#include "CWaimaiOrder.h"
+
+CWaimaiOrder::CWaimaiOrder()
+{
+}
+
+
+CWaimaiOrder::~CWaimaiOrder()
+{
+}
+
+//通过订单ID,获取订单详情
+void CWaimaiOrder::InitData(std::string order_id, std::string order_no)
+{
+	std::map<string, string> params;
+	params["id"] = order_id;
+	params["order_no"] = order_no;
+
+	std::string response;
+	bool ret = CZhipuziHttpClient::RequestOld("/waimaiorder/getorderdetail", params, response);
+	if (!ret)
+	{
+		LOG_INFO("网络请求出错");
+	}
+
+	rapidjson::Document document;
+	document.Parse(response.c_str());
+
+	if (document.HasParseError())
+	{
+		LOG_INFO("parse response error!");
+	}
+	else
+	{
+		if (!document.HasMember("errcode") || !document.HasMember("errmsg") || !document.HasMember("data"))
+		{
+			LOG_INFO("json error!");
+		}
+
+		rapidjson::Value& v_errcode = document["errcode"];
+		int errcode = v_errcode.GetInt();
+		if (errcode != 0)
+		{
+			LOG_INFO("response failed! message:" << document["errmsg"].GetString());
+		}
+		{
+			//获得数据成功
+			rapidjson::Value& data = document["data"];
+
+			m_order_id = data["id"].GetString();
+			m_shop_id = data["shop_id"].GetString();
+			m_customer_id = data["customer_id"].GetString();
+			m_customer_name = data["customer_name"].GetString();
+			m_phone = data["phone"].GetString();
+			m_address = data["address"].GetString();
+			m_memo = data["memo"].GetString();
+			m_pay_type = data["pay_type"].GetString();
+			m_promotion = data["promotion"].GetString();
+			m_is_member_discount = data["is_member_discount"].GetString();
+			m_member_discount = data["member_discount"].GetString();
+			m_discount = data["discount"].GetFloat();
+			m_coupon = data["coupon"].GetFloat();
+			m_delivery = data["delivery"].GetFloat();
+			m_price = data["price"].GetFloat();
+			m_order_date = data["order_date"].GetString();
+			m_order_fields = data["order_fields"].GetString();
+			m_order_status = data["order_status"].GetString();
+			m_courier_id = data["courier_id"].GetString();
+			m_is_selftake = data["is_selftake"].GetString();
+			//m_addservice_text = data["addservice_text"].GetString();
+			m_is_dabao = data["is_dabao"].GetString();
+			m_dabao_money = data["dabao_money"].GetString();
+			m_phone_customer_id = data["phone_customer_id"].GetString();
+			m_order_num = data["order_num"].GetString();
+			m_from_type = data["from_type"].GetString();
+			m_is_refund = data["is_refund"].GetString();
+			m_refund_status = data["refund_status"].GetString();
+			m_is_pickup = data["is_pickup"].GetString();
+			m_pickup_time = data["pickup_time"].GetString();
+			m_verify_time = data["verify_time"].GetString();
+			m_verify_user = data["verify_user"].GetString();
+			m_refund_failed_reason = data["refund_failed_reason"].GetString();
+			m_refund_time = data["refund_time"].GetString();
+			m_failed_reason = data["failed_reason"].GetString();
+			m_configmemo = data["configmemo"].GetString();
+			m_courier_type = data["courier_type"].GetString();
+			m_courier_name = data["courier_name"].GetString();
+			m_courier_phone = data["courier_phone"].GetString();
+			m_receiver_lng = data["receiver_lng"].GetString();
+			m_receiver_lat = data["receiver_lat"].GetString();
+			m_reduction_value = data["reduction_value"].GetString();
+			m_price_moling = data["price_moling"].GetString();
+			m_price_plus = data["price_plus"].GetString();
+			m_discount_price = data["discount_price"].GetString();
+			m_order_no = data["order_no"].GetString();
+			m_is_firstcut = data["is_firstcut"].GetString();
+			m_firstcut_value = data["firstcut_value"].GetString();
+			m_goods_coupon_value = data["goods_coupon_value"].GetString();
+			m_take_food_code = data["take_food_code"].GetString();
+			m_need_to_refund = data["need_to_refund"].GetString();
+
+			m_is_nowprinter = data["is_nowprinter"].GetInt();
+
+			m_shop_name = data["shop_name"].GetString();
+			m_longitude = data["longitude"].GetString();
+			m_latitude = data["latitude"].GetString();
+			m_open_selftake = data["open_selftake"].GetString();
+			m_invitetimetimerange = data["invitetimetimerange"].GetString();
+			m_machine_qrcode_open = data["machine_qrcode_open"].GetString();
+			m_machine_qrcode_url = data["machine_qrcode_url"].GetString();
+			m_machine_qrcode_title = data["machine_qrcode_title"].GetString();
+			m_delivery_date = data["delivery_date"].GetString();
+			m_head_picture = data["head_picture"].GetString();
+			m_courier = data["courier"].GetString();
+			m_delivertime = data["delivertime"].GetString();
+			m_customer_order_total = data["customer_order_total"].GetString();
+
+			m_invoice = data["invoice"].GetInt();
+
+			m_invoice_type = data["invoice_type"].GetString();
+			m_tax_payer_id = data["tax_payer_id"].GetString();
+
+			//开始保存订单详情
+			rapidjson::Value& v_rows = data["order_item"];
+
+			for (rapidjson::SizeType i = 0; i < v_rows.Size(); ++i)
+			{
+				rapidjson::Value& v_row_i = v_rows[i];
+
+				CWaimaiOrderItem newItem;
+				newItem.m_id = v_row_i["id"].GetString();
+				newItem.m_food_name = v_row_i["food_name"].GetString();
+				newItem.m_item_price = v_row_i["item_price"].GetString();
+				newItem.m_quantity = v_row_i["quantity"].GetString();
+				newItem.m_type_id = v_row_i["type_id"].GetString();
+				newItem.m_foodpackage_id = v_row_i["foodpackage_id"].GetString();
+				newItem.m_is_foodpackage = v_row_i["is_foodpackage"].GetString();
+				newItem.m_food_unit = v_row_i["food_unit"].GetString();
+				newItem.m_order_item_id = v_row_i["order_item_id"].GetString();
+				newItem.m_food_id = v_row_i["food_id"].GetString();
+				newItem.m_barcode = v_row_i["barcode"].GetString();
+
+				m_order_items.push_back(newItem);
+			}
+		}
+	}
+}

+ 116 - 0
lewaimai_dispatch/order/CWaimaiOrder.h

@@ -0,0 +1,116 @@
+#pragma once
+
+#include <string>
+#include <vector>
+
+class CWaimaiOrderItem
+{
+public:
+	std::string m_id;
+	std::string m_food_name;
+	std::string m_item_price;
+	std::string m_quantity;
+	std::string m_type_id;
+	std::string m_foodpackage_id;
+	std::string m_is_foodpackage;
+	std::string m_food_unit;
+	std::string m_order_item_id;
+	std::string m_food_id;
+	std::string m_barcode;
+};
+
+class CWaimaiOrderField
+{
+public:
+	std::string name;
+	std::string value;
+};
+
+class CWaimaiOrder
+{
+public:
+	CWaimaiOrder();
+	~CWaimaiOrder();
+
+	void InitData(std::string order_id, std::string order_no);
+
+public:
+	std::string m_order_id;
+	std::string m_shop_id;
+	std::string m_customer_id;
+	std::string m_customer_name;
+	std::string m_phone;
+	std::string m_address;
+	std::string m_memo;
+	std::string m_pay_type;
+	std::string m_promotion;
+	std::string m_is_member_discount;
+	std::string m_member_discount;
+
+	double m_discount;
+	double m_coupon;
+	double m_delivery;
+	double m_price;
+
+	std::string m_order_date;
+	std::string m_order_fields;
+	std::string m_order_status;
+	std::string m_courier_id;
+	std::string m_is_selftake;
+	std::string m_addservice_text;
+	std::string m_is_dabao;
+	std::string m_dabao_money;
+	std::string m_phone_customer_id;
+	std::string m_order_num;
+	std::string m_from_type;
+	std::string m_is_refund;
+	std::string m_refund_status;
+	std::string m_is_pickup;
+	std::string m_pickup_time;
+	std::string m_verify_time;
+	std::string m_verify_user;
+	std::string m_refund_failed_reason;
+	std::string m_refund_time;
+	std::string m_failed_reason;
+	std::string m_configmemo;
+	std::string m_courier_type;
+	std::string m_courier_name;
+	std::string m_courier_phone;
+	std::string m_receiver_lng;
+	std::string m_receiver_lat;
+	std::string m_reduction_value;
+	std::string m_price_moling;
+	std::string m_price_plus;
+	std::string m_discount_price;
+	std::string m_order_no;
+	std::string m_is_firstcut;
+	std::string m_firstcut_value;
+	std::string m_goods_coupon_value;
+	std::string m_take_food_code;
+	std::string m_need_to_refund;
+
+	int m_is_nowprinter;
+
+	std::string m_shop_name;
+	std::string m_longitude;
+	std::string m_latitude;
+	std::string m_open_selftake;
+	std::string m_invitetimetimerange;
+	std::string m_machine_qrcode_open;
+	std::string m_machine_qrcode_url;
+	std::string m_machine_qrcode_title;
+	std::string m_delivery_date;
+	std::string m_head_picture;
+	std::string m_courier;
+	std::string m_delivertime;
+	std::string m_customer_order_total;
+
+	int m_invoice;
+
+	std::string m_invoice_type;
+	std::string m_tax_payer_id;
+
+	std::vector<CWaimaiOrderItem> m_order_items;
+	std::vector<CWaimaiOrderField> m_order_field;
+};
+

+ 12 - 0
lewaimai_dispatch/tool/CPosPrinter.cpp

@@ -0,0 +1,12 @@
+#include "CPosPrinter.h"
+
+
+
+CPosPrinter::CPosPrinter()
+{
+}
+
+
+CPosPrinter::~CPosPrinter()
+{
+}

+ 16 - 0
lewaimai_dispatch/tool/CPosPrinter.h

@@ -0,0 +1,16 @@
+#pragma once
+
+#include "../order/CWaimaiOrder.h"
+
+class CPosPrinter
+{
+public:
+	CPosPrinter();
+	~CPosPrinter();
+
+	void PrintWaimaiOrder(CWaimaiOrder& order)
+	{
+
+	}
+};
+

+ 18 - 0
lewaimai_dispatch/wnd/CGameFrameWnd.h

@@ -2,6 +2,10 @@
 
 #include "../pch/pch.h"
 
+#include "CWaimaiOrderItemUI.h"
+#include "../order/CWaimaiOrder.h"
+#include "../tool/CPosPrinter.h"
+
 class CGameFrameWnd : public CWindowWnd, public INotifyUI
 {
 public:
@@ -66,6 +70,7 @@ public:
                 SendMessage(WM_SYSCOMMAND, SC_RESTORE, 0);
                 return;
             }
+
             CDuiString name = msg.pSender->GetName();
             if(name == _T("quitbtn"))
             {
@@ -117,6 +122,19 @@ public:
                     }
                 }
             }
+			else if (name == _T("waimai_order_list_print"))
+			{
+				//外卖订单的打印
+				CWaimaiOrderItemUI* item = static_cast<CWaimaiOrderItemUI*>(msg.pSender->GetParent());
+				std::string waimai_order_id = item->getOrderID();
+				std::string waimai_order_no = item->getOrderNo();
+
+				CWaimaiOrder order;
+				order.InitData(waimai_order_id, waimai_order_no);
+
+				CPosPrinter printer;
+				printer.PrintWaimaiOrder(order);
+			}
         }
         else if(msg.sType == _T("selectchanged"))
         {

+ 48 - 48
lewaimai_dispatch/wnd/CLoginWnd.cpp

@@ -3,54 +3,54 @@
 
 void CLoginFrameWnd::HandleLogin()
 {
-	//判断账号密码是否正确
-	std::wstring account, password;
-	CEditUI* pAccountEdit = static_cast<CEditUI*>(m_pm.FindControl(_T("accountedit")));
-	if (pAccountEdit)
-	{
-		account = pAccountEdit->GetText().GetData();
-	}
-
-	CEditUI* pPasswordEdit = static_cast<CEditUI*>(m_pm.FindControl(_T("pwdedit")));
-	if (pPasswordEdit)
-	{
-		password = pPasswordEdit->GetText().GetData();
-	}
-
-	LOG_INFO("account:" << account.c_str() << ", password:" << password.c_str());
-
-	string s_account = CLewaimaiString::wstring2string(account);
-	string s_password = CLewaimaiString::wstring2string(password);
-
-	CZhipuziHttpClient::Init(s_account, s_password);
-
-	std::string errmsg;
-	bool res = CZhipuziHttpClient::Login(errmsg);
-
-	if (res)
-	{
-		CGameFrameWnd* pFrame = new CGameFrameWnd();
-		if (pFrame == NULL)
-		{
-			return;
-		}
-
-		pFrame->SetIcon(IDI_ICON_DUILIB);
-		pFrame->Create(NULL, _T("游戏中心"), UI_WNDSTYLE_FRAME, 0L, 0, 0, 1024, 738);
-		pFrame->CenterWindow();
-
-		::ShowWindow(*pFrame, SW_SHOWMAXIMIZED);
-
-		Close();
-	}
-	else
-	{
-		//登录失败了
-		CLabelUI* pLoginResultLabel = static_cast<CLabelUI*>(m_pm.FindControl(_T("loginresult")));
-
-		pLoginResultLabel->SetText(std::wstring(_T("登录失败:") + CLewaimaiString::string2wstring(errmsg)).c_str());
-		pLoginResultLabel->SetVisible(true);
-	}
+    //判断账号密码是否正确
+    std::wstring account, password;
+    CEditUI* pAccountEdit = static_cast<CEditUI*>(m_pm.FindControl(_T("accountedit")));
+    if(pAccountEdit)
+    {
+        account = pAccountEdit->GetText().GetData();
+    }
+
+    CEditUI* pPasswordEdit = static_cast<CEditUI*>(m_pm.FindControl(_T("pwdedit")));
+    if(pPasswordEdit)
+    {
+        password = pPasswordEdit->GetText().GetData();
+    }
+
+    LOG_INFO("account:" << account.c_str() << ", password:" << password.c_str());
+
+    string s_account = CLewaimaiString::wstring2string(account);
+    string s_password = CLewaimaiString::wstring2string(password);
+
+    CZhipuziHttpClient::Init(s_account, s_password);
+
+    std::string errmsg;
+    bool res = CZhipuziHttpClient::Login(errmsg);
+
+    if(res)
+    {
+        CGameFrameWnd* pFrame = new CGameFrameWnd();
+        if(pFrame == NULL)
+        {
+            return;
+        }
+
+        pFrame->SetIcon(IDI_ICON_DUILIB);
+        pFrame->Create(NULL, _T("游戏中心"), UI_WNDSTYLE_FRAME, 0L, 0, 0, 1024, 738);
+        pFrame->CenterWindow();
+
+        ::ShowWindow(*pFrame, SW_SHOWMAXIMIZED);
+
+        Close();
+    }
+    else
+    {
+        //登录失败了
+        CLabelUI* pLoginResultLabel = static_cast<CLabelUI*>(m_pm.FindControl(_T("loginresult")));
+
+        pLoginResultLabel->SetText(std::wstring(_T("登录失败:") + CLewaimaiString::string2wstring(errmsg)).c_str());
+        pLoginResultLabel->SetVisible(true);
+    }
 }
 
 

+ 212 - 173
lewaimai_dispatch/wnd/CLoginWnd.h

@@ -6,180 +6,219 @@
 class CLoginFrameWnd : public CWindowWnd, public INotifyUI, public IMessageFilterUI
 {
 public:
-	CLoginFrameWnd()
-	{
-
-	}
-
-	LPCTSTR GetWindowClassName() const { return _T("UILoginFrame"); };
-
-	UINT GetClassStyle() const { return UI_CLASSSTYLE_DIALOG; };
-
-	void OnFinalMessage(HWND /*hWnd*/)
-	{
-		m_pm.RemovePreMessageFilter(this);
-		delete this;
-	};
-
-	void Init() {
-		CEditUI* pAccountEdit = static_cast<CEditUI*>(m_pm.FindControl(_T("accountedit")));
-		if (pAccountEdit) pAccountEdit->SetText(_T(""));
-		pAccountEdit->SetFocus();
-	}
-
-	void Notify(TNotifyUI& msg)
-	{
-		if (msg.sType == _T("click"))
-		{
-			if (msg.pSender->GetName() == _T("closebtn"))
-			{ 
-				PostQuitMessage(0); 
-				return; 
-			}
-			else if (msg.pSender->GetName() == _T("loginBtn")) 
-			{
-				HandleLogin();
-				return;
-			}
-		}
-	}
-
-	LRESULT OnCreate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
-	{
-		LONG styleValue = ::GetWindowLong(*this, GWL_STYLE);
-		styleValue &= ~WS_CAPTION;
-		::SetWindowLong(*this, GWL_STYLE, styleValue | WS_CLIPSIBLINGS | WS_CLIPCHILDREN);
-
-		// 把自己的窗口句柄与窗口绘制管理器挂接在一起
-		m_pm.Init(m_hWnd);
-
-		m_pm.AddPreMessageFilter(this);
-
-		CDialogBuilder builder;
-
-		CControlUI* pRoot = builder.Create(_T("login.xml"), (UINT)0, NULL, &m_pm);
-		ASSERT(pRoot && "Failed to parse XML");
-
-		// 把这些控件绘制到本窗口上
-		m_pm.AttachDialog(pRoot);
-
-		// 把自己加入到CPaintManagerUI的m_aNotifiers数组中,用于处理Notify函数
-		m_pm.AddNotifier(this);
-
-		Init();
-
-		return 0;
-	}
-
-	LRESULT OnNcActivate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
-	{
-		if (::IsIconic(*this)) bHandled = FALSE;
-		return (wParam == 0) ? TRUE : FALSE;
-	}
-
-	LRESULT OnNcCalcSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
-	{
-		return 0;
-	}
-
-	LRESULT OnNcPaint(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
-	{
-		return 0;
-	}
-
-	LRESULT OnNcHitTest(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
-	{
-		POINT pt; pt.x = GET_X_LPARAM(lParam); pt.y = GET_Y_LPARAM(lParam);
-		::ScreenToClient(*this, &pt);
-
-		RECT rcClient;
-		::GetClientRect(*this, &rcClient);
-
-		RECT rcCaption = m_pm.GetCaptionRect();
-		if (pt.x >= rcClient.left + rcCaption.left && pt.x < rcClient.right - rcCaption.right \
-			&& pt.y >= rcCaption.top && pt.y < rcCaption.bottom) {
-			CControlUI* pControl = static_cast<CControlUI*>(m_pm.FindControl(pt));
-			if (pControl && _tcscmp(pControl->GetClass(), DUI_CTR_BUTTON) != 0)
-				return HTCAPTION;
-		}
-
-		return HTCLIENT;
-	}
-
-	LRESULT OnSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
-	{
-		SIZE szRoundCorner = m_pm.GetRoundCorner();
-		if (!::IsIconic(*this) && (szRoundCorner.cx != 0 || szRoundCorner.cy != 0)) {
-			CDuiRect rcWnd;
-			::GetWindowRect(*this, &rcWnd);
-			rcWnd.Offset(-rcWnd.left, -rcWnd.top);
-			rcWnd.right++; rcWnd.bottom++;
-			HRGN hRgn = ::CreateRoundRectRgn(rcWnd.left, rcWnd.top, rcWnd.right, rcWnd.bottom, szRoundCorner.cx, szRoundCorner.cy);
-			::SetWindowRgn(*this, hRgn, TRUE);
-			::DeleteObject(hRgn);
-		}
-
-		bHandled = FALSE;
-		return 0;
-	}
-
-	LRESULT HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam)
-	{
-		LRESULT lRes = 0;
-		BOOL bHandled = TRUE;
-		switch (uMsg) {
-		case WM_CREATE:        lRes = OnCreate(uMsg, wParam, lParam, bHandled); break;
-		case WM_NCACTIVATE:    lRes = OnNcActivate(uMsg, wParam, lParam, bHandled); break;
-		case WM_NCCALCSIZE:    lRes = OnNcCalcSize(uMsg, wParam, lParam, bHandled); break;
-		case WM_NCPAINT:       lRes = OnNcPaint(uMsg, wParam, lParam, bHandled); break;
-		case WM_NCHITTEST:     lRes = OnNcHitTest(uMsg, wParam, lParam, bHandled); break;
-		case WM_SIZE:          lRes = OnSize(uMsg, wParam, lParam, bHandled); break;
-		default:
-			bHandled = FALSE;
-		}
-		if (bHandled) return lRes;
-		if (m_pm.MessageHandler(uMsg, wParam, lParam, lRes)) return lRes;
-		return CWindowWnd::HandleMessage(uMsg, wParam, lParam);
-	}
-
-	LRESULT MessageHandler(UINT uMsg, WPARAM wParam, LPARAM lParam, bool& bHandled)
-	{
-		if (uMsg == WM_KEYDOWN)
-		{
-			if (wParam == VK_RETURN)
-			{
-				CEditUI* pEdit = static_cast<CEditUI*>(m_pm.FindControl(_T("accountedit")));
-				if (pEdit->GetText().IsEmpty())
-				{
-					pEdit->SetFocus();
-				}
-				else
-				{
-					pEdit = static_cast<CEditUI*>(m_pm.FindControl(_T("pwdedit")));
-					if (pEdit->GetText().IsEmpty())
-					{
-						pEdit->SetFocus();
-					}
-					else
-					{
-						this->HandleLogin();
-					}
-				}
-				return true;
-			}
-			else if (wParam == VK_ESCAPE)
-			{
-				PostQuitMessage(0);
-				return true;
-			}
-
-		}
-		return false;
-	}
-
-	void HandleLogin();
+    CLoginFrameWnd()
+    {
+
+    }
+
+    LPCTSTR GetWindowClassName() const
+    {
+        return _T("UILoginFrame");
+    };
+
+    UINT GetClassStyle() const
+    {
+        return UI_CLASSSTYLE_DIALOG;
+    };
+
+    void OnFinalMessage(HWND /*hWnd*/)
+    {
+        m_pm.RemovePreMessageFilter(this);
+        delete this;
+    };
+
+    void Init()
+    {
+        CEditUI* pAccountEdit = static_cast<CEditUI*>(m_pm.FindControl(_T("accountedit")));
+        if(pAccountEdit)
+        {
+            pAccountEdit->SetText(_T(""));
+        }
+        pAccountEdit->SetFocus();
+    }
+
+    void Notify(TNotifyUI& msg)
+    {
+        if(msg.sType == _T("click"))
+        {
+            if(msg.pSender->GetName() == _T("closebtn"))
+            {
+                PostQuitMessage(0);
+                return;
+            }
+            else if(msg.pSender->GetName() == _T("loginBtn"))
+            {
+                HandleLogin();
+                return;
+            }
+        }
+    }
+
+    LRESULT OnCreate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
+    {
+        LONG styleValue = ::GetWindowLong(*this, GWL_STYLE);
+        styleValue &= ~WS_CAPTION;
+        ::SetWindowLong(*this, GWL_STYLE, styleValue | WS_CLIPSIBLINGS | WS_CLIPCHILDREN);
+
+        // 把自己的窗口句柄与窗口绘制管理器挂接在一起
+        m_pm.Init(m_hWnd);
+
+        m_pm.AddPreMessageFilter(this);
+
+        CDialogBuilder builder;
+
+        CControlUI* pRoot = builder.Create(_T("login.xml"), (UINT)0, NULL, &m_pm);
+        ASSERT(pRoot && "Failed to parse XML");
+
+        // 把这些控件绘制到本窗口上
+        m_pm.AttachDialog(pRoot);
+
+        // 把自己加入到CPaintManagerUI的m_aNotifiers数组中,用于处理Notify函数
+        m_pm.AddNotifier(this);
+
+        Init();
+
+        return 0;
+    }
+
+    LRESULT OnNcActivate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
+    {
+        if(::IsIconic(*this))
+        {
+            bHandled = FALSE;
+        }
+        return (wParam == 0) ? TRUE : FALSE;
+    }
+
+    LRESULT OnNcCalcSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
+    {
+        return 0;
+    }
+
+    LRESULT OnNcPaint(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
+    {
+        return 0;
+    }
+
+    LRESULT OnNcHitTest(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
+    {
+        POINT pt;
+        pt.x = GET_X_LPARAM(lParam);
+        pt.y = GET_Y_LPARAM(lParam);
+        ::ScreenToClient(*this, &pt);
+
+        RECT rcClient;
+        ::GetClientRect(*this, &rcClient);
+
+        RECT rcCaption = m_pm.GetCaptionRect();
+        if(pt.x >= rcClient.left + rcCaption.left && pt.x < rcClient.right - rcCaption.right \
+                && pt.y >= rcCaption.top && pt.y < rcCaption.bottom)
+        {
+            CControlUI* pControl = static_cast<CControlUI*>(m_pm.FindControl(pt));
+            if(pControl && _tcscmp(pControl->GetClass(), DUI_CTR_BUTTON) != 0)
+            {
+                return HTCAPTION;
+            }
+        }
+
+        return HTCLIENT;
+    }
+
+    LRESULT OnSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
+    {
+        SIZE szRoundCorner = m_pm.GetRoundCorner();
+        if(!::IsIconic(*this) && (szRoundCorner.cx != 0 || szRoundCorner.cy != 0))
+        {
+            CDuiRect rcWnd;
+            ::GetWindowRect(*this, &rcWnd);
+            rcWnd.Offset(-rcWnd.left, -rcWnd.top);
+            rcWnd.right++;
+            rcWnd.bottom++;
+            HRGN hRgn = ::CreateRoundRectRgn(rcWnd.left, rcWnd.top, rcWnd.right, rcWnd.bottom, szRoundCorner.cx, szRoundCorner.cy);
+            ::SetWindowRgn(*this, hRgn, TRUE);
+            ::DeleteObject(hRgn);
+        }
+
+        bHandled = FALSE;
+        return 0;
+    }
+
+    LRESULT HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam)
+    {
+        LRESULT lRes = 0;
+        BOOL bHandled = TRUE;
+        switch(uMsg)
+        {
+        case WM_CREATE:
+            lRes = OnCreate(uMsg, wParam, lParam, bHandled);
+            break;
+        case WM_NCACTIVATE:
+            lRes = OnNcActivate(uMsg, wParam, lParam, bHandled);
+            break;
+        case WM_NCCALCSIZE:
+            lRes = OnNcCalcSize(uMsg, wParam, lParam, bHandled);
+            break;
+        case WM_NCPAINT:
+            lRes = OnNcPaint(uMsg, wParam, lParam, bHandled);
+            break;
+        case WM_NCHITTEST:
+            lRes = OnNcHitTest(uMsg, wParam, lParam, bHandled);
+            break;
+        case WM_SIZE:
+            lRes = OnSize(uMsg, wParam, lParam, bHandled);
+            break;
+        default:
+            bHandled = FALSE;
+        }
+        if(bHandled)
+        {
+            return lRes;
+        }
+        if(m_pm.MessageHandler(uMsg, wParam, lParam, lRes))
+        {
+            return lRes;
+        }
+        return CWindowWnd::HandleMessage(uMsg, wParam, lParam);
+    }
+
+    LRESULT MessageHandler(UINT uMsg, WPARAM wParam, LPARAM lParam, bool& bHandled)
+    {
+        if(uMsg == WM_KEYDOWN)
+        {
+            if(wParam == VK_RETURN)
+            {
+                CEditUI* pEdit = static_cast<CEditUI*>(m_pm.FindControl(_T("accountedit")));
+                if(pEdit->GetText().IsEmpty())
+                {
+                    pEdit->SetFocus();
+                }
+                else
+                {
+                    pEdit = static_cast<CEditUI*>(m_pm.FindControl(_T("pwdedit")));
+                    if(pEdit->GetText().IsEmpty())
+                    {
+                        pEdit->SetFocus();
+                    }
+                    else
+                    {
+                        this->HandleLogin();
+                    }
+                }
+                return true;
+            }
+            else if(wParam == VK_ESCAPE)
+            {
+                PostQuitMessage(0);
+                return true;
+            }
+
+        }
+        return false;
+    }
+
+    void HandleLogin();
 
 public:
-	CPaintManagerUI m_pm;
+    CPaintManagerUI m_pm;
 };
 

+ 10 - 0
lewaimai_dispatch/wnd/CWaimaiOrderItemUI.h

@@ -38,6 +38,16 @@ public:
 		this->FindSubControl(L"waimai_order_list_init_date")->SetText(init_date_show.c_str());
 	}
 
+	std::string getOrderID()
+	{
+		return m_orderid;
+	}
+
+	std::string getOrderNo()
+	{
+		return m_order_no;
+	}
+
 	void DoEvent(TEventUI& event)
 	{
 		if (event.Type == UIEVENT_BUTTONDOWN)

+ 1 - 1
lewaimai_dispatch/wnd/MiniDumper.h

@@ -17,7 +17,7 @@ private:
     bool getImpersonationToken(HANDLE* phToken);
     BOOL enablePrivilege(LPCTSTR pszPriv, HANDLE hToken, TOKEN_PRIVILEGES* ptpOld);
     BOOL restorePrivilege(HANDLE hToken, TOKEN_PRIVILEGES* ptpOld);
-    LONG writeMiniDump(_EXCEPTION_POINTERS *pExceptionInfo );
+    LONG writeMiniDump(_EXCEPTION_POINTERS *pExceptionInfo);
 
     _EXCEPTION_POINTERS *m_pExceptionInfo;
     TCHAR m_szMiniDumpPath[MAX_PATH];