Solved

Unicode Font in C# for Windows Mobile Programming

Posted on 2007-11-20
5
2,910 Views
Last Modified: 2013-12-21
hi
i am a beginner programmer in windows mobile but a professional programmer in other os.
i know C# average and i am a new programmer for pocket pc.
i want show my labels in persian language or arabic in unicode format.when i write a strind in Visual studio 2005 (C#),that's correct but when i run program pocket pc simulator doesn't show that correct in unicode format,this is first my problem.
but when run this program on pocket pc,pocket pc show my persian string in reverse format,my text show from end to first ,this is more important for me.
what is solution? please hel me step by step for showing my text in correct unicode format.
thanks
0
Comment
Question by:mr_mpz
  • 2
5 Comments
 
LVL 3

Accepted Solution

by:
wizrr earned 200 total points
Comment Utility
Hi.
You need to implement RTL (right to left) reading in your text box\label? Try apply WS_EX_RTLREADING style to your control (i never used that, but should work). You can download OpenNetCF open source library to get experience with windows native. There are a lot of code like code i provide for you:
// as that style exists in winuser.h we define following:

// #define WS_EX_RTLREADING        0x00002000L

readonly int WS_EX_RTLREADING = unchecked(0x00002000L);
 

public enum GetWindowLongType : int {

  EXSTYLE = -20,

  HINSTANCE = -6,

  HWNDPARENT = -8,

  ID = -12,

  STYLE = -16,

  USERDATA = -21,

  WNDPROC = -4

}
 

[Flags]

public enum SetWindowPositionFlags {

	ASYNCWINDOWPOS = 0x4000,

	DEFERERASE = 0x2000,

	DRAWFRAME = 0x20,

	FRAMECHANGED = 0x20,

	HIDEWINDOW = 0x80,

	NOACTIVATE = 0x10,

	NOCOPYBITS = 0x100,

	NOMOVE = 2,

	NOOWNERZORDER = 0x200,

	NOREDRAW = 8,

	NOREPOSITION = 0x200,

	NOSENDCHANGING = 0x400,

	NOSIZE = 1,

	NOZORDER = 4,

	SHOWWINDOW = 0x40

}
 

[DllImport("coredll.dll", SetLastError=true)]

public static extern int GetWindowLong(IntPtr hWnd, GetWindowLongType gwlType);
 

[DllImport("coredll.dll", SetLastError=true)]

public static extern void SetWindowLong(IntPtr hWnd, 

    GetWindowLongType gwlType, int nValue);
 
 

[DllImport("coredll.dll", SetLastError=true)]

public static extern int SetWindowPos(IntPtr hWnd, HWND pos, 

    int X, int Y, int cx, int cy, SetWindowPositionFlags uFlags);
 

public bool RightToLeftReading {

  get {

    if ((GetWindowLong(this.Handle, GetWindowLongType.EXSTYLE) & WS_EX_RTLREADING)

        == WS_EX_RTLREADING) {

      // WS_EX_RTLREADING flag exists

      return ( true );

    } else {

      // WS_EX_RTLREADING flag does not exists

      return ( false );

    }

  }

  set {

    if (RightToLeftReading != value)

    if ( value ) {

      int longFlags = GetWindowLong(this.Handle, GetWindowLongType.EXSTYLE);

      SetWindowLong(this.Handle, GetWindowLongType.EXSTYLE, longFlags | WS_EX_RTLREADING);

      SetWindowLong(this.Handle, GetWindowLongType.EXSTYLE, longFlags | WS_EX_RTLREADING);

      // update control

      SetWindowPos(hwnd, HWND.TOPMOST, 0, 0, 0, 0, 

         SetWindowPositionFlags.DRAWFRAME | 

         SetWindowPositionFlags.NOACTIVATE | 

         SetWindowPositionFlags.NOMOVE | 

         SetWindowPositionFlags.NOSIZE);

    } else {

      int longFlags = GetWindowLong(this.Handle, GetWindowLongType.EXSTYLE);

      // try set two times because of SetWindowLong CE bugs

      SetWindowLong(this.Handle, GetWindowLongType.EXSTYLE, longFlags & ~WS_EX_RTLREADING);

      SetWindowLong(this.Handle, GetWindowLongType.EXSTYLE, longFlags & ~WS_EX_RTLREADING);

      // update control

      SetWindowPos(hwnd, HWND.TOPMOST, 0, 0, 0, 0, 

         SetWindowPositionFlags.DRAWFRAME | 

         SetWindowPositionFlags.NOACTIVATE | 

         SetWindowPositionFlags.NOMOVE | 

         SetWindowPositionFlags.NOSIZE);

    }

  }

}

Open in new window

0
 
LVL 3

Expert Comment

by:wizrr
Comment Utility
Oh, if that works don't forget to check is control created in design time or not. Because in design time we can't access native functions from coredll.dll. You should do something like this:

if ( Site == null || (Site != null && !Site.IsDesignTime) || !IsDesignTime()) {

  // call native methods

} else {

  // try to implement native methods by yourself (or use same native methods but from normal Windows not CE)

}

...

public static bool IsDesignTime()

{

        Assembly assembly = typeof(int).Assembly;

        return ((assembly != null) && assembly.FullName.ToUpper().EndsWith("B77A5C561934E089"));

}

Open in new window

0
 
LVL 1

Author Comment

by:mr_mpz
Comment Utility
thanks,let i test that
0
 
LVL 1

Expert Comment

by:Computer101
Comment Utility
Forced accept.

Computer101
EE Admin
0

Featured Post

Do email signature updates give you a headache?

Constantly trying to correctly format email signatures? Spending all of your time at every user’s desk to make updates? Want high-quality HTML signatures on all devices, including on mobiles and Macs? Then, let Exclaimer solve all your email signature problems today!

Join & Write a Comment

The use of stolen credentials is a hot commodity this year allowing threat actors to move laterally within the network in order to avoid breach detection.
Recently Microsoft released a brand new function called CONCAT. It's supposed to replace its predecessor CONCATENATE. But how does it work? And what's new? In this article, we take a closer look at all of this - we even included an exercise file for…
Windows 8 comes with a dramatically different user interface known as Metro. Notably missing from the new interface is a Start button and Start Menu. Many users do not like it, much preferring the interface of earlier versions — Windows 7, Windows X…
The viewer will learn how to successfully create a multiboot device using the SARDU utility on Windows 7. Start the SARDU utility: Change the image directory to wherever you store your ISOs, this will prevent you from having 2 copies of an ISO wit…

743 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

17 Experts available now in Live!

Get 1:1 Help Now