PDA

View Full Version : การสร้างหน้าต่าง Windows อย่างง่าย(มั้ง) ด้วย Win32



asylu3
01-10-2003, 08:31 PM
อย่าพึ่งแปลกใจนะครับทำไม่ต้องสอนกันทำอะไรที่ถอยหลังเข้าคลองด้วย จริงๆอยากจะให้ลองเปลี่ยนจากการใช้ MFC แบบเดิมที่คลิ๊กไม่กี่ครั้งก็เสร็จ มาเป้นแบบ manual เขียนเองบ้าง

ถ้ามีเวลาว่างจะมาอธิบายนะครับ


#include <windows.h>

LRESULT CALLBACK WndProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam){

return DefWindowProc(hWnd, msg, wParam, lParam);
}

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,
LPSTR lpCmdLine,int nCMdShow){

WNDCLASSEX wc;
MSG msg;

wc.cbSize = sizeof(WNDCLASSEX);
wc.style = 0;
wc.lpfnWndProc = WndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wc.lpszMenuName = NULL;
wc.lpszClassName = "test";
wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION);


RegisterClassEx(&wc);
HWND hWnd=CreateWindowEx(wc.style,"test","test",wc.style,
10,10,200,200,NULL,NULL,hInstance,NULL);

if(hWnd == NULL)
{
MessageBox(NULL, "Window Creation Failed!", "Error!",
MB_ICONEXCLAMATION | MB_OK);
return 0;
}

ShowWindow(hWnd,nCMdShow);
UpdateWindow(hWnd);

while(GetMessage(&msg, NULL, 0, 0) > 0)
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}

return msg.wParam;
}



จากที่เขียนกันมานาน เราก็ได้ Window อย่างมักง่าย เอ้ย อย่างง่าย (สมชื่อจริงๆ)

http://seri.kmutt.ac.th/cs02/citec/tutorial/images/window.bmp

asylu3
02-10-2003, 09:22 PM
version 2 ง่ายกว่าเดิม เนื่องจากผมได้เขียน class ชื่อ SimpleWnd ซึ่งอยู่ใน header file SimpleW32.H เพื่อทำการ encapsulate รายละเอียดต่างๆไว้ class นี้มีรูปแบบดังนี้


#if !defined SIMPLEWND_H
#define SIMPLEWND_H

#include <windows.h>

class SimpleWnd{

public:
void Show();
SimpleWnd(HINSTANCE&,int);
void Init();
WNDCLASSEX wc;
void MsgLoop();
MSG msg;
private:
HWND hWnd;
HINSTANCE Myinstance;
int myCmdShow;



};

LRESULT CALLBACK WndProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam){

return DefWindowProc(hWnd, msg, wParam, lParam);
}

SimpleWnd::SimpleWnd(HINSTANCE &hInstance,int nCMDShow){

myCmdShow=nCMDShow;
Myinstance=hInstance;

wc.cbSize = sizeof(WNDCLASSEX);
wc.style = 0;
wc.lpfnWndProc = WndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wc.lpszMenuName = NULL;
wc.lpszClassName = "test";
wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION);

}


void SimpleWnd::Init(){

RegisterClassEx(&wc);
hWnd=CreateWindowEx(wc.style,"test","test",wc.style,
10,10,200,200,NULL,NULL,Myinstance,NULL);

if(hWnd == NULL)
{
MessageBox(NULL, "Window Creation Failed!", "Error!",
MB_ICONEXCLAMATION | MB_OK);

}


}

void SimpleWnd::Show(){

ShowWindow(hWnd,myCmdShow);
UpdateWindow(hWnd);
}

#endif


แล้วมีรูปแบบการนำไปใช้ดังนี้

#include "SimpleW32.h"

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,
LPSTR lpCmdLine,int nCMdShow){
MSG msg;
SimpleWnd obj(hInstance,nCMdShow);
obj.Init();
obj.Show();

while(GetMessage(&msg, NULL, 0, 0) > 0)
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}

return msg.wParam;
}